Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Quoting: differenze tra apici e virgolette

Imparare le differenze tra le modalità di quoting previste dalla shell di Linux (in particolare da Bash), analizzando i comportamenti di apici e virgolette.
Imparare le differenze tra le modalità di quoting previste dalla shell di Linux (in particolare da Bash), analizzando i comportamenti di apici e virgolette.
Link copiato negli appunti

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'

Ti consigliamo anche