Почему этот тест регулярного выражения не работает?
У меня есть это
echo $line
Thisisaline.
Мне было интересно, почему это не работает:
if [[ "$line" =~ "[a-zA-Z]+\.$" ]] ; then echo "hello"; fi
Выше регулярное выражение не выводит.
Ответ 1
Проблема в том, что вы используете кавычки...
В bash regex нет необходимости в кавычках, и они не должны использоваться (если вы не пытаетесь сопоставить цитату (в этом случае вы можете избежать ее \")... Также if вам нужно пространство в вашем шаблоне, вы должны избежать его, \ (после обратного слэша есть пробел...
Также обратите внимание, что для соответствия всей строки как алфавита вы должны добавить ведущий ^ и конечный $, в противном случае он будет соответствовать таким строкам, как: 123 456 abc. cat and mouse
Ответ 2
Try
if [[ $line =~ [a-zA-Z]+\. ]] ; then echo hello; fi
Ответ 3
Некоторая версия ОС с bash дает вам результат. Таким образом, вы можете получить свои обновления.
Тем не менее, без регулярного выражения вы можете использовать расширенное globbing
shopt -s extglob
case "$line" in
+([a-zA-Z]). ) echo "hello";;
esac