Ich habe gerade eine Variable zugewiesen, aber echo $ variable zeigt etwas anderes an

Hier sind eine Reihe von Fällen, in denenecho $var kann einen anderen Wert als den gerade zugewiesenen anzeigen. Dies geschieht unabhängig davon, ob der zugewiesene Wert "in doppelten Anführungszeichen", "in einfachen Anführungszeichen" oder nicht in Anführungszeichen angegeben war.

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 mit Dateinamen:

$ var="/* Foobar is free software */"
$ echo $var 
/bin /boot /dev /etc /home /initrd.img /lib /lib64 /media /mnt /opt /proc ...

Eckige Klammer

Der erwartete Wert ist[a-z], aber manchmal bekomme ich stattdessen einen einzelnen Buchstaben!

$ var=[a-z]
$ echo $var
c

Line Feeds (Newlines)

Der erwartete Wert ist eine Liste von separaten Zeilen, aber stattdessen stehen alle Werte in einer Zeile!

$ cat file
foo
bar
baz

$ var=$(cat file)
$ echo $var
foo bar baz

Mehrere Felder

Ich habe eine sorgfältig ausgerichtete Tabellenüberschrift 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

Antworten auf die Frage(12)

Ihre Antwort auf die Frage