Provided by: manpages-it_0.3.4-5_all bug

NOME

       glob - Globbare i 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 ‘[’. Globbare è  l’operazione  che  espande  un  modello  di
       metacaratteri  in un elenco di percorsi che corrisponde al modello. Una
       corrispondenza è definita da:

       Un ‘?’ (non fra parentesi) corrisponde ad un carattere singolo.

       Un ‘*’ (non fra parentesi) 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
       Una convenzione speciale: due caratteri separati da un ‘-’ 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  ‘-’,
       mentre ‘[--/]’ corrisponde ai tre caratteri ‘-’, ‘.’, ‘/’).

   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  a   ‘?’,  ‘*’  e  ‘[’  il  loro  significato  speciale
       precedendoli  con uno 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

       Ogni componente di un percorso viene globbata separatamente. A uno  ’/’
       di  un  percorso non può corrispondere una 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 esplicitamente per il ‘.’. Per es., ‘rm *’ non rimuove

LISTE VUOTE

       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 liste vuote, 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 IR 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  ‘find . -name "*~"‘
       per evitare messagi di errore di rm invocato con  una  lista  vuota  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:  1.  una  negazione   2.  un
       esplicito   carattere   singolo   3.  un  intervallo.  POSIX  definisce
       gl’intervalli in un modo internazionalmente più utile e aggiunge  altri
       tre tipi:

       3.  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.

       4. 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.

       5. 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.

       6.  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áàäâ]»,  cioè  a  «[a[.a-
       acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]».

VEDERE ANCHE

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