を読んでcomment by Charles Duffy私は疑問を見つけました:単純な正規表現を確認するのに、=
または=~
を使用することに違いはありますか?=と=〜は簡単な正規表現をチェックするのと同じですか?
我々は単なる文字列を別の文字列の一部であるかどうかを確認したい場合は、これらのオプションは等価です:
$ re="[0-9]"
$ number=2
$ [[ $number = $re ]] && echo "yes"
yes
$ [[ $number = *$re* ]] && echo "yes"
yes
:変数に格納が正規表現ならば
$ [[ hello = *el* ]] && echo "yes"
yes
$ [[ hello =~ el ]] && echo "yes"
yes
同じことが起こりますただし、リテラル以外の文字列をチェックすると=
では機能せず、=~
の使用が必要です。
$ date=20160620
$ [[ $date = [0-9]{4}(0[0-9]|1[0-2])([0-2][0-9]|3[0-1]) ]] && echo "yes"
bash: syntax error in conditional expression: unexpected token `('
bash: syntax error near `[0-9]{4}(0'
$ [[ $date =~ [0-9]{4}(0[0-9]|1[0-2])([0-2][0-9]|3[0-1]) ]] && echo "yes"
yes
$ [[ $date =~ ^[0-9]{4}(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])$ ]] && echo "yes"
yes
一般的なパフォーマンスとPOSIXには何を使用すべきですか?
これらのすべては、私のGNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
に基づいています。
globbingとRegexの違いは何ですか。 '='はグロブを使いますが、 '=〜'は正規表現を使います。 – heemayl
選択肢がある場合は、効率を上げるために正規表現を使用します。それは通常より速いです。 http://stackoverflow.com/q/18412294/1566221を参照してください。しかし、正規表現はposixではありません。 – rici