Provided by: manpages-it_4.23.1-1_all bug

NOME

       glob - Fare il globbing dei percorsi dei file

DESCRIZIONE

       Molto  tempo  fa, in UNIX V6, c'era un programma /etc/glob che espandeva i modelli di metacaratteri. Poco
       dopo venne incorporato nella shell.

       Al giorno d'oggi c'è anche una routine di libreria glob(3) che svolge la stessa funzione per un programma
       utente.

       Le regole sono le seguenti (POSIX.2, 3.13).

   Corrispondenze di metacaratteri
       Una  stringa  è  un  modello di metacaratteri se contiene uno dei caratteri '?', '*' o '['. Il globbing è
       l'operazione che espande un modello di metacaratteri in un elenco di percorsi che corrisponde al modello.
       Una corrispondenza è definita da:

       Un '?' (non fra virgolette) corrisponde ad un carattere singolo.

       Un '*' (non fra virgolette) corrisponde a qualsiasi stringa, compresa quella vuota.

       Classi di carattere

       Un'espressione  nella  forma  "[...]",  in  cui  il  primo  carattere  dopo  la '[' iniziale non è un '!'
       corrisponde ad un carattere singolo, cioè a qualsiasi carattere fra quelli racchiusi tra le parentesi. La
       stringa  tra  le  parentesi  non può essere vuota; perciò è possibile avere una ']' fra parentesi, purché
       essa sia il primo carattere (perciò "[][!]" corrisponde ai tre caratteri '[', ']' e '!').

       Intervalli

       C'è una convenzione speciale: due caratteri separati da '-' indicano un intervallo. (Perciò "[A-Fa-f0-9]"
       equivale  a  "[ABCDEFabcdef0123456789]"). Si può includere un '-' col suo significato letterale ponendolo
       al primo o all'ultimo posto fra le parentesi (perciò "[]-]" corrisponde solo ai due caratteri ']' e  '-',
       e "[--0]" corrisponde ai tre caratteri '-', '.', '0', dato che '/' non ha corrispondenze).

       Complementazione

       Un'espressione  "[!...]"  corrisponde  ad  un  carattere  singolo,  cioè  a  qualsiasi  carattere cui non
       corrisponda l'espressione ottenuta rimuovendo il '! ' iniziale (perciò "[!]a-]" corrisponde  a  qualsiasi
       carattere singolo eccetto ']', 'a' e '-'.).

       Si  può  rimuovere il significato speciale di '?', '*' e '[' facendoli precedere da una backslash, o, nel
       caso l'espressione sia parte di una riga di comando della shell, ponendoli  fra  virgolette  doppie.  Fra
       parentesi  quadre questi caratteri hanno un significato letterale. Perciò "[[?*\]" corrisponde ai quattro
       caratteri '[', '?', '*' e '\'.

   Percorsi
       Il globbing si applica separatamente a ogni componente di un percorso. A uno '/' in un percorso  non  può
       corrispondere uno dei metacaratteri '?' o '*', né un intervallo come "[.-0]". Un intervallo contenente un
       carattere '/' esplicito  è  sintaticamente  scorretto.  (POSIX  richiede  che  i  modelli  sintaticamente
       scorretti sianolasciati immodificati.)

       Se  il  nome  di  un file inizia con un '.', deve esserci una corrispondenza esplicita per il '.' (perciò
       rm * non rimuove .profile, e tar c * non archivia tutti i file: tar c . è meglio).

   Elenchi vuoti
       La chiara e semplice regola precedente: "espandere un modello di metacaratteri in un elenco  di  percorsi
       che  corrisponde  al modello» era la definizione originale di Unix. Permetteva modelli che si espandevano
       in elenchi vuoti, come in

           xv -wait 0 *.gif *.jpg

       quando, magari, non c'è nessun file *.gif (e questo non causa un errore). D'altra  parte  POSIX  richiede
       che  un  modello  di  metacaratteri non venga modificato se è sintatticamente sbagliato o se la lista dei
       percorsi corrispondenti è vuota. Con bash si può forzare il comportamento classico con questo comando:

           shopt -s nullglob

       (Problemi simili accadono in altri casi. Per esempio, mentre script vecchi usano

           rm `find . -name "*~"`

       per uno script nuovo bisogna usare

           rm -f nosuchfile `find . -name "*~"`

       per evitare messaggi di errore di rm invocato con un elenco vuoto di argomenti).

