Voici une série de cas où echo $var
peut afficher une valeur différente de celle qui vient d'être attribuée. Cela se produit indépendamment du fait que la valeur assignée ait été "guillemets doubles", "guillemets simples" ou non.
Comment faire pour que le shell définisse correctement ma variable?
Astérisques
La sortie attendue est /* Foobar is free software */
, mais à la place, j'obtiens une liste de noms de fichiers:
$ var="/* Foobar is free software */"
$ echo $var
/bin /boot /dev /etc /home /initrd.img /lib /lib64 /media /mnt /opt /proc ...
Crochets
La valeur attendue est [a-z]
, mais parfois je reçois une seule lettre à la place!
$ var=[a-z]
$ echo $var
c
Sauts de ligne (nouvelles lignes)
La valeur attendue est une liste de lignes séparées, mais à la place toutes les valeurs sont sur une seule ligne!
$ cat file
foo
bar
baz
$ var=$(cat file)
$ echo $var
foo bar baz
Espaces multiples
Je m'attendais à un en-tête de tableau soigneusement aligné, mais à la place, plusieurs espaces disparaissent ou sont réduits en un seul!
$ var=" title | count"
$ echo $var
title | count
Onglets
Je m'attendais à deux valeurs séparées par des tabulations, mais à la place, j'obtiens deux valeurs séparées par des espaces!
$ var=$'key\tvalue'
$ echo $var
key value
var=$(cat file)
va bien, maisecho "$var"
c'est nécessaire.