bash 4.3.43和4.4.19之间的变量引用差异

时间:2018-03-15 13:15:45

标签: linux bash gnu-coreutils

出于好奇,我想知道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查看,但没有任何明显的突出显示会导致这种变化(虽然我有一些非常模糊的感觉,我之前偶然发现了这一点。)

提前致谢!

1 个答案:

答案 0 :(得分:1)

bash 4.3中的行为是一个在4.4中修复的错误。请参阅original bug report和  Chet's reply(2015/09)。

关于bash邮件列表的最新帖子:the questionChet's reply(2017/11)。