0

我正在使用以下 bash (来自这里- 我认为)

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

以上成功返回qux42。

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

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

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

4

2 回答 2

2

变量不在单引号内展开,请尝试将它们更改为双引号:

foo=(`expr ${bar} : ".*\(${baz}\)"`)

或者您可以将变量移到引号之外:

foo=(`expr ${bar} : '.*\('${baz}'\)'`)
于 2013-07-24T16:56:57.563 回答
1

无需使用exprregex-matching in bash,它可以在本地执行它:

baz=qux..
bar=test_qux42_test
[[ $bar =~ .*\($baz\) ]]
foo=( "${BASH_REMATCH[1]" )
于 2013-07-24T16:59:59.983 回答