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

Hier sind eine Reihe von Fällen, in denen echo $var zeigen können, einen anderen Wert als das, was war gerade zugewiesen. Dies geschieht unabhängig davon, ob der zugewiesene Wert war "doppelte Anführungszeichen", 'single-quoted' oder ohne Anführungszeichen.

Wie bekomme ich die shell, um meine Variablen richtig?

Sternchen

Die erwartete Ausgabe ist /* Foobar is free software */, aber stattdessen bekomme ich eine Liste der Dateinamen:

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

Eckigen Klammern

Dem erwarteten Wert ist [a-z], aber manchmal bekomme ich einen einzelnen Buchstaben, statt!

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

Zeilenumbrüchen (newlines)

Dem erwarteten Wert ist eine Liste von separaten Linien, sondern alle Werte sind auf einer Linie!

$ cat file
foo
bar
baz

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

Mehrere Räume

Erwartete ich ein sorgfältig ausgerichtet table-header, sondern mehrere Räume, die entweder verschwinden oder sind eingebrochen!

$ var="       title     |    count"
$ echo $var
title | count

Tabs

Erwartete ich zwei durch Tabulatoren getrennte Werte, aber stattdessen bekomme ich zwei Leerzeichen getrennte Werte!

$ var=$'key\tvalue'
$ echo $var
key value
Vielen Dank für dies zu tun. Ich begegne den line feeds man oft. So var=$(cat file) ist in Ordnung, aber echo "$var" benötigt wird.
BTW, das ist auch BashPitfalls #14: mywiki.wooledge.org/BashPitfalls#echo_.24foo
Siehe auch stackoverflow.com/questions/10067266/...
Auch, siehe auch stackoverflow.com/questions/2414150/...

InformationsquelleAutor that other guy | 2015-03-31

Schreibe einen Kommentar