Hier sind eine Reihe von Fällen, in denen echo $var
ein anderer Wert als der gerade zugewiesene angezeigt werden kann. Dies geschieht unabhängig davon, ob der zugewiesene Wert "doppelt in Anführungszeichen", "einfach in Anführungszeichen" oder nicht in Anführungszeichen gesetzt wurde.
Wie bringe ich die Shell dazu, meine Variable richtig einzustellen?
Sternchen
Die erwartete Ausgabe ist /* Foobar is free software */
, aber stattdessen erhalte ich eine Liste von Dateinamen:
$ var="/* Foobar is free software */"
$ echo $var
/bin /boot /dev /etc /home /initrd.img /lib /lib64 /media /mnt /opt /proc ...
Eckige Klammern
Der erwartete Wert ist [a-z]
, aber manchmal bekomme ich stattdessen einen einzelnen Buchstaben!
$ var=[a-z]
$ echo $var
c
Zeilenvorschübe (Zeilenumbrüche)
Der erwartete Wert ist eine Liste separater Zeilen, aber stattdessen befinden sich alle Werte in einer Zeile!
$ cat file
foo
bar
baz
$ var=$(cat file)
$ echo $var
foo bar baz
Mehrere Leerzeichen
Ich habe einen sorgfältig ausgerichteten Tabellenkopf erwartet, aber stattdessen verschwinden mehrere Leerzeichen oder werden zu einem zusammengefasst!
$ var=" title | count"
$ echo $var
title | count
Tabs
Ich habe zwei durch Tabulatoren getrennte Werte erwartet, aber stattdessen erhalte ich zwei durch Leerzeichen getrennte Werte!
$ var=$'key\tvalue'
$ echo $var
key value
var=$(cat file)
also in Ordnung, wird aberecho "$var"
benötigt.