我已阅读Trying to embed newline in a variable in 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
为什么第一个回声没有吐出一堆换行符?感谢。
答案 0 :(得分:5)
因为the spec表示shell应该这样做。即条带尾随新行的序列。
从规范(强调我的):
shell应通过在子shell环境中执行命令来扩展命令替换(请参阅Shell执行环境)并替换命令替换(命令文本加上封闭" $()"或反引号)使用命令的标准输出,在替换结束时删除一个或多个换行符字符的序列。输出结束前嵌入的换行符字符不得删除;但是,根据IFS的值和有效的引用,它们可以被视为字段分隔符并在字段拆分期间被消除。如果输出包含任何空字节,则行为未指定。