単語リストでif文を使用する

単語リストでif文を使用する

programAだから私は次のような出力を提供するプログラム(例えば)を持っています:yes、、、、、、、、。nomaybeprobablypossiblyimpossiblebanana

私はその出力に基づいて何かを実行するスクリプトを作成したいと思います。yesmaybeおよび考慮するだけでよいとしましょうbanana

これまで私がしなければならないcaseことは、次のように使用するだけです。

case $program_output in
  yes) echo "good word: $program_output" ;;
  maybe) echo "good word: $program_output" ;;
  banana) echo "good word: $program_output" ;;
  *) echo "bad word: $program_output" ;;
esac

しかし、最近この文章で遊んで、if次のようにすればはるかに速くできることがわかりました。

if [[ "yesmaybebanana" =~ ${program_output} ]]; then
  echo "good word: ${program_output}"; else echo "bad word: ${program_output}";
fi

私がその言葉を使うべきではない理由はありますかif?この場合、$program_outputスペースを含めることはできず、出力できる単語のリストが制限されます。

ベストアンサー1

bash正規表現関数を使用する場合(ただしbash特定の関数なので移植可能ではありません)、少なくとも正しい「OR」型演算子を使用してANDを強制する必要があります。一つ次の単語が許可されます。

if [[ $program_output =~ ^(yes|maybe|banana)$ ]]
then
    echo "Good word: $program_output"
else
    echo "Bad word: $program_output"
fi

正規表現の周りに引用符を含めることはできず、部分文字列が一致をトリガーできないようにするため、および^アンカーの間に単語置換単語が含まれます(たとえば、パターンでキャプチャされるなど)。$yessiryes

おすすめ記事