zsh 参数扩展中的双引号
double quotes in zsh parameter expansion
我在 zsh
中有两个测试用例
一个。没有引号
~$ y=(${(f)$(echo -e "a b\nc d")}); printf "<%s>\n" "${y[@]}"
<a b c d>
乙。带引号
~$ 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>
问题:
- 比较A和B,是什么造成了差异?
- 比较A和C,是什么造成了差异?
经过一些实验,我觉得可能应用了以下规则
第 1 节。直接使用
一个。没有引号
~$ y=(${(f)$(echo -e "a b\nc d")}); printf "<%s>\n" "${y[@]}"
<a b c d>
unquoted $()
生成被 IFS
拆分的单词:参见 http://zsh.sourceforge.net/Doc/Release/Expansion.html#Command-Substitution
乙。带引号
~$ 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
我在 zsh
一个。没有引号
~$ y=(${(f)$(echo -e "a b\nc d")}); printf "<%s>\n" "${y[@]}" <a b c d>
乙。带引号
~$ 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>
问题:
- 比较A和B,是什么造成了差异?
- 比较A和C,是什么造成了差异?
经过一些实验,我觉得可能应用了以下规则
第 1 节。直接使用
一个。没有引号
~$ y=(${(f)$(echo -e "a b\nc d")}); printf "<%s>\n" "${y[@]}" <a b c d>
unquoted
$()
生成被IFS
拆分的单词:参见 http://zsh.sourceforge.net/Doc/Release/Expansion.html#Command-Substitution乙。带引号
~$ 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