it-swarm.com.de

Wie verwende ich reguläre Ausdrücke in Bash-Skripten?

Ich möchte mit einem regulären Ausdruck prüfen, ob eine Variable ein gültiges Jahr hat. Lesen des Bash-Handbuch Ich verstehe, ich könnte den Operator = ~ verwenden

Wenn ich mir das folgende Beispiel ansehe, würde ich erwarten, dass "nicht OK", aber "OK" angezeigt wird. Was mache ich falsch?

i="test"
if [ $i=~"200[78]" ]
then
  echo "OK"
else
  echo "not OK"
fi
82
idrosid

Es wurde zwischen 3.1 und 3.2 geändert:

Dies ist eine knappe Beschreibung der neuen Funktionen, die seit der Veröffentlichung von bash-3.1 zu bash-3.2 hinzugefügt wurden.

Wenn Sie das Zeichenfolgenargument in Anführungszeichen für den Operator = ~ des Befehls [[setzen, wird jetzt wie bei den anderen Operatoren für die Mustererkennung die Zeichenfolgenübereinstimmung erzwungen.

Also benutze es ohne die Anführungszeichen so:

i="test"
if [[ $i =~ 200[78] ]] ; then
    echo "OK"
else
    echo "not OK"
fi
115
paxdiablo

Sie benötigen Leerzeichen um den Operator = ~

 i = "test" 
 if [[$ i = ~ "200 [78]"]; 
 then 
 echo "OK" 
 sonst 
 Echo "nicht OK" 
 fi 
8
michiel