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?
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?
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]+$ ]]
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
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
@chepner Korrigieren. Will meine Antwort bearbeiten, danke! – Maroun
'[[ "0"= ~^[0-9] + $]]' –
[Empfohlene Lektüre] (http://mywiki.wooledge.org/BashGuide/Patterns # Regular_Expressions-1) –