web-dev-qa-db-ja.com

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

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

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

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

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

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

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

したがって、引用符なしで次のように使用します。

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

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

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