Jaký typ modulu pro regulární výrazy používá bash?

K vytváření prototypů a ladění mých regulárních výrazů používám RegEx Buddy . RegEx Buddy mi umožňuje volit mezi řadou různých typů modulů regulárních výrazů (.NET, Java, Perl, GNU BRE, GNU ERE, POSIX, BRE, POSIX ERE atd.).

Co dělá modul regulárních výrazů bash use (například v if a case prohlášeních)? Používám 32bitovou verzi Centos 5.5 a 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. 

Hádám, že to bude GNU BRE nebo GNU ERE?

Odpověď

bash (a obecně POSIX skořápky) nepoužívají regulární výrazy v case prohlášení, spíše glob vzory .

Omezená podpora regulárních výrazů pomocí operátor; zobrazit podrobnosti na adrese: http://mywiki.wooledge.org/BashGuide/Patterns ,
říká, že bash používá rozšířené regulární výrazy (ERE).

Komentáře

  • Děkuji. Druhý odkaz zmiňuje ERE, o kterém si myslím, že je GNU ERE.

Odpověď

Bash nepoužívá žádný z výše uvedené druhy regulárních výrazů v příkazech if a case.

Spíše používá vzory globálních shellů , které jsou méně výkonné než jakýkoli druh regulárního výrazu. Relativně nové verze bash také umožňují použití rozšířených glob vzorů, které jsou expresivně stejné jako regulární výrazy bez (line) kotev, ale včetně negovaných výrazů, ale se syntaxí odlišnou od kteréhokoli z výše uvedené typy regulárních výrazů.

Pamatujte však, že rozšířené globusy prostředí musí být povoleny před použitím shopt -s extglob jak ve skriptu prostředí, tak interaktivně.

Na jednom výjimečném místě, konkrétně v podmíněném příkazu [[ ]], umožňuje binární relace =~ zkontrolovat řetězec vlevo strana proti prodloužené pravidelné výraz ERE na pravé straně.

Odpověď

Podle propojeného průvodce Bash používá Bash (od verze 3.0+): „the rozšířený regulární výraz (ERE) dialekt.“

Více informací o tomto dialektu naleznete zde .

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *