为什么命令替换会改变引用参数的工作方式?

lea*_*afo 10 bash

我有以下代码段:

printf "%s\n%s\n%s" $(echo "'hello world' world")
Run Code Online (Sandbox Code Playgroud)

我希望它能产生:

hello world
world
Run Code Online (Sandbox Code Playgroud)

但它实际产生:

'hello
world'
world
Run Code Online (Sandbox Code Playgroud)

为什么以上命令与以下命令不一样?

printf "%s\n%s\n%s" 'hello world' world
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 5

命令替换后,只进行分词和通配符扩展,不进行引号处理。

来自Bash 参考手册

扩展的顺序是:大括号扩展、波形符扩展、参数、变量和算术扩展以及命令替换(以从左到右的方式完成)、分词和文件名扩展。

分词的描述是:

shell 扫描未出现在双引号内的参数扩展、命令替换和算术扩展的结果以进行分词。

shell 将 $IFS 的每个字符视为分隔符,并将其他扩展的结果拆分为这些字符上的单词。如果 IFS 未设置,或者其值恰好是<space><tab><newline>默认值,则忽略先前扩展结果的开头和结尾处的<space><tab>、 和序列,并且不在开头或结尾处的任何 IFS 字符序列用于分隔<newline>字。如果 IFS 具有默认值以外的值,则只要空白字符位于 IFS 值(IFS 空白字符)中,单词开头和结尾处的空白字符 space 和 tab 序列就会被忽略。IFS 中非 IFS 空白的任何字符以及任何相邻的 IFS 空白字符共同界定字段。IFS 空白字符序列也被视为分隔符。如果IFS的值为空,则不会发生分词。

没有提到在执行此操作时特别对待引号。