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

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

    Racchiudere il testo tra virgolette è una pratica abbastanza normale sulla riga di comando, specialmente quando si ha a che fare con file che contengono 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 si racchiudono semplicemente alcune parole di testo, non importa quale si utilizza, poiché entrambe funzionano esattamente allo stesso modo. Ad esempio, questi due comandi creeranno entrambi una directory denominata Directory di test:

    mkdir "Directory di test"
    mkdir 'Directory di test'

    Probabilmente i tipi più esperti 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 si hanno 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 = "Questo è un test"

    Ora puoi usare questa variabile sulla riga di comando, in questo modo, 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 si esegue 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 usare 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

    Supponiamo, ad esempio, di trovarsi in una cartella con uno spazio nel percorso e di voler 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 / linkname

    Invece, dovrai racchiudere tra virgolette:

    ln -s "'pwd' / nomefile" / alcuni / altro / percorso

    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:

    Poiché il comando decomprimere non supporta l'utilizzo * per eseguirlo su tutti i file, sarà necessario utilizzare il comando for. Ecco dove le cose si fanno interessanti:

    per f in * .zip; fai decomprimere $ f; fatto

    Oops! Sembra che non ha funzionato.

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

    per f in * .zip; fai decomprimere "$ f"; fatto

    Ora ogni volta che il comando for passa il ciclo, eseguirà effettivamente un comando come questo:

    decomprimere "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 allegare 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.