Bash регулярное выражение Гоча

У меня есть небольшая проблема, которую я действительно не могу понять:

bash -c 'if [[ "hello" =~ ^[a-zA-Z0-9]\{1,\}\\.$ ]] ; then echo "OK" ; else echo "KO" ; fi

Я думаю, что это должно дать мне KO, и это дает мне ОК... Я хотел бы сопоставить вещи по крайней мере с 1 символом и заканчивая точкой...

Я наконец заметил, что он работает с версией bash 4.1.5, а не с версией 3.2.25

Как мне поступить с этой версией?

РЕДАКТИРОВАТЬ:

Я нашел обходной путь, который работает, но я не знаю, почему мне пришлось заключить экранированную точку в скобки:

bash -c 'if [[ "hello" =~ ^[a-zA-Z0-9]{1,}[\.]$ ]] ; then echo "OK" ; else echo "KO" ; fi'

2 ответа

Вы не избежали точки, поэтому она используется в качестве символа подстановки и соответствует любому символу. Заменить . с \. Кроме того, вместо {1,}использовать +потому что они эквивалентны.

. является особенным в регулярных выражениях ("соответствовать любым символам"). Побег как \.

Другие вопросы по тегам