как пункт, если - PullRequest
       25

как пункт, если

2 голосов
/ 26 марта 2012

Следующее работает как положено.

for schema in `mysql -e"show databases"`
do
if [[ $schema = 'test' ]];then
echo $schema
fi
done

Но когда мне нужно выбрать все значения, начиная с теста, следующее не работает по понятным причинам ...

if [[ $schema = 'test%' ]];then

Я хочу выбрать другие значения, такие как test_db, test123 и т. Д.

Ответы [ 4 ]

6 голосов
/ 26 марта 2012

Вы можете использовать регулярные выражения bash:

if [[ $schema =~ ^test ]]; then
2 голосов
/ 26 марта 2012

Вы можете использовать подстановочные знаки (регулярные выражения) в bash:

pax> if [[ test123 =~ ^test.* ]] ; then echo yes ;fi
yes

Из справочной страницы bash:

Доступен дополнительный бинарный оператор = ~, имеющий тот же приоритет, что и == и! =. Когда она используется, строка справа от оператора считается расширенным регулярным выражением и соответствующим образом сопоставляется (как в регулярном выражении (3)).

Возвращаемое значение равно 0, если строка соответствует шаблону, и 1 в противном случае. Если регулярное выражение синтаксически неверно, возвращаемое значение условного выражения равно 2.

Если включен параметр оболочки nocasematch, сопоставление выполняется без учета буквенных символов. Любая часть шаблона может быть заключена в кавычки, чтобы сопоставить ее как строку.

Подстроки, соответствующие подвыражениям в скобках в регулярном выражении, сохраняются в переменной массива BASH_REMATCH. Элемент BASH_REMATCH с индексом 0 является частью строки, соответствующей всему регулярному выражению. Элемент BASH_REMATCH с индексом n является частью строки, соответствующей n-му подвыражению в скобках.

1 голос
/ 26 марта 2012

Другой вариант - переместить чек и сделать:

for schema in $( mysql -e"show databases" | grep ^test )
1 голос
/ 26 марта 2012

Шаблоны простой оболочки тоже подойдут, поскольку для этого не требуется регулярное выражение:

if [[ $schema == test* ]]; ...

См. Документацию для [[ ]] - http://www.gnu.org/software/bash/manual/bashref.html#index-g_t_005b_005b-57

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...