programA
だから私は次のような出力を提供するプログラム(例えば)を持っています:yes
、、、、、、、、。no
maybe
probably
possibly
impossible
banana
私はその出力に基づいて何かを実行するスクリプトを作成したいと思います。yes
、maybe
および考慮するだけでよいとしましょう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
正規表現の周りに引用符を含めることはできず、部分文字列が一致をトリガーできないようにするため、および^
アンカーの間に単語置換単語が含まれます(たとえば、パターンでキャプチャされるなど)。$
yessir
yes