Vous pouvez toujours montrer les effets de la cotation de variable avec printf
.
Fractionnement des mots effectué le var1
:
$ var1="hello world"
$ printf '[%s]\n' $var1
[hello]
[world]
var1
cité, donc pas de mots qui se séparent:
$ printf '[%s]\n' "$var1"
[hello world]
Fractionnement du mot à l' var1
intérieur $()
, équivalent à echo "hello" "world"
:
$ var2=$(echo $var1)
$ printf '[%s]\n' "$var2"
[hello world]
Pas de mots qui se séparent var1
, pas de problème pour ne pas citer le $()
:
$ var2=$(echo "$var1")
$ printf '[%s]\n' "$var2"
[hello world]
Le mot se fractionnant à var1
nouveau:
$ var2="$(echo $var1)"
$ printf '[%s]\n' "$var2"
[hello world]
Citer les deux, le moyen le plus simple d’être sûr.
$ var2="$(echo "$var1")"
$ printf '[%s]\n' "$var2"
[hello world]
Problème globulaire
Ne pas citer de variable peut également conduire à une expansion globale de son contenu:
$ mkdir test; cd test; touch file1 file2
$ var="*"
$ printf '[%s]\n' $var
[file1]
[file2]
$ printf '[%s]\n' "$var"
[*]
Notez que cela se produit après que la variable est développée uniquement. Il n'est pas nécessaire de citer un glob lors de l'affectation:
$ var=*
$ printf '[%s]\n' $var
[file1]
[file2]
$ printf '[%s]\n' "$var"
[*]
Utilisez set -f
pour désactiver ce comportement:
$ set -f
$ var=*
$ printf '[%s]\n' $var
[*]
Et set +f
pour le réactiver:
$ set +f
$ printf '[%s]\n' $var
[file1]
[file2]