bash - RegExp

13/04/2009 - 19:18 von Christian Garbs | Report spam
Mahlzeit!

Ich habe folgendes Phànomen beim Wechsel von Debian Etch auf Debian
Lenny festgestellt: Meine regulàren Ausdrücke funktionieren nicht
mehr.

Vorher (bash 3.1):

if [[ "${CHAR}" =~ "[0-9a-zA-Z()\'*~\\!./_-]" ]]; then

Jetzt (bash 3.2):

if [[ "${CHAR}" =~ [0-9a-zA-Z()\'*~\\!./_-] ]]; then

Ich muss die Anführungszeichen wegmachen, da sich die Quoting-Vorgaben
für die RegExp zwischen den beiden Bash-Versionen geàndert haben.

Nur: Wie gehe ich jetzt sinnvoll mit dieser Erkenntnis um?

Kann man bash irgendwie in einen Kompatibilitàtsmodus schalten?
Muss ich hart die Versionsnummer der bash abfragen?
Gibt's da noch weitere Fallstricke?

Aktuell habe ich leider keine alte bash mehr am Start, vielleicht
kommt die alte bash ja auch mit der neuen Notation klar.

Gruß
Christian

PS: Es geht um die uriencode-Funktion hieraus:
http://www.cgarbs.de/cgi-bin/gitweb...otogallery
Christian.Garbs.http://www.cgarbs.de
It followed me home. Can I keep it?
 

Lesen sie die antworten

#1 Markus Wichmann
13/04/2009 - 21:13 | Warnen spam
Christian Garbs wrote:
Mahlzeit!

Ich habe folgendes Phànomen beim Wechsel von Debian Etch auf Debian
Lenny festgestellt: Meine regulàren Ausdrücke funktionieren nicht
mehr.

Vorher (bash 3.1):

if [[ "${CHAR}" =~ "[0-9a-zA-Z()\'*~\\!./_-]" ]]; then

Jetzt (bash 3.2):

if [[ "${CHAR}" =~ [0-9a-zA-Z()\'*~\\!./_-] ]]; then

Ich muss die Anführungszeichen wegmachen, da sich die Quoting-Vorgaben
für die RegExp zwischen den beiden Bash-Versionen geàndert haben.

Nur: Wie gehe ich jetzt sinnvoll mit dieser Erkenntnis um?




Wie wàrs mit

case $CHAR in
[0-9a-zA-Z()\'*~\\!./_-])
;;
esac

Sorry, aber ich habe noch nie einen Anwendungsfall gesehen, wo man
unbedingt regex in der Shell haben muss. Wenns hart auf hart kommt:

if echo $CHAR | perl -e 'exit 1 if <STDIN> !~ [0-9a-zA-Z()'\''*~\\!./_-]'

Jedenfalls sind portable Konstrukte auch meistens langlebiger.

HTH,
Markus

GUI - ein Hintergrundbild und zwölf XTerms

vim -c "exec \"norm iwHFG#NABGURE#IVZ#UNPXRE\"|%s/#/ /g|norm g??g~~"

Ähnliche fragen