Я пытаюсь использовать Regex в Баш, чтобы проверить, если параметр, кажется, правильный путь после этого формата:Bash, если заявление с регулярным выражением
/first/second
В Java я с успехом использовать следующий Regex:
((\\/)[a-zA-Z0-9\\[email protected]\\-!#$%&+=]+)+
Но в bash у меня есть проблема, которую я не могу объяснить. Чтобы упростить мое понимание я стараюсь использовать более простой Regex так:
CHECKPATH="!/first/second"
REGEX_PATH="((\/)[a-zA-Z0-9]+)+"
if [[ ! ${CHECKPATH} =~ $REGEX_PATH ]]; then
echo "error"
else
echo "OK"
fi
Я вставить «!» на пути, чтобы проверить. Поэтому у меня должна быть «ошибка», но нет. С или без "!" он ничего не меняет, в чем проблема?
Update: (подвопрос Перенесено автора здесь из комментария)
Еще одна вещь, если я использую ^((\/)[a-zA-Z0-9\[email protected]#&%!$+=\-]+)+$
это нормально, но это не с ^((\/)[a-zA-Z0-9\[email protected]\-#&%!$+=]+)+$
. Я просто изменил положение «\ -» внутри регулярного выражения, почему?
Возможно, вам потребуется добавить^и $ для начала и окончания. попробуйте протестировать его здесь: http://www.regexpal.com/ – Buzz
Работает для меня в 'bash' 3.2 и 4.3, с или с символом'! 'в значении' CHECKPATH'. – chepner