変数を比較するときに特定の文字を無視しますか?

変数を比較するときに特定の文字を無視しますか?

たとえば、これが私のスクリプトの場合:

if [[ $yesno == "What's going on" ]]; then

たとえば、無視するにはどうすればよいですか'?,.

だから基本的にWhats going on、、、What's going onWhat'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 を提供する他のシステムで動作する必要があります。

関連情報