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 .