Jag använder RegEx Buddy för att prototyp och felsöka mina reguljära uttryck. RegEx Buddy tillåter mig att välja mellan ett antal olika motortyper med reguljärt uttryck (.NET, Java, Perl, GNU BRE, GNU ERE, POSIX, BRE, POSIX ERE etc).
Vilken reguljär expressionsmotor gör bash-användning (till exempel i if
och case
uttalanden)? Jag kör Centos 5.5 32 bitar och 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.
Jag gissar att det kommer att vara GNU BRE eller GNU ERE?
Svar
bash (och POSIX-skal i allmänhet) använder inte reguljära uttryck i case
uttalande, snarare globmönster .
Det finns begränsat stöd för reguljära uttryck med =~
operatör; se detaljer på: http://mywiki.wooledge.org/BashGuide/Patterns ,
som säger att bash
använder Extended Regular Expressions (ERE).
Kommentarer
- Tack. Andra länken nämner ERE som jag antar är GNU ERE.
Svar
Bash använder inte något av ovanstående typer av reguljära uttryck i if
och case
uttalanden.
Snarare använder den skalgl-mönster , som är mindre kraftfulla än någon form av regelbundet uttryck. Relativt nya versioner av bash tillåter också användning av utökade globmönster som uttryckligen är lika med reguljära uttryck utan (linje) ankare men inklusive negerade termer, men med en syntax som skiljer sig från ovan nämnda typer av reguljära uttryck.
Observera dock att utökade skalglobbar måste aktiveras före användning med shopt -s extglob
både i ett skalskript eller interaktivt.
På ett enda exceptionellt ställe, nämligen inom [[ ]]
villkorligt kommando, möjliggör =~
binär relation att kontrollera en sträng till vänster sida mot en utökad regelbunden uttryck ERE på höger sida.
Svar
Enligt den länkade Bash-guiden använder Bash (sedan version 3.0+): ” Utökat regelbundet uttryck (ERE) dialekt.”
Mer information om dialekten kan hittas här .