Jeg bruker RegEx Buddy til å prototype og feilsøke mine vanlige uttrykk. RegEx Buddy lar meg velge mellom en rekke forskjellige motortyper med regulært uttrykk (.NET, Java, Perl, GNU BRE, GNU ERE, POSIX, BRE, POSIX ERE osv.).
Hvilken motor med vanlig uttrykk gjør bash bruk (for eksempel i if
og case
uttalelser)? Jeg kjø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 gjetter det «vil være GNU BRE eller GNU ERE?
Svar
bash (og POSIX-skall generelt) bruker ikke regulære uttrykk i case
uttalelse, heller glob mønstre .
Det er begrenset støtte for vanlige uttrykk ved hjelp av =~
operatør; se detaljer på: http://mywiki.wooledge.org/BashGuide/Patterns ,
som sier at bash
bruker Extended Regular Expressions (ERE).
Kommentarer
- Takk. Andre lenke nevner ERE som jeg antar er GNU ERE.
Svar
Bash bruker ikke noe av ovennevnte typer regulære uttrykk i if
og case
utsagnene.
Snarere bruker den shell-glob mønstre , som er mindre kraftige enn noen form for vanlig uttrykk. Relativt nye versjoner av bash tillater også bruk av utvidede globmønstre som er uttrykkelig like regulære uttrykk uten (linje) ankre, men inkludert negerte termer, men med en syntaks som er forskjellig fra noen de ovennevnte regulære uttrykkstypene.
Merk imidlertid at utvidede skallglobber må være aktivert før bruk med shopt -s extglob
både i et skallskript eller interaktivt.
På et eneste eksepsjonelt sted, nemlig innenfor [[ ]]
betinget kommando, tillater =~
binær relasjon å sjekke en streng til venstre side mot en utvidet regulær uttrykk ERE på høyre side.
Svar
I følge den sammenkoblede Bash-guiden bruker Bash (siden versjon 3.0+): « Utvidet regulært uttrykk (ERE) dialekt.»
Mer informasjon om denne dialekten kan bli funnet her .