如何检查变量是否包含纯 bash以外的字符(正则表达式) ?0-9a-z
-
我需要有条件的检查。如果字符串包含除了上面接受的字符以外的字符exit 1
。
一种方法是使用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
case
支持匹配:
case "$string" in
(+(-[[:alnum:]-])) true ;;
(*) exit 1 ;;
esac
该格式不是纯正则表达式,但它的工作速度比单独的进程更快grep
- 如果您要进行多项检查,这一点很重要。
使用 Bash 的替换引擎测试 $foo 是否包含 $bar
bar='[^0-9a-z-]'
if [ -n "$foo" -a -z "${foo/*$bar*}" ] ; then
echo exit 1
fi