Provided by: manpages-it_2.80-5_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 metacaretteri. Poco
       dopo divenne parte della shell.

       Al giorno d'oggi c'è pure una routine di libreria glob(3) per svolgere un simile compito a vantaggio  dei
       programmi utenti.

       Le regole sono le seguenti (POSIX 1003.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 della forma `[...]', dove il  primo  caratttere  dopo  la  `['  iniziale  non  è  un  `!',
       corrisponde ad un carattere singolo, cioè a qualsiasi carattere fra quelli racchiusi tra le parentesi. La
       stringa nelle parentesi non può essere vuota; perciò è possibile avere una `]' fra parentesi, purché essa
       sia il primo carattere (ad es., `[][!]' corrisponde ai tre caratteri `[', `]' e `!').

       Intervallo

       C'è una convenzione speciale: due caratteri separati da `-' indicano un intervallo (ad es., `[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 (ad es. `[]-]' corrisponde solo ai due caratteri `]' e  `-',
       `[--0]' corrisponde ai tre caratteri `-', `.', `0', mentre `/' non ha corrispondenze.)

       Complementazione

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

       Si può togliere il significato speciale di  `?', `*' e `[' precedendoli con un  backslash,  o,  nel  caso
       l'espressione  sia  parte  di  una  riga  di  comando  della  shell, ponendola fra virgolette doppie. Fra
       parentesi quadre questi caratteri hanno un significato  letterale.  Per  es.,   `[[?*\]'  corrisponde  ai
       quattro caratteri `[', `?', `*' e `\'.

   Percorsi
       Il  globbing è applicato separatamente a ogni componente di un percorso. A uno '/' di un percorso non può
       corrispondere uno dei metacaratteri `?' o `*', né un intervallo  come  `[.-0]'.  Un  intervallo  non  può
       contenere uno '/' esplicito: ciò risulterebbe in un errore di sintassi.

       Se  il  nome di un file inizia con un `.', deve esserci una corrispondenza esplicita per il `.'. Per es.,
       `rm *' non rimuove

   Elenchi vuoti
       La chiara e semplice regola di più sopra: «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  ponendo
       allow_null_glob_expansion=true.

       (Problemi simili accadono in altri posti. Per es., mentre script vecchi usano
            rm `find . -name "*~"`
       per uno script nuovo  bisogna usare
            rm -f nosuchfile `find . -name "*~"`
       per evitare messagi 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, e poi le convenzioni non sono  le  stesse:  per
       esempio, `*' in un'espressione regolare vuol dire zero o più copie della cosa precedente.

       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  gl'intervalli  erano  originariamente  interpretate  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 denota l'insieme di caratteri i cui
       codici sono compresi fra i codici di X e Y. D'altra parte, 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: (i) una negazione  (ii) caratteri
       singoli espliciti e (iii) intervalli. POSIX definisce gl'intervalli in  un  modo  internazionalmente  più
       utile e aggiunge altri tre tipi:

       (iii)  Intervalli  del  tipo  X-Y  includono tutti i caratteri (estremi inclusi) compresi tra X e Y 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 zeta. Queste classi di carattere sono definite
       dalla categoria LC_CTYPE nella localizzazione corrente.

       (v) Elementi di collazione, come «[.ch.]» o «[.a-acute.]», dove 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=]», dove la stringa compresa tra «[=» e  «=]»  e  un  qualsiasi
       elemento  di  collazione  nella  sua  classe  di equivalenza, definita dalla localizzazione corrente. Per
       esempio, «[[=a=]]» potrebbe essere equivalente a «[aáàäâ]», (attenzione: questo è Latin-1) cioè a «[a[.a-
       acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]».

VEDERE ANCHE

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

Unix                                             24 agosto 2003                                          GLOB(7)