Provided by: manpages-it_2.80-3_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)