我在zsh
中有两个测试用例
A。没有引号
~$ y=(${(f)$(echo -e "a b\nc d")}); printf "<%s>\n" "${y[@]}"
<a b c d>
B。带引号
~$ y=(${(f)"$(echo -e "a b\nc d")"}); printf "<%s>\n" "${y[@]}"
<a b>
<c d>
但是,如果我首先将echo
的输出分配给变量,则引号没有任何作用:
C。没有引号
~$ x=$(echo -e "a b\nc d"); y=(${(f)${x}}); printf "<%s>\n" "${y[@]}"
<a b>
<c d>
D。带引号
~$ x=$(echo -e "a b\nc d"); y=(${(f)"${x}"}); printf "<%s>\n" "${y[@]}"
<a b>
<c d>
问题:
答案 0 :(得分:0)
经过一些实验,我认为可能已经应用了以下规则
A。没有引号
~$ y=(${(f)$(echo -e "a b\nc d")}); printf "<%s>\n" "${y[@]}"
<a b c d>
不加引号的$()
产生的单词被IFS
分割:请参见http://zsh.sourceforge.net/Doc/Release/Expansion.html#Command-Substitution
B。带引号
~$ y=(${(f)"$(echo -e "a b\nc d")"}); printf "<%s>\n" "${y[@]}"
<a b>
<c d>
用引号$()
引出一个字符串
C。没有引号
~$ x=$(echo -e "a b\nc d"); y=(${(f)${x}}); printf "<%s>\n" "${y[@]}"
<a b>
<c d>
分配给标量后,它会自动被引用
D。带引号
~$ x=$(echo -e "a b\nc d"); y=(${(f)"${x}"}); printf "<%s>\n" "${y[@]}"
<a b>
<c d>
分配给标量后,它会自动被引用
y=($(echo -e "a b\nc d"))
遵循 Sec1 http://zsh.sourceforge.net/Doc/Release/Expansion.html#Command-Substitution