0

この質問を形成する最良の方法はわかりませんが、作業したいコードは次のとおりです。

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

どうすれば機能しますか?機能していない部分は [${Nick}|${AltNick}] です。$Nick 変数と $AltNick 変数の両方で式が有効になるようにします。どんな助けでも大歓迎です!

4

3 に答える 3

2

Bash の「extglob」機能がない glob パターンでは、サブパターンを括弧でグループ化することはできません。もちろん、角括弧でグループ化することもできません。Bourne 互換の方法は、2 つの異なるパターンに分割することです。

case $MESSAGE in
  ?Trcx!~*PRIVMSG*${Nick}*[nN][mM]ap* |
  ?Trcx!~*PRIVMSG*${AltNick}*[nN][mM]ap*)
    echo "Some Code";;
  *)
    echo "Some Other Code";;
esac
于 2011-10-20T04:46:46.533 に答える
2

Bash glob パターンについては、こちらに文書化されています。これが欲しい: @(patt1|patt2). extglobシェル オプションを有効にする必要があることに注意してください。

shopt -s extglob
case $MESSAGE in
    ?Trcx!~*PRIVMSG*@(${Nick}|${AltNick})*[nN][mM]ap*)
       echo "Some Code";;
     *)
       echo "Some Other Code";;
esac
于 2011-10-20T03:13:48.850 に答える
1

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

ただし、正規表現の一致が必要な場合は、目的を達成するために [[ expression ]] 複合コマンドを試すことができます。これにより、正規表現の一致に =~ 演算子が提供されます。

#!/bin/bash

regexp="^[a-z]*$"
if [[ $1 =~ $regexp ]] ; then                                                                                                                                                                   
   echo "match"
else
   echo "no match"
fi
于 2011-10-20T03:31:10.977 に答える