bashスクリプトで正規表現を使用するにはどうすればよいですか?


83

正規表現を使用して、変数に有効な年があるかどうかを確認したいと思います。読むbashのマニュアルを演算子=〜を使用できることがわかります。

以下の例を見ると、「OKではない」と表示されるはずですが、「OK」と表示されます。私は何が間違っているのですか?

i="test"
if [ $i=~"200[78]" ]
then
  echo "OK"
else
  echo "not OK"
fi


の周りにスペースがないため、これは失敗していたことに注意してください=~
fedorqui'SOは害をやめます '2016

回答:


116

3.1と3.2の間で変更されました。

これは、bash-3.1のリリース以降にbash-3.2に追加された新機能の簡潔な説明です。

文字列引数を[[コマンドの=〜演算子に引用すると、他のパターンマッチング演算子と同様に、文字列マッチングが強制されるようになりました。

したがって、引用符なしで使用してください。

i="test"
if [[ $i =~ 200[78] ]] ; then
    echo "OK"
else
    echo "not OK"
fi

1
引用できない場合、正規表現にスペースが含まれている状況をどのように処理しますか?正規表現がたとえばa +b、構文エラーを報告する場合...
Alderath 2013

5
@Alderath:a\ \+bスペースとプラス文字をエスケープするために使用します。
blinry 2013

8

演算子=〜の周りにスペースが必要です

i = "test"
if [[$ i =〜 "200 [78]"]];
その後
  エコー「OK」
そうしないと
  エコー「OKではありません」
fi

3
paxdiabloの答えは正しいです。ここにスペースを追加しても役に立ちません(2008年も「OKではありません」と表示されます。一致する文字列は文字通り「200 [78]」だけです)。
Marcel Stimberg 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.