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?

Odpowiedzi:



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.


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 .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.