Вот серия случаев, когда echo $var
может показывать другое значение, чем только что назначенное. Это происходит независимо от того, было ли присвоенное значение "двойным кавычками", "одиночным кавычками" или без кавычек.
Как заставить оболочку правильно установить мою переменную?
Звездочка
Ожидаемый результат: /* Foobar is free software */
, но вместо этого я получаю список имен файлов:
$ var="/* Foobar is free software */"
$ echo $var
/bin /boot /dev /etc /home /initrd.img /lib /lib64 /media /mnt /opt /proc ...
Квадратные скобки
Ожидаемое значение [a-z]
, но иногда я получаю только одну букву!
$ var=[a-z]
$ echo $var
c
Линейные каналы (новые строки)
Ожидаемое значение представляет собой список отдельных строк, но вместо этого все значения находятся в одной строке!
$ cat file
foo
bar
baz
$ var=$(cat file)
$ echo $var
foo bar baz
Несколько пробелов
Я ожидал тщательно выровненного заголовка таблицы, но вместо этого несколько пробелов либо исчезли, либо рухнули в один!
$ var=" title | count"
$ echo $var
title | count
Вкладка
Я ожидал два значения, разделенные вкладкой, но вместо этого получаю два значения, разделенные пробелами!
$ var=$'key\tvalue'
$ echo $var
key value