2012-03-26 7 views
1

次は期待どおりに動作しています。like節の場合

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

しかし、私はテストで始まるすべての値を選択する必要がある場合、次のことが明白な理由のために動作しません...

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

私は、test123などTEST_DBのような他の値を選択したいです

+0

配列にbashの値が含まれているかどうかを確認します。http://stackoverflow.com/q/3685970/1007273 – hovanessyan

答えて

5

あなたは、bashの正規表現を使用することができます。これは本当に正規表現を必要としないので、

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

あなたはbashでき使用ワイルドカード(正規表現):

pax> if [[ test123 =~ ^test.* ]] ; then echo yes ;fi 
yes 
manページから

:!

追加のバイナリ演算子は、=〜、==と同じ優先順位とし、=、利用可能です。これを使用すると、演算子の右側の文字列は拡張正規表現とみなされ、それに応じて一致します(regex(3)のように)。

戻り値は、文字列がパターンと一致する場合は0、それ以外の場合は1です。正規表現が構文的に正しくない場合、条件式の戻り値は2です。

シェルオプションnocasematchが有効な場合、英字の大文字と小文字を区別せずに一致が実行されます。パターンのどの部分も引用符で囲んで文字列として一致させることができます。

正規表現内のカッコで囲まれた部分式でマッチした部分文字列は、配列変数BASH_REMATCHに保存されます。インデックス0のBASH_REMATCHの要素は、正規表現全体と一致する文字列の部分です。インデックスnのBASH_REMATCHの要素は、n番目の括弧で囲まれた部分式に一致する文字列の部分です。

1

もう1つの方法は、小切手を移動して以下を実行することです。

for schema in $(mysql -e"show databases" | grep ^test) 
関連する問題