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

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

たとえば、これが私のスクリプトだとすると:

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

grepこれを行う最も一般的で普遍的な方法の 1 つは、文字列を にパイプして の戻りコードをチェックすることですgrep。このifステートメントは、任意のコマンドまたはパイプラインの終了コードをチェックできます。

if echo "$yesno" | grep -q "What'*s *going *on[?.]*"; then

あなたが言及した文字に加えて、単語間に 0 個以上のスペースも許可されます。

この構造は、OS X、FreeBSD、GNU/Linux、および POSIX grep を提供するその他のシステムで動作するはずです。

関連情報