在expr regex命令中使用变量

时间:2013-07-24 16:54:48

标签: regex bash

我正在使用以下bash(sourced from here - 我认为)

bar=test_qux42_test
foo=(`expr ${bar} : '.*\(qux..\)'`)

以上成功返回qux42。

但是,如果我尝试以下操作就会失败

baz=qux..
bar=test_qux42_test
foo=(`expr ${bar} : '.*\(${baz}\)'`)

我使用变量修改命令来自定义正则表达式模式,但它失败了。我究竟做错了什么?如何在命令中使用变量?

2 个答案:

答案 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]" )