Ecco una serie di casi in cui echo $var
può mostrare un valore diverso da quello appena assegnato. Ciò accade indipendentemente dal fatto che il valore assegnato fosse "double quoted", "single quoted" o non quotato.
Come faccio a fare in modo che la shell imposti correttamente la mia variabile?
Asterischi
L'output previsto è /* Foobar is free software */
, ma invece ottengo un elenco di nomi di file:
$ var="/* Foobar is free software */"
$ echo $var
/bin /boot /dev /etc /home /initrd.img /lib /lib64 /media /mnt /opt /proc ...
Parentesi quadre
Il valore previsto è [a-z]
, ma a volte ricevo invece una sola lettera!
$ var=[a-z]
$ echo $var
c
Avanzamenti di riga (nuove righe)
Il valore atteso è un elenco di righe separate, ma invece tutti i valori sono su una riga!
$ cat file
foo
bar
baz
$ var=$(cat file)
$ echo $var
foo bar baz
Spazi multipli
Mi aspettavo un'intestazione di tabella accuratamente allineata, ma invece più spazi scompaiono o vengono compressi in uno solo!
$ var=" title | count"
$ echo $var
title | count
Tab
Mi aspettavo due valori separati da tabulazione, ma invece ottengo due valori separati da spazi!
$ var=$'key\tvalue'
$ echo $var
key value
var=$(cat file)
va bene, maecho "$var"
è necessario.