Mit der Dash kann man Überraschungen erleben, wenn man bei Verwendung von export
bei der Zuweisung keine Quotes benutzt und dummerweise Leerzeichen im Spiel sind.
Gegeben sei folgendes Shell-Script:
$ cat test.sh a="eins zwei" b=$a export c="eins zwei" export d=$c echo a: $a echo b: $b echo c: $c echo d: $d
Die Bash verhält sich, wie man es erwarten würde:
$ bash ./test.sh a: eins zwei b: eins zwei c: eins zwei d: eins zwei
Die Dash dagegen:
glutz@glutz-VirtualBox:~$ dash ./test.sh a: eins zwei b: eins zwei c: eins zwei d: eins
Das ist nicht nur ein Problem bei export
, sondern auch bei local
und readonly
. Im Ubuntu-Bugtracker gibt es auch einen Eintrag zu dem Thema, wobei unklar ist, ob es sich wirklich um einen Fehler handelt.
Also deshalb besser die Zuweisungen explizit quoten:
$ cat test_new.sh a="eins zwei" b="$a" export c="eins zwei" export d="$c" echo a: $a echo b: $b echo c: $c echo d: $d
So liefert auch die dash das “richtige” Ergebnis:
$ dash ./test_new.sh a: eins zwei b: eins zwei c: eins zwei d: eins zwei