bashはどの正規表現エンジンタイプを使用しますか?


12

RegExバディを使用して、正規表現のプロトタイプとデバッグを行っています。RegExバディを使用すると、さまざまな正規表現エンジンタイプ(.NET、Java、Perl、GNU BRE、GNU ERE、POSIX、BRE、POSIX EREなど)から選択できます。

bashはどの正規表現エンジンを使用しますか(例:ifand 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になると思いますか?

回答:


11

bash(および一般にPOSIXシェル)caseでは、グロブパターンではなく、正規表現をステートメントで使用しません。

=~演算子を使用した正規表現のサポートには制限があります。詳細については、http//mywiki.wooledge.org/BashGuide/Patternsを参照してください
これは、bash拡張正規表現(ERE)を使用することを示しています。


ありがとう。2番目のリンクは、GNU EREであると私が推測しているEREについて言及しています。
Kev

2

Bashはifcaseステートメント内で上記の種類の正規表現を使用しません。

むしろ、シェルグロブパターンを使用します。これは、あらゆる通常の表現よりも強力ではありません。比較的新しいバージョンのbashでは、(行)アンカーなしの正規表現と表現的に同等であるが否定語を含むが、上記の正規表現タイプとは構文が異なる拡張グロブパターンを使用できます。

ただし、拡張シェルグロブshopt -s extglob は、シェルスクリプトで、またはインタラクティブに使用する前に有効にする必要があることに注意してください 。

単一の例外的な場所、つまり[[ ]]条件付きコマンド内では、=~バイナリ関係により、左側の文字列を右側の拡張正規表現EREと照合できます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.