1
.\" Copyright (c) 1998 Andries Brouwer
3
.\" This is free documentation; you can redistribute it and/or
4
.\" modify it under the terms of the GNU General Public License as
5
.\" published by the Free Software Foundation; either version 2 of
6
.\" the License, or (at your option) any later version.
8
.\" The GNU General Public License's references to "object code"
9
.\" and "executables" are to be interpreted as the output of any
10
.\" document formatting or typesetting system, including
11
.\" intermediate and printed output.
13
.\" This manual is distributed in the hope that it will be useful,
14
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
15
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
.\" GNU General Public License for more details.
18
.\" You should have received a copy of the GNU General Public
19
.\" License along with this manual; if not, write to the Free
20
.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
23
..\" Traduzione by Ottavio G. Rizzo (otto@mast.queensu.ca)
25
.TH GLOB 7 "12 giugno 1998" "Unix" "Linux Programmer's Manual"
27
glob \- Globbare i percorsi dei file
29
Molto tempo fa, in Unix V6, c'era un programma
31
che espandeva i modelli di metacaretteri.
32
Poco dopo divenne parte della shell.
34
Al giorno d'oggi c'� pure una routine di libreria
36
per svolgere un simile compito a vantaggio dei programmi utenti.
38
Le regole sono le seguenti (POSIX 1003.2, 3.13).
39
.SH "CORRISPONDENZE DI METACARATTERI"
40
Una stringa � un modello di metacaratteri se contiene uno dei caratteri
41
`?', `*' o `['. Globbare � l'operazione che espande un modello di
42
metacaratteri in un elenco di percorsi che corrisponde al modello. Una
43
corrispondenza � definita da:
45
Un `?' (non fra parentesi) corrisponde ad un carattere singolo.
47
Un `*' (non fra parentesi) corrisponde a qualsiasi stringa, compresa
50
.SS "Classi di Carattere"
51
Un'espressione della forma `[...]', dove il primo caratttere dopo la
52
`[' iniziale non � un `!', corrisponde ad un carattere singolo, cio� a
53
qualsiasi carattere fra quelli racchiusi tra le parentesi. La stringa
54
nelle parentesi non pu� essere vuota; perci� � possibile avere una `]'
55
fra parentesi, purch� essa sia il primo carattere (ad es., `[][!]'
56
corrisponde ai tre caratteri `[', `]' e `!').
59
Una convenzione speciale:
60
due caratteri separati da un `-' indicano una serie
61
(ad es., `[A-Fa-f0-9]' equivale a `[ABCDEFabcdef0123456789]').
62
Si pu� includere un `-' col suo significato letterale ponendolo al
63
primo o all'ultimo posto fra le parentesi
64
(ad es. `[]-]' corrisponde solo ai due caratteri `]' e `-', mentre
65
`[--/]' corrisponde ai tre caratteri `-', `.', `/').
68
Un espressione `[!...]' corrisponde ad un carattere singolo, cio� a
69
qualsiasi carattere cui non corrisponda l'espressione ottenuta
70
rimuovendo il `!' iniziale (per es., `[!]a-]' corrisponde a
71
qualsiasi carattere singolo eccetto `]', `a' e `-').
73
Si pu� togliere a `?', `*' e `[' il loro significato speciale
74
precedendoli con uno backslash, o, nel caso l'espressione sia parte di
75
una riga di comando della shell, ponendola fra virgolette doppie. Fra
76
parentesi quadre questi caratteri hanno un significato letterale. Per
77
es., `[[?*\e]' corrisponde ai quattro caratteri `[', `?', `*' e `\e'.
80
Ogni componente di un percorso viene globbata separatamente. A uno '/'
81
di un percorso non pu� corrispondere una dei metacaratteri `?' o `*', n�
82
una serie come `[.-0]'. Una serie non pu� contenere uno '/' esplicito:
83
ci� risulterebbe in un errore di sintassi.
85
Se il nome di un file inizia con un `.', deve esserci una
86
corrispondenza esplicitamente per il `.'. Per es., `rm *' non rimuove
87
.profile, n� `tar c *' archivia tutti i file: `tar c .' � meglio.
91
La chiara e semplice regola di pi� sopra: �espandere un modello di
92
metacaratteri in un elenco di percorsi che corrisponde al modello� era la
93
definizione originale di Unix. Permetteva modelli che si espandevano
94
in liste vuote, come in
97
xv -wait 0 *.gif *.jpg
99
quando, magari, non c'� nessun file *.gif (e questo non causa un
100
errore). D'altra parte, POSIX richiede che un modello di metacaratteri
101
non venga modificato se � sintatticamente sbagliato o se la lista dei
102
percorsi corrispondenti � vuota.
105
si pu� forzare il comportamento classico ponendo
106
IR allow_null_glob_expansion=true .
108
(Problemi simili accadono in altri posti. Per es., mentre script
112
rm `find . -name "*~"`
114
per uno script nuovo bisogna usare
117
rm -f `find . -name "*~"`
119
per evitare messagi di errore di
121
invocato con una lista vuota di argomenti)
124
.SS Espressioni regolari
125
Si noti che i modelli di metacaratteri non sono espressioni regolari, per
126
quanto si assomiglino. Prima di tutto, corrispondono a nomi di file
127
piuttosto che a testo, e poi, le convenzioni non sono le stesse: per
128
esempio, `*' in un'espressione regolare vuol dire zero o pi� copie
129
della cosa precedente.
131
Ora che le espressioni regolari usano espressioni fra parentesi quadre
132
in cui la negazione � indicata con un `^', POSIX ha dichiarato
133
indefinito l'effetto di un modello come `[^...]'.
135
.SS Classi di carattere e internazionalizzazione
136
Naturalmente le serie erano originariamente interpretate come serie
137
ASCII, per cui `[ -%]' stava per `[ !"#$%]' e `[a-z]' per �una
138
qualsiasi minuscola�.
139
Alcune implementazioni Unix hanno generalizzato questo comportamento
140
in modo tale che la serie X-Y denota l'insieme di caratteri i cui
141
codici sono compresi fra i codici di X e Y. D'altra parte, ci�
142
richiede che l'utente conosca la codifica usata sul sistema locale, e,
143
inoltre, non � comodo quando la sequenza di collazione per l'alfabeto
144
locale � diversa dall'ordine dei codici di carattere. Perci� POSIX ha
145
notevolmente esteso la notazione parentetica, sia per i modelli di
146
metacaratteri che per le espressioni regolari. Prima abbiamo visto tre tipi
147
di argomenti che possono apparire in un'espressione parentetica:
148
1. una negazione 2. un esplicito carattere singolo 3. una
149
serie. POSIX definisce le serie in un modo internazionalmente pi�
150
utile e aggiunge altri tre tipi: