我应该在执行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}"
答案 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