next up previous contents index
Next: Risparmiare tempo con bash Up: Lavorare con Unix Previous: Lavorare con Unix

Metacaratteri

     

Nel capitolo precedente, avete imparato alcuni comandi di manutenzione dei file, cp, mv e rm. Può capitare che vogliate interagire con più di un file alla volta. Per esempio, potreste voler copiare tutti i file che cominciano con data nella directory ~/backup. Si può fare sia dando più comandi cp, sia elencando tutti i file in un'unica linea di comando. Entrambi questi metodi, comunque, portano via molto tempo e avete molte possibilità di compiere errori.

Una via migliore per farlo è scrivere:



Come potete vedere, l'asterisco dice a cp di prendere tutti i file che iniziano con data e copiarli in ~/backup. Riuscite ad indovinare cosa farebbe cp d*w ~/backup?

Cosa succede realmente?

Buona domanda. In realtà ci sono due caratteri speciali che vengono intercettati dalla shell bash . Il carattere `` *'', un asterisco, dice ``sostituisci questa parola con tutti i file che verificano questa specifica''. In questo modo, il comando cp data* ~/backup, come nell'esempio precedente, viene cambiato in cp data-new data1 data2 data5 ~/backup prima di venire eseguito.

Per vedere come funziona, introduciamo un nuovo comando, echo . echo è un comando estremamente semplice; rimanda sullo schermo o stampa ogni parametro. Cioè:



Come potete vedere, la shell espande il metacarattere e passa tutti i file al programma che volete sia eseguito. Questo solleva una domanda interessante: cosa succede se non ci sono file che incontrano le specifiche del metacarattere? Provate echo /rc/fr*og e guardate cosa succede...bash passa testualmente la stringa con il metacarattere al programma.

Bisogna dire anche che altre shell, come tcsh , invece di passare testualmente il metacarattere, rispondono No match. Ecco lo stesso comando sotto tcsh:



L'ultima cosa che chiederete è come fare se volete che sullo schermo compaia data*, al posto della lista dei nomi dei file? Beh, sia sotto bash che tcsh, basta racchiudere la stringa tra virgolette:



oppure

Il punto interrogativo

Oltre all'asterisco, anche il punto interrogativo viene interpretato dalla shell come carattere speciale. Un punto interrogativo corrisponde ad uno, ed un solo carattere. Per esempio, ls /etc/?? mostra tutti i nomi di file di due lettere nella directory /etc.

 


next up previous contents index
Next: Risparmiare tempo con bash Up: Lavorare con Unix Previous: Lavorare con Unix


Fri Sep 19 00:41:53 CEST 1997