Вот серия случаев, когда 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
var=$(cat file)
что нормально, ноecho "$var"
нужно.