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' var1inté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 à var1nouveau:
$ 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 -fpour désactiver ce comportement:
$ set -f
$ var=*
$ printf '[%s]\n' $var
[*]
Et set +fpour le réactiver:
$ set +f
$ printf '[%s]\n' $var
[file1]
[file2]