たとえば、これが私のスクリプトの場合:
if [[ $yesno == "What's going on" ]]; then
たとえば、無視するにはどうすればよいですか'
??
,
.
だから基本的にWhats going on
、、、What's going on
はWhat's going on?
同じWhat's going on.
ようです。複数の変数を一致させることは可能ですが、|| [[ $yesno == ".. ]]
すべての組み合わせを入力することはできません。
答え1
特定の例だけを機能させるには、bash正規表現一致を使用できます。
[[ $yesno =~ What\'?s\ going\ on[.?]? ]]
バックスラッシュを使用して引用符とスペースをエスケープします。
答え2
比較する前に、変数から英数字以外のすべての文字を簡単に削除できます。
$ yesno="What's going on?"
$ if [[ ${yesno//[^a-zA-Z0-9\ ]/} == "Whats going on" ]]; then echo "OK";fi
OK
答え3
最も一般的でさまざまな方法の1つは、文字列をパイプして戻りコードをgrep
確認することです。grep
このif
ステートメントは、すべてのコマンドまたはパイプの終了コードを確認できます。
if echo "$yesno" | grep -q "What'*s *going *on[?.]*"; then
これにより、言及した文字に加えて、単語の間にゼロ個以上の空白が許可されます。
この構成は、OS X、FreeBSD、GNU/Linux、および POSIX grep を提供する他のシステムで動作する必要があります。