2011-10-20 4 views
0

私はこの質問を形成するための最良の方法を知りませんが、ここで私が仕事をしたいコードです:2つの異なる文字列を検索するBash Case文

case $MESSAGE in 
    ?Trcx!~*PRIVMSG*[${Nick}|${AltNick}]*[nN][mM]ap*) 
     echo "Some Code";; 
    *) 
     echo "Some Other Code";; 
esac 

は、どのように私はそれを動作させるでしょうか?動作していない部分は[$ {Nick} | $ {AltNick}]です。$ Nick変数と$ AltNick変数の両方で式が有効になります。どんな助けでも大歓迎です!

答えて

2

バッシュグロブパターンは、documented hereです。 あなたはこれが欲しい:@(patt1|patt2)extglobシェルオプションを有効にする必要があることに注意してください。

shopt -s extglob 
case $MESSAGE in 
    ?Trcx!~*PRIVMSG*@(${Nick}|${AltNick})*[nN][mM]ap*) 
     echo "Some Code";; 
    *) 
     echo "Some Other Code";; 
esac 
+0

完璧!ありがとう! – Trcx

1

Bashは、正規表現マッチングではなく、ファイル名一致のように大文字と小文字のパターンマッチングを実行します。それがあなたの望むものなら、問題は解決されます。

しかし、正規表現の一致が必要な場合は、[[expression]]複合コマンドを試して目標を達成することができます。正規表現マッチングには〜=演算子が使用されます。 globパターンで

#!/bin/bash 

regexp="^[a-z]*$" 
if [[ $1 =~ $regexp ]] ; then                                         
    echo "match" 
else 
    echo "no match" 
fi 
1

、バッシュの「extglob」機能せず、あなたは括弧でグループサブパターンをすることはできません - と確かに角括弧付き。ボーンと互換性のある方法は、2つの異なるパターンに分割することです。

case $MESSAGE in 
    ?Trcx!~*PRIVMSG*${Nick}*[nN][mM]ap* | 
    ?Trcx!~*PRIVMSG*${AltNick}*[nN][mM]ap*) 
    echo "Some Code";; 
    *) 
    echo "Some Other Code";; 
esac 
関連する問題