Ось низка випадків, коли 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"
потрібно.