2015-05-21 2 views
5

Wenn ich [[ "0" =~ "^[0-9]+$" ]] && echo hello an einem Terminal mache, würde ich erwarten, das Wort "Hallo"Warum kehrt dieser einfache Bash-Regex nicht zurück?

zu sehen, aber nichts wird gedruckt. Was mache ich falsch?

+1

'[[ "0"= ~^[0-9] + $]]' –

+0

[Empfohlene Lektüre] (http://mywiki.wooledge.org/BashGuide/Patterns # Regular_Expressions-1) –

Antwort

5

Sie müssen die in Ihrer Regex vorhandenen Anführungszeichen entfernen. dh, schließen Sie Ihr Regex-Muster nicht in Anführungszeichen ein.

[[ "0" =~ ^[0-9]+$ ]] 
3

Es sollte sein:

[[ "0" =~ ^[0-9]+$ ]] && echo hello 

Beachten Sie, dass der zweite Teil nicht mit doppelten Anführungszeichen umgeben ist, sonst wird es als String behandelt werden „^ [0-9] + $ "Und keine Regex. Um zu bestätigen, dass, versuchen:

[[ "^[0-9]+$" =~ "^[0-9]+$" ]] && echo hello 
+2

Geringfügige Technizität: Die rechte Seite wird immer noch als regulärer Ausdruck behandelt ('[[foo = ~" fo "]]' würde zum Beispiel immer noch erfolgreich sein). Der Unterschied ist, dass alle * Metazeichen * innerhalb der Regex wörtlich behandelt werden. – chepner

+0

@chepner Korrigieren. Will meine Antwort bearbeiten, danke! – Maroun

Verwandte Themen