Uso RegEx Buddy per prototipare ed eseguire il debug delle mie espressioni regolari. RegEx Buddy mi consente di scegliere tra diversi tipi di motori di espressioni regolari (.NET, Java, Perl, GNU BRE, GNU ERE, POSIX, BRE, POSIX ERE ecc.).
Cosa fa il motore di espressioni regolari bash use (ad esempio nelle istruzioni if
e case
)? Sto eseguendo Centos 5.5 a 32 bit e 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.
Immagino che sarà GNU BRE o GNU ERE?
Risposta
bash (e le shell POSIX in generale) non usano espressioni regolari nel case
, piuttosto modelli glob .
Il supporto per le espressioni regolari che utilizzano operatore; vedi i dettagli su: http://mywiki.wooledge.org/BashGuide/Patterns ,
che dice che bash
utilizza le espressioni regolari estese (ERE).
Commenti
- Grazie. Il secondo collegamento menziona ERE che immagino sia GNU ERE.
Risposta
Bash non usa nessuno dei i tipi di espressioni regolari di cui sopra nelle istruzioni if
e case
.
Piuttosto, utilizza schemi glob di shell , che sono meno potenti di qualsiasi tipo di espressione regolare. Versioni relativamente nuove di bash consentono anche luso di modelli glob estesi che sono espressamente uguali alle espressioni regolari senza ancore (di linea) ma includendo termini negati, ma con una sintassi diversa da qualsiasi i tipi di espressioni regolari sopra menzionati.
Nota tuttavia che i glob di shell estesi devono essere abilitati prima delluso con shopt -s extglob
sia in uno script di shell che interattivamente.
In un unico posto eccezionale, vale a dire allinterno del [[ ]]
comando condizionale, la relazione binaria =~
consente di controllare una stringa a sinistra lato contro un regolare esteso espressione ERE sul lato destro.
Risposta
Secondo la guida Bash collegata, Bash (dalla versione 3.0+) utilizza: “the Extended Regular Expression (ERE) dialect.”
Ulteriori informazioni su quel dialetto sono disponibili qui .