たとえば、これが私のスクリプトだとすると:
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 を提供するその他のシステムで動作するはずです。