Ich habe diese Frage und Antwort gelesen: zsh - Variablenzuweisung funktioniert nicht . Der Beitrag erklärt, wie man das Problem behebt, aber nicht warum. Warum schlägt die Zuweisung der lokalen Variablen in diesem Fall fehl?
Es gibt auch einige andere Beispiele für ähnliches Verhalten wie dieses:
myfun()
{
local x=$(echo "a b"); echo ${x}
}
myfun2()
{
local x
x=$(echo "a b")
echo ${x}
}
myfun3()
{
local x=$(echo "a b")
echo ${x}
}
Daraus ergibt sich folgende Ausgabe:
a
a b
a
Wenn ich das 'x = "$ (echo" a b ")" in jedem Fall in Anführungszeichen setze, erhalte ich die richtige Variablenzuordnung.
Wenn ich dasselbe in bash ausführe, bekomme ich 'ab' für alle Funktionen.
Kann jemand erklären, warum sich bash und zsh hier unterschiedlich verhalten?
zsh -x test.sh +test.sh:1> setopt shwordsplit +test.sh:21> myfun +myfun:2> echo 'a b' +myfun:2> local 'x=a' b +myfun:2> echo a