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 funktioniert Bash-Verwendung (zum Beispiel in den Anweisungen if
und case
)? 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?
Antwort
bash (und POSIX-Shells im Allgemeinen) verwenden keine regulären Ausdrücke in case
-Anweisung, eher Glob-Muster .
Reguläre Ausdrücke mit Operator; Einzelheiten finden Sie unter: http://mywiki.wooledge.org/BashGuide/Patterns ,
das besagt, dass bash
verwendet erweiterte reguläre Ausdrücke (ERE).
Kommentare
- Danke. Der zweite Link erwähnt ERE, von dem ich vermute, dass es GNU ERE ist.
Antwort
Bash verwendet keine von Die oben genannten Arten von regulären Ausdrücken in den Anweisungen if
und case
.
Es werden vielmehr Shell-Glob-Muster verwendet 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 alle anderen die oben genannten Typen regulärer Ausdrücke.
Beachten Sie jedoch, dass erweiterte Shell-Globs vor der Verwendung mit shopt -s extglob
sowohl in einem Shell-Skript als auch interaktiv aktiviert werden müssen.
An einer einzelnen außergewöhnlichen Stelle, nämlich innerhalb des bedingten Befehls [[ ]]
, ermöglicht die binäre Beziehung =~
das Überprüfen einer Zeichenfolge auf der linken Seite Seite gegen einen verlängerten Stammgast Ausdruck ERE auf der rechten Seite.
Antwort
Gemäß dem verknüpften Bash-Handbuch verwendet Bash (seit Version 3.0+): „the Erweiterter regulärer Ausdruck (ERE) Dialekt.“
Weitere Informationen zu diesem Dialekt finden Sie hier .