dash vs. bash : bei “export” besser immer quoten

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