4

如何检查变量是否包含纯 bash以外的字符(正则表达式)0-9a-z-

我需要有条件的检查。如果字符串包含除了上面接受的字符以外的字符exit 1

4

3 回答 3

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
于 2013-11-08T02:31:53.837 回答
2

case支持匹配:

case "$string" in
  (+(-[[:alnum:]-])) true ;;
  (*) exit 1 ;;
esac

该格式不是纯正则表达式,但它的工作速度比单独的进程更快grep- 如果您要进行多项检查,这一点很重要。

于 2013-11-08T02:34:49.380 回答
0

使用 Bash 的替换引擎测试 $foo 是否包含 $bar

bar='[^0-9a-z-]'
if [ -n "$foo" -a -z "${foo/*$bar*}" ] ; then
  echo exit 1
fi
于 2014-01-03T17:55:10.497 回答