出于好奇,我想知道bash(或head?)中的哪个更改会导致以下行为发生变化,
在4.4.19中,我们有以下行为,
# Assign "foo <new line> bar" to variabe 'var'
$ > var="foo
bar"
# Echo with and without quotes,
$ > echo "${var}"
foo
bar
$ > echo ${var}
foo bar
# Read all lines (1) except the last,
$ > head -1 <<< ${var}
foo
$ > head -1 <<< "${var}"
foo
在bash 4.2.46和4.3.43中执行完全相同的操作会在读取带有head的变量时产生不同的输出。
# Assign "foo <new line> bar" to variabe 'var'
$ > var="foo
bar"
# Echo with and without quotes,
$ > echo "${var}"
foo
bar
$ > echo ${var}
foo bar
$ > head -1 <<< ${var}
foo bar
$ > head -1 <<< "${var}"
foo
所以在我看来(4.4.19)无论你是否引用变量,head的输入都是两行。对于版本4.2.46和4.3.43,输入实际上会有所不同,具体取决于您是否引用变量。
早期的行为对我来说很有意义,如果你想要新行,你必须引用变量。我真的对这种行为改变及其背后的推理感兴趣。我试着通过bash-changelog查看,但没有任何明显的突出显示会导致这种变化(虽然我有一些非常模糊的感觉,我之前偶然发现了这一点。)
提前致谢!
答案 0 :(得分:1)
bash 4.3中的行为是一个在4.4中修复的错误。请参阅original bug report和 Chet's reply(2015/09)。
关于bash邮件列表的最新帖子:the question和Chet's reply(2017/11)。