Oto seria przypadków, w których echo $var
można pokazać inną wartość niż ta, która została właśnie przypisana. Dzieje się tak niezależnie od tego, czy przypisana wartość była „w cudzysłowie”, „w pojedynczym cudzysłowie”, czy nie.
Jak sprawić, by powłoka poprawnie ustawiła moją zmienną?
Gwiazdki
Oczekiwany wynik to /* Foobar is free software */
, ale zamiast tego otrzymuję listę nazw plików:
$ var="/* Foobar is free software */"
$ echo $var
/bin /boot /dev /etc /home /initrd.img /lib /lib64 /media /mnt /opt /proc ...
Nawiasy kwadratowe
Oczekiwana wartość to [a-z]
, ale czasami zamiast tego otrzymuję pojedynczą literę!
$ var=[a-z]
$ echo $var
c
Kanały (nowe linie)
Oczekiwana wartość to lista oddzielnych linii, ale zamiast tego wszystkie wartości znajdują się w jednym wierszu!
$ cat file
foo
bar
baz
$ var=$(cat file)
$ echo $var
foo bar baz
Wiele przestrzeni
Spodziewałem się starannie wyrównanego nagłówka tabeli, ale zamiast tego wiele spacji znika lub jest zwiniętych w jedną!
$ var=" title | count"
$ echo $var
title | count
Tabs
Spodziewałem się dwóch wartości rozdzielonych tabulatorami, ale zamiast tego otrzymuję dwie wartości oddzielone spacjami!
$ var=$'key\tvalue'
$ echo $var
key value
var=$(cat file)
jest dobrze, aleecho "$var"
jest potrzebne.