[[ "foo" =~ "fo.*o" ]] - bash escapes chars

oglimmer

Aktives Mitglied
Thread Starter
Dabei seit
16.11.2004
Beiträge
1.344
Reaktionspunkte
251
Hi,

führt man folgenden code unter OS X aus, so sieht man dass . und * geschützt (escape) werden.

Code:
#!/bin/sh
set -x
[[ "foo" =~ "fo.*o" ]] && echo MATCH
set +x

Unter Linux wird das nicht gemacht und daher "MATCH" (wie ich finde) korrekt ausgegeben.

Jemand eine Idee wie ich dem OS X bash sagen kann, dass er bitte meine RegEx nicht schützen soll?
 
Du rufst das Skript mit /bin/sh auf, also versucht die bash das Verhalten der historischen sh so gut wie möglich zu imitieren.
Spielt zwar für die Frage keine Rolle, aber eigentlich beschreibst Du hier das Verhalten der sh und nicht der bash.

Du vergleichst zwei Strings, die nicht matchen.
Das von Dir beschrieben Verhalten ist also m. E. völlig korrekt.
Warum das unter Linux anders ist, kann ich Dir nicht sagen.

Wenn Du eine String und eine RegEx vergleichen möchtest, musst Du die Anführungszeichen bei "fo.*o" weglassen.
Code:
[[ "foo" =~ fo.*o ]]
führt zu dem von Dir gewünschten Ergebnis.

Außerdem könnte
Code:
man bash | less +1/compat31
eine Rolle spielen.
 
  • Gefällt mir
Reaktionen: oglimmer und SysAdm
er kann doch auch einfach
#!/bin/bash
in das script schreiben, dann wird es doch garantiert mit der bash ausgeführt...
 
Ja, schon.
Das ändert aber auch nichts an dem vom OP beschriebenen Verhalten.
 
Zurück
Oben Unten