Caratteri jolly tra virgolette


32

Sarà facile, ma nei miei ricordi, quando si eseguono script di shell, l'uso di virgolette doppie consentirebbe l'espansione di globbing e variabili.

Ma nel seguente codice:

#!/bin/sh

echo *.sh
echo "*.sh"
echo '*.sh'

echo $LANG
echo "$LANG"
echo '$LANG'

Ottengo questo risultato:

bob.sh redeployJboss.sh
*.sh
*.sh
en_US.utf8
en_US.utf8
$LANG

Quindi le virgolette singole impediscono l'espansione globale E variabile, ma le virgolette doppie consentono solo l'espansione variabile e nessuna limitazione?

Posso glob in qualsiasi modello di quotazione?

Risposte:


26

Hai ragione: il globbing non funziona tra virgolette singole o doppie. Tuttavia, puoi interpolare il globbing con stringhe tra virgolette doppie:

$ echo "ciao mondo" * .sh "addio mondo"
ciao mondo [elenco di file] addio mondo

6
O anche echo "$hello and $goodbye".*(mescola espansioni variabili, spazi e un globo nella stessa "parola".
vonbrand

1
Globbing non sembra lavoro in questo caso, echo /path/to/file/*${variable}. Come posso glob mentre aggiungo un'email interpolata?
CMCDragonkai,

2
@CMCDragonkai echo "$FOLDER_PATH"/*.extensionfunziona bene per me, contrariamente alla risposta accettata, ho dovuto rimuovere lo spazio tra il "e il *. Spero che sia d'aiuto.
LostBalloon

@CMCDragonkai, @LostBalloon Uso il seguente schema quando voglio usare globs con variabili che possono avere spazi:(cd "$FOLDER_PATH" && echo *.extension)
Steven Darnell,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.