我正在使用以下bash(sourced from here - 我认为)
bar=test_qux42_test
foo=(`expr ${bar} : '.*\(qux..\)'`)
以上成功返回qux42。
但是,如果我尝试以下操作就会失败
baz=qux..
bar=test_qux42_test
foo=(`expr ${bar} : '.*\(${baz}\)'`)
我使用变量修改命令来自定义正则表达式模式,但它失败了。我究竟做错了什么?如何在命令中使用变量?
答案 0 :(得分:2)
变量不会在单引号内扩展,请尝试将它们更改为双引号:
foo=(`expr ${bar} : ".*\(${baz}\)"`)
或者您可以将变量移到引号之外:
foo=(`expr ${bar} : '.*\('${baz}'\)'`)
答案 1 :(得分:1)
expr
无需使用bash
进行正则表达式匹配,可以原生执行:
baz=qux..
bar=test_qux42_test
[[ $bar =~ .*\($baz\) ]]
foo=( "${BASH_REMATCH[1]" )