bash
word splitting に書いてあるとおり、double quotedされてない限り展開された後、tokenに分解されます:
bash-3.2$ abc='abc def ghi'
bash-3.2$ printf '%s\n' $abc
abc
def
ghi
bash-3.2$ printf '%s\n' "$abc"
abc def ghi
zsh
word splittingしてくれない。=
をつける必要あり。
zsh$ abc='abc def ghi'
zsh$ printf '%s\n' $abc
abc def ghi
zsh$ printf '%s\n' "$abc"
abc def ghi
zsh$ printf '%s\n' $=abc
abc
def
ghi
zsh$ printf '%s\n' "$=abc"
abc
def
ghi
おまけ
こういう、展開後の tokenの操作を展開される個々の要素でやるのって汚いよなあ、と思いつつ意地悪な実験:
zsh$ printf '%s\n' "${=abc}d"
abc
def
ghid
zsh$ printf '%s\n' "${=abc}d${abc}"
abc
def
ghidabc def ghi
文字列の該当する部分が =
から展開されたかどうかで結果が変わってくるんだな。面倒臭そげ。S式に逃げたい。