考虑以下两个命令及其结果:
14:57 : echo $(echo " ABC")
ABC
14:57 : echo " ABC"
ABC
Run Code Online (Sandbox Code Playgroud)
zsh 版本: zsh 5.0.5 (x86_64-apple-darwin14.0)
为什么第一个删除前导空格?我在文档中找不到解释或理由。
命令替换的结果被分解为使用字符 fromIFS
作为分隔符的单词,除非命令替换是在双引号中。因此" ABC"
被拆分为包含一个元素的单词列表"ABC"
。用于echo "$(echo " ABC")"
将命令 susbtitution 的结果用作字符串。
与普通的 Bourne/POSIX 风格的 shell 不同,zsh 不会将命令替换产生的单词视为 glob 模式:echo $(echo "*")
prints *
,而不是文件列表(除非glob_subst
设置了该选项)。同样与普通的 Bourne/POSIX 风格的 shell 不同,拆分只对未加引号的命令替换执行,而不是对未加引号的变量替换执行,除了删除未加引号的变量替换产生的空词。