Mandrake Linux 8.1: Manuale di riferimento | ||
---|---|---|
Indietro | Capitolo 3. Introduzione alla linea di comando | Avanti |
Probabilmente usate già i caratteri speciali (noti anche come meta-caratteri, o anche caratteri jolly) senza saperlo. Quando scrivete o cercate un file in Windows potete utilizzare il carattere * al posto di una sequenza di caratteri qualsiasi. Per esempio, scrivendo *.txt identificate tutti i file il cui nome finisce per .txt. Lo abbiamo anche utilizzato spesso nell'ultima paragrafo. Ma * non è l'unico carattere speciale di cui potete servirvi.
Quando digitate un comando come ls *.txt e premete Invio, il compito di individuare i file che corrispondono all'espressione *.txt non viene svolto dal comando ls, ma dalla shell stessa. Vediamo più in dettaglio in che modo la shell interpreta una linea di comando quando questa viene digitata. Quando scrivete:
$ ls *.txt readme.txt ricette.txt |
prima di tutto la linea di comando viene suddivisa in parole (ls e *.txt in questo esempio). Quando la shell trova un carattere * in una parola, interpreterà la parola intera come un modello di meta-espansione e la sostituirà con i nomi di tutti i file che corrispondono al modello. Pertanto la linea di comando che viene effettivamente eseguita sarà ls readme.txt recipe.txt, che darà i risultati che abbiamo mostrato. Ci sono altri caratteri che vengono interpretati in modo simile dalla shell:
?: sostituisce un carattere qualsiasi, ma soltanto uno;
[...] :stabilisce una corrispondenza con qualsiasi carattere si trovi fra le parentesi quadre; in questo caso è possibile definire un ambito di caratteri (ad esempio 1-9) o dei valori discreti, o addirittura entrambi. Ad esempio: [a-zBE5-7] comprende tutti i caratteri da a a z, una B, una E, un 5, un 6 o un 7;
[!...]: stabilisce una corrispondenza con qualsiasi carattere che non sia indicato tra le parentesi quadre. [!a-z], ad esempio, verrà sostituito da qualsiasi carattere che non sia una lettera minuscola[1];
{c1,c2}: viene sostituito da c1 o c2, dove c1 e c2 sono a loro volta delle espressioni jolly, il che significa che potete scrivere {[0-9]*,[acr]}, ad esempio.
Ecco alcuni esempi con il relativo significato:
/etc/*conf: tutti i file nella directory /etc il cui nome finisce con conf. Può rappresentare /etc/inetd.conf, ma vale anche per /etc/conf.linuxconf, come pure per /etc/conf se esiste un file con questo nome: ricordate che * può rappresentare anche una stringa vuota.
image/{cars,space[0-9]{/*.jpg: tutti i file il cui nome termina con .jpg nelle directory image/cars, image/space0, ... , image/space9, se queste directory esistono.
/usr/share/doc/*/README: tutti i file di nome README in tutte le directory immediatamente sotto /usr/share/doc. Questa espressione vale per /usr/share/doc/mandrake/README, ad esempio, ma non per /usr/share/doc/myprog/doc/README.
*[!a-z]: tutti i file nella directory attuale il cui nome non termina con una lettera minuscola.
[1] | Attenzione! Se questo è vero sotto GNU/Linux, potrebbe non esserlo per altri sistemi operativi basati su Unix. Questa caratteristica dipende dall'ordine di raggruppamento dei caratteri. Su alcuni sistemi [a-z] corrisponde a a, A, b, B, (...) , z. E non abbiamo neanche menzionato il fatto che alcune lingue hanno dei caratteri accentati... |