变量结尾处的Bash变量嵌入换行符

Mik*_*e S 4 bash

我已经阅读了尝试在bash中的变量中嵌入换行符,我想我理解换行符作为IFS,以及bash有时如何将换行符更改为空格,但我不明白这种情况:

[prompt]$ blah="$(printf "hi\n\n\n\n")"
[prompt]$ echo "$blah"
hi
[prompt]$ blah="$(printf "hi\n\n\n\nx")"
[prompt]$ echo "$blah"
hi



x
Run Code Online (Sandbox Code Playgroud)

为什么第一个回声没有吐出一堆新行?谢谢.

Eta*_*ner 5

因为这就是规范所说的shell应该做的事情.即条带尾随新行的序列.

从规范(强调我的):

shell应通过在子shell环境中执行命令(请参阅Shell执行环境)并使用命令的标准输出替换命令替换(命令文本加上封闭的"$()"或反引号)来扩展命令替换,删除替换结束时的一个或多个换行符的序列.输出结束前的嵌入式换行符不得删除; 但是,根据IFS的值和有效的引用,它们可以被视为字段分隔符并在字段拆分期间被消除.如果输出包含任何空字节,则行为未指定.