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

时间:2015-08-31 18:16:31

标签: bash

我已阅读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

为什么第一个回声没有吐出一堆换行符?感谢。

1 个答案:

答案 0 :(得分:5)

因为the spec表示shell应该这样做。即条带尾随新行的序列。

从规范(强调我的):

  

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