Stavo leggendo questa domanda e risposta: zsh - l'assegnazione delle variabili non funziona . Il post spiega come risolverlo, ma non il perché. Perché l'assegnazione della variabile locale non riesce in quel caso?
Ci sono anche altri esempi di comportamenti simili come questo:
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}
}
Ciò si traduce nel seguente output:
a
a b
a
Se inserisco le virgolette intorno a 'x = "$ (echo" a b ")" in tutti i casi ottengo l'assegnazione della variabile corretta.
Se eseguo la stessa cosa in bash, ottengo 'ab' per tutte le funzioni.
Qualcuno può spiegare perché qui bash e zsh si comportano diversamente?
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