Welchen Engine-Typ für reguläre Ausdrücke verwendet bash?


12

Ich verwende RegEx Buddy , um meine regulären Ausdrücke zu prototypisieren und zu debuggen. Mit RegEx Buddy kann ich zwischen verschiedenen Engine-Typen für reguläre Ausdrücke wählen (.NET, Java, Perl, GNU BRE, GNU ERE, POSIX, BRE, POSIX ERE usw.).

Welche Engine für reguläre Ausdrücke verwendet bash (z. B. in ifund caseAnweisungen)? Ich verwende Centos 5.5 32 Bit und 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.

Ich vermute, es wird GNU BRE oder GNU ERE sein?

Antworten:


11

bash (und POSIX-Shells im Allgemeinen) verwenden keine regulären Ausdrücke in der caseAnweisung, sondern Glob-Muster .

Es gibt nur begrenzte Unterstützung für reguläre Ausdrücke mit dem =~Operator. Weitere Informationen finden Sie unter: http://mywiki.wooledge.org/BashGuide/Patterns , in
dem bashExtended Regular Expressions (ERE) verwendet werden.


Vielen Dank. Der zweite Link erwähnt ERE, von dem ich vermute, dass es GNU ERE ist.
Kev

2

Bash verwendet keine der oben genannten regulären Ausdrücke in ifden caseAnweisungen und.

Vielmehr werden Shell-Glob-Muster verwendet, die weniger leistungsfähig sind als jede Art von regulärem Ausdruck. Relativ neue Versionen von bash ermöglichen auch die Verwendung erweiterter Glob-Muster, die ausdrücklich regulären Ausdrücken ohne (Linien-) Anker entsprechen, aber negierte Begriffe enthalten, jedoch eine andere Syntax aufweisen als die oben genannten Typen regulärer Ausdrücke.

Beachten Sie jedoch, dass erweiterte Shell-Globs vor der Verwendung mit shopt -s extglob beiden in einem Shell-Skript oder interaktiv aktiviert werden müssen .

An einer einzelnen außergewöhnlichen Stelle, nämlich innerhalb des [[ ]]bedingten Befehls, ermöglicht die =~binäre Beziehung, eine Zeichenfolge auf der linken Seite mit einem erweiterten regulären Ausdruck ERE auf der rechten Seite zu vergleichen.


0

Laut dem verknüpften Bash-Handbuch verwendet Bash (seit Version 3.0+): "den ERE- Dialekt (Extended Regular Expression) ."

Weitere Informationen zu diesem Dialekt finden Sie hier .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.