Hvilken motortype med regulært udtryk bruger bash?

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 .

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *