Jeg bruger RegEx Buddy til at prototype og debugge mine regulære udtryk. RegEx Buddy giver mig mulighed for at vælge mellem et antal forskellige motortyper med regulært udtryk (.NET, Java, Perl, GNU BRE, GNU ERE, POSIX, BRE, POSIX ERE osv.).
Hvilken motor med regulært udtryk gør bash brug (for eksempel i if
og case
udsagn)? Jeg kører Centos 5.5 32 bit og 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.
Jeg gætter på det “vil være GNU BRE eller GNU ERE?
Svar
bash (og POSIX-skal generelt) bruger ikke regulære udtryk i case
udsagn, snarere glob mønstre .
Der er begrænset understøttelse af regulære udtryk ved hjælp af =~
operatør; se detaljer på: http://mywiki.wooledge.org/BashGuide/Patterns ,
der siger, at bash
bruger Extended Regular Expressions (ERE).
Kommentarer
- Tak. Andet link nævner ERE, som jeg gætter på er GNU ERE.
Svar
Bash bruger ikke noget af ovenstående slags regulære udtryk i if
og case
udsagnene.
Det bruger snarere shell glob mønstre , som er mindre magtfulde end nogen form for regelmæssig udtryk. Relativt nye versioner af bash tillader også brugen af udvidede globmønstre, der udtrykkeligt er lig med regulære udtryk uden (linje) ankre, men inklusive negerede termer, men med en syntaks, der adskiller sig fra nogen af de ovennævnte typer af regulære udtryk.
Bemærk dog, at udvidede shell globs skal aktiveres forud for brug med shopt -s extglob
både i et shell-script eller interaktivt.
På et enkelt ekstraordinært sted, nemlig inden for [[ ]]
betinget kommando, tillader =~
binær relation at kontrollere en streng til venstre side mod en udvidet regelmæssig udtryk ERE på højre side.
Svar
Ifølge den sammenkædede Bash-guide bruger Bash (siden version 3.0+): “ Udvidet regulært udtryk (ERE) dialekt.”
Flere oplysninger om denne dialekt kan findes her .