2012-03-26 105 views
1

以下內容按預期工作。like if in if

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

但是,當我需要選擇開始測試的所有值,以下不顯而易見的原因,工作...

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

我要選擇像TEST_DB,test123等其他值

+0

檢查數組是否包含bash中的值:http://stackoverflow.com/q/3685970/1007273 – hovanessyan 2012-03-26 12:16:19

回答

5

你可以使用bash的正則表達式:

if [[ $schema =~ ^test ]]; then 
1

可以使用通配符(正則表達式)在bash

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

bash手冊頁:

另外一個二元運算符,=〜,是可用的,具有相同的優先級==和!=。當它被使用時,運算符右邊的字符串被認爲是一個擴展的正則表達式,並相應匹配(如在regex(3)中)。

如果字符串匹配模式,則返回值爲0,否則返回1。如果正則表達式在語法上不正確,則條件表達式的返回值爲2.

如果啓用shell選項nocasematch,則不考慮字母字符的情況執行匹配。模式的任何部分可能會被引用以強制它被匹配爲一個字符串。

通過正則表達式中帶圓括號的子表達式匹配的子串保存在數組變量BASH_REMATCH中。索引爲0的BASH_REMATCH元素是匹配整個正則表達式的字符串部分。索引爲n的BASH_REMATCH元素是匹配第n個加括號的子表達式的字符串部分。

1

另一種選擇是移動支票並執行:

for schema in $(mysql -e"show databases" | grep ^test)