Ich versuche, um REGEX in bash zu verwenden, um zu überprüfen, ob die Parameter einen gültigen Pfad folgen dieses Format zu sein scheinen:Bash if-Anweisung mit regex
/first/second
in Java I mit Erfolg verwenden Sie die folgende REGEX:
((\\/)[a-zA-Z0-9\\[email protected]\\-!#$%&+=]+)+
Aber in Bash habe ich ein Problem, das ich nicht erklären kann. Um mein Verständnis zu vereinfachen, ich versuche, eine einfachere REGEX so zu verwenden:
CHECKPATH="!/first/second"
REGEX_PATH="((\/)[a-zA-Z0-9]+)+"
if [[ ! ${CHECKPATH} =~ $REGEX_PATH ]]; then
echo "error"
else
echo "OK"
fi
ich einfügen ein „!“ auf dem Weg nur zu überprüfen. Also sollte ich "Fehler" haben aber nicht. Mit oder ohne "!" Es ändert nichts, was ist das Problem?
Update: (bewegt Autors Teilfrage hier aus einem Kommentar)
Eine weitere Sache, wenn ich ^((\/)[a-zA-Z0-9\[email protected]#&%!$+=\-]+)+$
verwenden Es ist in Ordnung, aber es ist nicht mit ^((\/)[a-zA-Z0-9\[email protected]\-#&%!$+=]+)+$
. Ich habe gerade die Position von "\ -" in der Regex geändert, warum?
Sie müssen möglicherweise^und $ hinzufügen für beginnt mit und endet mit. Versuchen Sie es hier zu testen: http://www.regexpal.com/ – Buzz
Funktioniert für mich in 'bash' 3.2 und und 4.3, mit oder mit dem'! 'im Wert von' CHECKPATH'. – chepner