Qual è la differenza tra virgolette singole e doppie nella shell di Bash?

Sommario:

Qual è la differenza tra virgolette singole e doppie nella shell di Bash?
Qual è la differenza tra virgolette singole e doppie nella shell di Bash?

Video: Qual è la differenza tra virgolette singole e doppie nella shell di Bash?

Video: Qual è la differenza tra virgolette singole e doppie nella shell di Bash?
Video: 10 TRUCCHI per RICERCHE AVANZATE su GOOGLE - YouTube 2024, Aprile
Anonim
Racchiudere il testo tra virgolette è una pratica abbastanza normale sulla riga di comando, specialmente quando si ha a che fare con file che hanno spazi nei nomi, ma come si fa a sapere se usare virgolette singole o doppie? Diamo un'occhiata alla differenza e quando dovresti usare l'una contro l'altra.
Racchiudere il testo tra virgolette è una pratica abbastanza normale sulla riga di comando, specialmente quando si ha a che fare con file che hanno spazi nei nomi, ma come si fa a sapere se usare virgolette singole o doppie? Diamo un'occhiata alla differenza e quando dovresti usare l'una contro l'altra.

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:

Image
Image

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

Invece, dovrai racchiudere tra virgolette:
Invece, dovrai racchiudere tra virgolette:

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:

Dal momento che il comando decomprimere non supporta l'utilizzo di * per eseguirlo su tutti i file, è necessario invece utilizzare il comando for. Ecco dove le cose si fanno interessanti:
Dal momento che il comando decomprimere non supporta l'utilizzo di * per eseguirlo su tutti i file, è necessario invece utilizzare il comando for. Ecco dove le cose si fanno interessanti:

for f in *.zip;do unzip $f;done

Oops! Sembra che non ha funzionato.

Quello che dovremo fare invece è usare le virgolette doppie attorno alla variabile $ f, in questo modo:
Quello che dovremo fare invece è usare le virgolette doppie attorno alla variabile $ f, in questo modo:

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.

Consigliato: