Welk type engine voor reguliere expressies gebruikt bash?

Ik gebruik RegEx Buddy om mijn reguliere expressies te prototypen en te debuggen. Met RegEx Buddy kan ik kiezen uit een aantal verschillende typen engine voor reguliere expressies (.NET, Java, Perl, GNU BRE, GNU ERE, POSIX, BRE, POSIX ERE enz.).

Wat doet de engine voor reguliere expressie bash-gebruik (bijvoorbeeld in if en case instructies)? Ik draai Centos 5.5 32 bit en 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. 

Ik vermoed dat het GNU BRE of GNU ERE zal zijn?

Antwoord

bash (en POSIX-shells in het algemeen) gebruiken geen reguliere expressies in de case statement, in plaats van glob patronen .

Er is beperkte ondersteuning voor reguliere expressies die de =~ operator; zie details op: http://mywiki.wooledge.org/BashGuide/Patterns ,
waarin staat dat bash maakt gebruik van Extended Regular Expressions (ERE).

Reacties

  • Bedankt. De tweede link vermeldt ERE waarvan ik vermoed dat het GNU ERE is.

Answer

Bash gebruikt geen van de bovenstaande soorten reguliere expressies in de if en de case statements.

Het gebruikt eerder shell glob-patronen , die minder krachtig zijn dan welke reguliere expressie dan ook. Relatief nieuwe versies van bash staan ook het gebruik toe van uitgebreide glob-patronen die expressief gelijk zijn aan reguliere expressies zonder (lijn) ankers maar met genegeerde termen, maar met een syntaxis die verschilt van die van alle andere de bovengenoemde reguliere expressietypes.

Merk echter op dat uitgebreide shell-globs vóór gebruik met shopt -s extglob zowel in een shellscript als interactief moeten worden ingeschakeld.

Op één uitzonderlijke plaats, namelijk binnen het [[ ]] voorwaardelijke commando, maakt de =~ binaire relatie het mogelijk om een string aan de linkerkant te controleren kant tegen een verlengde regelmatige expressie ERE aan de rechterkant.

Answer

Volgens de gelinkte Bash-gids gebruikt Bash (sinds versie 3.0+): “the Extended Regular Expression (ERE) dialect.”

Meer informatie over dat dialect is te vinden hier .

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *