我正在尝试编写一个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
即。花括号不像在命令行上那样扩展
发生了什么以及如何解决?
答案 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
会得到你想要的东西