La regola generale è che le virgolette consentono ancora l'espansione delle variabili all'interno delle virgolette e le virgolette singole no. Continua a leggere.
Citazioni con testo semplice
Se stai semplicemente racchiudendo alcune parole di testo, in realtà non importa quale usi, poiché entrambe funzionano esattamente allo stesso modo. Ad esempio, questi due comandi creeranno entrambi una directory denominata Directory di test:
mkdir 'Test Directory' mkdir 'Test Directory'
I tipi più esperti probabilmente noteranno che potresti anche utilizzare mkdir Test Directory se lo desideri.
Espansione Variabile Shell
La differenza tra virgolette singole e doppie diventa più importante quando hai a che fare con le variabili sulla riga di comando: per impostazione predefinita, bash sta per espandere una variabile come $ test nella stringa completa. Innanzitutto, assegneremo la variabile:
test='This is a test'
Ora puoi usare questa variabile sulla riga di comando, come questa, che dovrebbe semplicemente essere emessa Questo è un test alla console:
echo $test
Ecco dove la differenza tra virgolette doppie e virgolette diventa più chiara: quando si usano virgolette singole, le variabili non verranno espanse. Ad esempio, se esegui questo comando:
echo '$test'
Non vedrai nulla tranne "$ test" sulla riga di comando quando utilizzi virgolette singole, ma verrà emesso correttamente quando utilizzi virgolette doppie:
La stessa cosa funziona quando si usa il carattere per espandere un comando sulla riga di comando. Ad esempio, supponi di voler utilizzare il pwd comando da un altro comando: utilizzi i backtick per dire alla shell di espanderlo:
echo `pwd`/test
Se fossi nella tua cartella home vedresti un output simile a questo:
/home/geek/test
Ad esempio, si è in una cartella che ha uno spazio nel percorso e si desidera utilizzare il comando ln per creare un collegamento simbolico a un file nella directory corrente. Di solito è necessario specificare il percorso completo quando si utilizza il comando ln, quindi è molto più semplice usare `pwd` per salvare la digitazione.
Guarda cosa succede quando provi e usa il comando senza racchiudere tra virgolette:
ln –s `pwd`/test /home/geek/linkedname
ln –s '`pwd`/filename' /some/other/path
Per un esempio più concreto, supponiamo di avere una struttura di cartelle come questo esempio, in cui tutti i nomi dei file contengono degli spazi:
for f in *.zip;do unzip $f;done
Oops! Sembra che non ha funzionato.
for f in *.zip;do unzip '$f';done
Ora ogni volta che il comando for passa il ciclo, eseguirà effettivamente un comando come questo:
unzip 'test 1.zip'
Ovviamente passerebbe in loop ed eseguirà un comando simile per ogni file nella directory.
Ripassiamo
Ora che abbiamo analizzato gli esempi, ti faremo una rapida revisione nel caso ti sia sfuggito:
Virgolette
- Utilizzare quando si desidera racchiudere variabili o utilizzare l'espansione della shell all'interno di una stringa.
- Tutti i caratteri all'interno sono interpretati come caratteri normali ad eccezione di $ o `che sarà espanso sulla shell.
Citazioni singole
Tutti i caratteri all'interno di virgolette singole sono interpretati come un carattere di stringa.
E così termina la lezione delle citazioni. Usali saggiamente.