以下內容按預期工作。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等其他值
以下內容按預期工作。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等其他值
你可以使用bash的正則表達式:
if [[ $schema =~ ^test ]]; then
您可以使用通配符(正則表達式)在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個加括號的子表達式的字符串部分。
平原外殼的圖案也可以工作,因爲這並不真正需要一個正則表達式:
if [[ $schema == test* ]]; ...
查看文檔[[ ]]
- http://www.gnu.org/software/bash/manual/bashref.html#index-g_t_005b_005b-57
另一種選擇是移動支票並執行:
for schema in $(mysql -e"show databases" | grep ^test)
檢查數組是否包含bash中的值:http://stackoverflow.com/q/3685970/1007273 – hovanessyan 2012-03-26 12:16:19