3 Stimmen

Syntaxfehler in [[ bedingtem Ausdruck mit Bash

Wenn ich das ausführe

regex='^[-a-z0-9]+$'
string='abcd1--'
if [[ $string =~ $regex ] -a ![ grep - "--" ]]
then 
    echo "valid"
else
    echo "not valid"
fi

bekomme ich

~$ sh t.sh 
t.sh: Zeile 3: Syntaxfehler im bedingten Ausdruck
t.sh: Zeile 3: Syntaxfehler in der Nähe von `]'
t.sh: Zeile 3: `if [[ $string =~ $regex ] -a [ grep - "--" ]]'
~$ 

Es sollte not valid zurückgeben.

Kann jemand herausfinden, was falsch ist?

2 Stimmen

Deine Syntax für [[ ist inkorrekt.

1 Stimmen

Sie müssen das Skript mit Bash ausführen, nicht mit Sh (das normalerweise (d)ash ist). Es gibt keinen =~ Operator, der das test Dienstprogramm verwendet (das von (d)ash verwendet wird).

9voto

Mat Punkte 195740

Du mischst die [ und [[ Syntax auf seltsame Weise.

Versuche es mit:

if [[ ( $string =~ $regex ) && !( $string =~ "--" ) ]]

und schau in der Man-Seite von bash nach.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X