Riprendiamo per un momento il primo esempio completo di script Bash che abbiamo testato al termine della seconda sezione di questa guida; eccolo riportato di seguito:
# Questo è un commento
echo "Hello World" # Anche questo è un commento!
echo "Hello World"
echo "Hello * World"
echo Hello * World
echo Hello World
echo "Hello" World
echo Hello " " World
echo "Hello \"*\" World"
echo `hello` world
echo 'hello' world
Come abbiamo visto ripetutamente fino ad ora, l'uso delle virgolette ha effetto sulla valutazione degli spazi e dei caratteri di tabulazione. Ad esempio:
$ echo Hello World
Hello World
$ echo "Hello World"
Hello World
Le virgolette racchiudono Hello World
in un singolo parametro che viene passato a echo
, in modo da mantenere gli spazi fra le due parole. Si otterrebbe lo stesso risultato utilizzando la sintassi "Hello " World ""
, poiché i parametri passati ad echo
sarebbero 3: "Hello "
, World
e ""
.
Gli unici caratteri che vengono reinterpretati all'interno delle virgolette sono \
, `
e $
: il primo (\
) viene anteposto ai caratteri speciali che non devono essere interpretati dalla shell, ma passati comunque al comando eseguito (ad esempio, quando si vuole che il comando echo
stampi un messaggio contenente le virgolette); il secondo (`
) viene utilizzato per racchiudere veri e propri comandi, il cui output viene inserito nella posizione del comando stesso; l'ultimo ($
) è infine il carattere che precede il nome di una variabile, il cui contenuto sarà sostituito ad esso. Ecco un semplice esempio che riassume quanto appena detto:
$ comando="pwd"
$ echo "I comandi da eseguire all'interno delle \"\" sono racchiusi fra \`\`, come ad esempio \`$comando\`, che produce `$comando`"
Ad eccezione dei tre caratteri speciali appena descritti, qualunque altro carattere racchiuso fra virgolette non viene interpretato. Questa politica viene chiamata weak quoting, e si contrappone al cosiddetto strong quoting, effettuato racchiudendo una sequenza di caratteri fra apici, che permette non ne venga interpretato alcuno.
È bene puntualizzare che nel caso del weak quoting, questo non ha effetto nella valutazione di un comando contenuto fra accenti gravi (`
), come si può notare da questo semplice esempio:
$ echo "Gli spazi contenuti nel `echo comando interno non vengono` mantenuti."
Infine, un modo alternativo al quoting per far mantenere a Bash i singoli spazi si ottiene utilizzando il carattere di escape (\
): questo è utile soprattutto quando si manipolano file contenenti spazi nel nome. Per eliminare, ad esempio, un file chiamato file di test.txt esistono quindi diverse alternative:
$ rm "file di test.txt"
$ rm file\ di\ test.txt
$ rm 'file di test.txt'