bash引用如何与大括号{}扩展一起工作?

时间:2017-02-08 12:43:21

标签: bash quoting

我正在尝试编写一个bash脚本来重现失败的测试。

原始命令是(比如我们正在测试回声)

echo aa @p{0,1}=port bb

打印:

aa @p0=port @p1=port bb

我在变量

中得到了参数
TESTCASE='aa @p{0,1}=port bb'

所以我构建了命令行

CMD='echo '${TESTCASE}

然后执行它

${CMD}

我得到了:

aa @p{0,1}=port bb

即。花括号不像在命令行上那样扩展

发生了什么以及如何解决?

2 个答案:

答案 0 :(得分:7)

使用数组存储多个参数,而不是常规参数。在设置数组参数的值之前,括号扩展将应用于括号内的字符串。

test_case=( aa @p{0,1}=port bb )

使用函数存储代码,而不是常规参数。

cmd () {
    echo "${test_case[@]}"
}

答案 1 :(得分:-1)

来自Aserre和glenn jackman的评论,合并:

支撑扩展在变量替换之前发生: 见gnu.org/software/bash/manual/bashref.html#Shell-Expansions

eval $CMD 

会得到你想要的东西