Jakiego typu silnika wyrażeń regularnych używa bash?

12

Używam RegEx Buddy do prototypowania i debugowania moich wyrażeń regularnych. RegEx Buddy pozwala mi wybierać spośród wielu różnych typów silnika wyrażeń regularnych (.NET, Java, Perl, GNU BRE, GNU ERE, POSIX, BRE, POSIX ERE itp.).

Z jakiego silnika wyrażeń regularnych korzysta bash (na przykład w instrukcjach ifi caseinstrukcjach)? Korzystam z Centos 5.5 w wersji 32-bitowej i 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.

Zgaduję, że będzie to GNU BRE czy GNU ERE?

Kev
źródło

Odpowiedzi:

11

bash (i ogólnie powłoki POSIX) nie używają wyrażeń regularnych w caseinstrukcji, a raczej wzorce globalne .

Obsługa wyrażeń regularnych przy użyciu =~operatora jest ograniczona; zobacz szczegóły na stronie: http://mywiki.wooledge.org/BashGuide/Patterns ,
która mówi, że bashużywa rozszerzonych wyrażeń regularnych (ERE).

Riccardo Murri
źródło
Dzięki. Drugi link wspomina o ERE, które, jak sądzę, to GNU ERE.
Kev
3

Bash nie używa żadnego z powyższych rodzajów wyrażeń regularnych w if i case.

Zamiast tego używa wzorców globu powłoki, które są mniej wydajne niż jakikolwiek rodzaj regularnej ekspresji. Względnie nowe wersje bash pozwalają również na stosowanie rozszerzonych wzorców globu, które są wyraźnie równe wyrażeniom regularnym bez kotwic (liniowych), ale zawierają wyrażenia negowane, ale ze składnią inną niż którykolwiek z wyżej wymienionych typów wyrażeń regularnych.

Należy jednak pamiętać, że rozszerzone globusy powłoki muszą być włączone przed użyciem shopt -s extglob w skrypcie powłoki lub interaktywnie.

W jednym wyjątkowym miejscu, a mianowicie w [[ ]]poleceniu warunkowym, =~relacja binarna pozwala sprawdzić ciąg po lewej stronie z rozszerzonym wyrażeniem regularnym ERE po prawej stronie.

Franki
źródło
0

Zgodnie z połączonym przewodnikiem Bash Bash (od wersji 3.0+) używa: „ dialektu rozszerzonego wyrażenia regularnego (ERE) ”.

Więcej informacji na temat tego dialektu można znaleźć tutaj .

SkyLeach
źródło