2013-07-24 2 views
0

Я использую следующий бит Баш (sourced from here - я думаю)Использование переменной в команде выраж регулярное выражение

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 для соответствия регулярному выражению в bash, который может выполнять его изначально:

baz=qux.. 
bar=test_qux42_test 
[[ $bar =~ .*\($baz\) ]] 
foo=("${BASH_REMATCH[1]") 
Смежные вопросы