NOTE

   Espressioni regolari
       Si noti che i modelli di metacaratteri non sono espressioni regolari, per quanto si assomiglino. Prima di
       tutto  corrispondono a nomi di file piuttosto che a testo; inoltre le convenzioni non sono le stesse: per
       esempio, '*' in un'espressione regolare significa zero o più copie di quanto precede.

       Ora che le espressioni regolari usano espressioni fra parentesi quadre in cui la negazione è indicata con
       un '^', POSIX ha dichiarato indefinito l'effetto di un modello come"[^...]".

   Classi di carattere e internazionalizzazione
       Naturalmente  gli  intervalli  erano  originariamente interpretati come intervalli ASCII, per cui "[ -%]"
       stava per "[ !"#$%]"  e  "[a-z]"  per  "una  qualsiasi  minuscola".  Alcune  implementazioni  Unix  hanno
       generalizzato  questo comportamento in modo tale che l'intervallo X-Y denoti l'insieme di caratteri i cui
       codici sono compresi fra il codice di X e quello di Y. Comunque ciò  richiede  che  l'utente  conosca  la
       codifica  usata  sul  sistema  locale,  e,  inoltre,  non  è  comodo quando la sequenza di collazione per
       l'alfabeto locale è diversa dall'ordine dei codici di carattere. Perciò POSIX ha notevolmente  esteso  la
       notazione  parentetica, sia per i modelli di metacaratteri che per le espressioni regolari. Prima abbiamo
       visto tre tipi di argomenti che possono apparire in  un'espressione  parentetica:  vale  a  dire  (i)  la
       negazione, (ii) caratteri singoli espliciti e (iii) intervalli. POSIX definisce gli intervalli in un modo
       internazionalmente più utile e aggiunge altri tre tipi:

       (iii) Intervalli del tipo X-Y che includono tutti i caratteri compresi tra X e Y (inclusi) nella sequenza
       di collazione definita dalla categoria LC_COLLATE nella localizzazione corrente.

       (iv) Classi di carattere con nome, come

       [:alnum:]  [:alpha:]  [:blank:]  [:cntrl:]
       [:digit:]  [:graph:]  [:lower:]  [:print:]
       [:punct:]  [:space:]  [:upper:]  [:xdigit:]

       in modo da poter dire "[[:lower:]]" al posto di "[a-z]" e ottenere il risultato corretto anche in danese,
       dove ci sono tre lettere nell'alfabeto che vengono dopo la 'z'. Queste classi di carattere sono  definite
       dalla categoria LC_CTYPE nella localizzazione corrente.

       (v)  Elementi  di collazione, come "[.ch.]" o "[.a-acute.]", in cui la stringa compresa fra "[." e ".]" è
       un elemento di collazione definito dalla localizzazione corrente.  Si  noti  che  questo  può  essere  un
       elemento composto da più caratteri.

       (vi)  Una  classe di equivalenza, come "[=a=]", in cui la stringa compresa tra "[=" e "=]" è un qualsiasi
       elemento di collazione nella sua classe di equivalenza, come definita dalla localizzazione corrente.  Per
       esempio,      "I[[=a=]]"      potrebbe      essere      equivalente      a      "[aáàäâ]",     cioè     a
       "[a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]".

VEDERE ANCHE

       sh(1), fnmatch(3), glob(3), locale(7), regex(7)

TRADUZIONE

       La  traduzione  italiana  di  questa  pagina  di  manuale  è   stata   creata   da   Ottavio   G.   Rizzo
       <rizzo@pluto.linux.it>,  Giulio  Daprelà  <giulio@pluto.it>, Elisabetta Galli <lab@kkk.it>, Marco Curreli
       <marcocurreli@tiscali.it> e Giuseppe Sacco <eppesuig@debian.org>

       Questa  traduzione  è  documentazione  libera;  leggere  la  GNU  General  Public  License   Versione   3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  o  successiva  per  le  condizioni  di  copyright.   Non  ci
       assumiamo alcuna responsabilità.

       Per segnalare errori nella traduzione di  questa  pagina  di  manuale  inviare  un  messaggio  a  ⟨pluto-
       ildp@lists.pluto.it⟩.