Vilken typ av reguljärt uttryck använder bash?

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 .

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *