我做了一个正则表达式,只允许使用字母数字,点和破折号。
我制作了看起来正常的正则表达式^[a-zA-Z0-9\-.]+$
:https://regex101.com/r/9Zrcsp/1
但是,如果我尝试在bash脚本中使用它,则突然无法正常工作。
#!/bin/bash
STR="test"
REGEX="^[a-zA-Z0-9\-.]+$"
if [[ "$STR" =~ $REGEX ]]; then
echo "OK"
else
echo "NOK"
fi
每次NOK
都应该返回OK
。
我在这里做错了什么?
答案 0 :(得分:2)
尽可能小的更改只是将_
移动到末尾,因此将其视为文字,而不是使用-
和{{ 1}}:
\
也就是说,.
是不可靠的,不应使用(其行为会根据当前语言环境而变化)。改用字符类:
REGEX="^[a-zA-Z0-9.-]+$"
...类似,a-zA-Z
与REGEX='^[[:alnum:].-]+$'
相比更可靠,而[[:upper:]]
是[A-Z]
的更可靠替代。