bash 引用如何与花括号 {} 扩展一起使用?
How does bash quoting work with curly brace {} expansion?
我正在尝试编写 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
即花括号不会像在命令行中那样展开
这是怎么回事,我该如何解决?
使用数组存储多个参数,而不是常规参数。在设置数组参数的值之前,大括号扩展将应用于括号内的字符串。
test_case=( aa @p{0,1}=port bb )
使用函数来存储代码,而不是常规参数。
cmd () {
echo "${test_case[@]}"
}
来自 Aserre 和 glenn jackman 的评论,合并:
大括号扩展发生在变量替换之前:
见 gnu.org/software/bash/manual/bashref.html#Shell-Expansions
eval $CMD
会得到你想要的
我正在尝试编写 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
即花括号不会像在命令行中那样展开
这是怎么回事,我该如何解决?
使用数组存储多个参数,而不是常规参数。在设置数组参数的值之前,大括号扩展将应用于括号内的字符串。
test_case=( aa @p{0,1}=port bb )
使用函数来存储代码,而不是常规参数。
cmd () {
echo "${test_case[@]}"
}
来自 Aserre 和 glenn jackman 的评论,合并:
大括号扩展发生在变量替换之前: 见 gnu.org/software/bash/manual/bashref.html#Shell-Expansions
eval $CMD
会得到你想要的