zsh 函数输出删除前导空格

Ale*_*alm 1 zsh echo

考虑以下两个命令及其结果:

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)

为什么第一个删除前导空格?我在文档中找不到解释或理由。

Gil*_*il' 5

命令替换的结果被分解为使用字符 fromIFS作为分隔符的单词,除非命令替换是在双引号中。因此" ABC"被拆分为包含一个元素的单词列表"ABC"。用于echo "$(echo " ABC")"将命令 susbtitution 的结果用作字符串。

与普通的 Bourne/POSIX 风格的 shell 不同,zsh 不会将命令替换产生的单词视为 glob 模式:echo $(echo "*")prints *,而不是文件列表(除非glob_subst设置了该选项)。同样与普通的 Bourne/POSIX 风格的 shell 不同,拆分只对未加引号的命令替换执行,而不是对未加引号的变量替换执行,除了删除未加引号的变量替换产生的空词。