
私は使う正規表現の友達正規表現をプロトタイピングしてデバッグします。 RegEx Buddyを使用すると、さまざまな正規表現エンジンタイプ(.NET、Java、Perl、GNU BRE、GNU ERE、POSIX、BRE、POSIX EREなど)から選択できます。
bashはどの正規表現エンジンを使用しますか(例:inif
やcase
ドア)。 Centos 5.5 32ビットとbash 3.2.25(1)を実行しています。
[kevin@mon01 scratch]$ bash --version
GNU bash, version 3.2.25(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
私はそれがGNU BREになると思いますか、それともGNU EREになりますか?
答え1
bash(および一般的なPOSIXシェル)はステートメントで正規表現を使用しませんがcase
、グローバルモード。
演算子を使用した正規表現のサポートは制限されます=~
。詳細については、次を参照してください。http://mywiki.wooledge.org/BashGuide/Patterns、
これはbash
拡張正規表現(ERE)を使用することを意味します。
答え2
if
Bashはステートメントで上記の正規表現型を使用しませんcase
。
代わりに、どの種類の正規表現よりも強力なシェルグローブモードを使用します。比較的新しいバージョンのbashでは、(線)アンカーはありませんが、否定を含む正規表現と表現的に同じですが、構文は上記の正規表現型とは異なる拡張globパターンを使用できます。
shopt -s extglob
ただし、拡張シェルglobは最初にシェルスクリプトまたは対話式で使用する必要があります。
[[ ]]
条件付きコマンド内の特別な位置でバイナリ=~
関係を使用すると、右側の拡張正規表現EREの左側の文字列を確認できます。
答え3
リンクされたBashガイドによると、Bash(バージョン3.0以降)は以下を使用します。拡張正規表現(ERE)方言。 」
方言に関するより多くの情報を見つけることができますここ。