2016-05-17 6 views
2

Hallo, ich bin immer Fehler in dieser Zeile unterBash-Skript Bedingungsprüfung Anweisung werfen Fehler

BOOTPROTO="dhcp" 
    TEST=$([[ "$BOOTPROTO" =~ (static|none|bootp|dhcp)$ ]] ; echo $?) 

Fehler, den ich bekommen habe ist unter

-bash: command substitution: line 1: unexpected argument `(' to conditional binary operator 
-bash: command substitution: line 1: syntax error near `(s' 
-bash: command substitution: line 1: `[[ "$BOOTPROTO" =~ (static|none|bootp|dhcp)$ ]] ; echo $?' 

Ich habe versucht, ihn manuell zu laufen, aber konnte es nicht lösen

+0

Was möchten Sie hier erreichen? Warum nur so lange gehen, um das Testergebnis zu erhalten? – Jahid

+0

Ich versuche zu überprüfen, ob BOOTPROPTO statisches, none, dhcp etc. enthält. Da es alles von ihnen enthalten könnte, um es als Beispiel zu geben, stelle ich es auf dhcp – user3290805

+5

Warum nicht einfach: '[[$ BOOTPROTO = ~ (statisch | none | bootp | dhcp) $]]; TEST = $? ' – anubhava

Antwort

3

Wickeln Sie Ihre regex in Anführungszeichen:

BOOTPROTO="dhcp" 
    TEST=$([[ "$BOOTPROTO" =~ "(static|none|bootp|dhcp)$" ]] ; echo $?) 
    echo "$TEST" 

Oder wenn Sie mit Bash> = 3,2, dann die Klammern entkommen (als Eric in den Kommentaren erwähnt.)

TEST=$([[ "$BOOTPROTO" =~ \(static|none|bootp|dhcp\)$ ]] ; echo $?) 

Ausgang:

1 
+3

Das Angeben der Regex wird nicht mehr empfohlen. Siehe http://mywiki.wooledge.org/BashGuide/Patterns mit dem folgenden Zitat: "Beachten Sie, dass sich das Regex-Parsing in Bash zwischen den Releases 3.1 und 3.2 geändert hat. Vor 3.2 war es sicher, Ihr Regex-Muster in Anführungszeichen zu schreiben, aber das hat es geändert in 3.2 Seitdem sollte regex immer nicht quot. Sie sollten alle Sonderzeichen schützen, indem Sie es mit einem umgekehrten Schrägstrich entkommen. Der beste Weg, immer kompatibel zu sein, ist Ihre Regex in eine Variable und erweitern Sie diese Variable in [[ohne Anführungszeichen , wie wir oben gezeigt haben. " –

+0

Danke @EricRenouf – jkdba

0

Warum nicht einfach

[[ "$BOOTPROTO" =~ (static|none|bootp|dhcp)$ ]] 
TEST=$? 

?