如何在纯bash中检查变量是否包含(正则表达式) 其他而不是0-9a-z
和-
的字符?
我需要有条件的检查。如果字符串包含的字符不仅仅是上面接受的字符exit 1
。
答案 0 :(得分:3)
执行此操作的一种方法是使用grep
命令,如下所示:
grep -qv "[^0-9a-z-]" <<< $STRING
然后,您要求grep
返回的值包含以下内容:
if [ ! $? -eq 0 ]; then
echo "Wrong string"
exit 1
fi
正如@mpapis指出的那样,你可以将上面的表达式简化为:
grep -qv "[^0-9a-z-]" <<< $STRING || exit 1
您也可以使用bash =~
运算符,如下所示:
if [[ ! "$STRING" =~ [^0-9a-z-] ]] ; then
echo "Valid";
else
echo "Not valid";
fi
答案 1 :(得分:2)
case
支持匹配:
case "$string" in
(+(-[[:alnum:]-])) true ;;
(*) exit 1 ;;
esac
格式不是纯粹的正则表达式,但它的工作速度比使用grep
的单独进程更快 - 如果您要进行多次检查,这很重要。
答案 2 :(得分:0)
使用Bash的替换引擎测试$ foo是否包含$ bar
bar='[^0-9a-z-]'
if [ -n "$foo" -a -z "${foo/*$bar*}" ] ; then
echo exit 1
fi