2013-07-24 199 views
0

使用一個變量,我使用的是bash的以下位(​​- 我認爲)在expr的正則表達式命令

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

以上的回報qux42成功。

但是,如果我嘗試以下方法失敗

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

我使用一個變量來定製正則表達式修改命令和失敗。我究竟做錯了什麼?我如何在命令中使用變量?

回答

2

的變量不是單引號內的擴張,嘗試其更改爲雙引號:

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

或者你可以在報價之外將變量:

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

有沒有必要使用expr for bash正則表達式匹配,可以原生執行:

baz=qux.. 
bar=test_qux42_test 
[[ $bar =~ .*\($baz\) ]] 
foo=("${BASH_REMATCH[1]")