Bash模式中的引号替换变量扩展

时间:2015-10-07 19:05:04

标签: bash

我应该在执行Bash参数扩展时引用变量吗?

例如,在下文中,"${E}"应该是引号吗?

(
E="-END"

X=(ABC 123 "ABC 123")
X=("${X[@]/%/"${E}"}")

IFS=$'\n'
echo "${X[*]}"
)

我注意到4.2版本的bash会产生以下输出

ABC"-END"
123"-END"
ABC 123"-END"

但是在4.3版本的bash中,这将导致以下输出

ABC-END
123-END
ABC 123-END

这是一个修复过的错误吗?

修改。"$E"更改为"${E}"

1 个答案:

答案 0 :(得分:2)

这不是错误,但记录在official change log

  

本文档详细介绍了此版本bash-4.3-alpha之间的更改,   和以前的版本,bash-4.2-release。

     

...

     

ZZ。当使用模式替换词扩展时,bash现在运行了       通过引用删除替换字符串,因为它允许引用       字符串充当转义字符。这不是向后兼容的,所以       可以通过将bash兼容模式设置为4.2来禁用它。

要切换兼容模式(如果您想要试验):

shopt -s compat42

你会看到4.3的行为类似于4.2,并且取消它:

shopt -u compat42