Bash正则表达式比较问题

时间:2016-10-30 16:42:14

标签: regex bash

我有以下功能

checkFormat()
{
        local funcUserName=$1
        if [[ "$funcUserName" != [a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9] ]];then
                echo "1"
        else
                echo "0"
        fi
}

if [[ $string != [a-zA-Z0-9]* ]]

如果第一个字符不是[a-zA-Z0-9],则仅返回true     if [[$ string!= [a-zA-Z0-9] {5}]]

永远不会返回true。

if [[ $string != [a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9] ]]

按我的意愿返回。 这是为什么?

代码是检查用户名是否长5个字符和字母数字,即 Joe12或12345但不是%$ 134。

bash版本4.2.37

1 个答案:

答案 0 :(得分:3)

我建议更换

if [[ $string != [a-zA-Z0-9]{5} ]]

通过

if [[ ! $string =~ ^[a-zA-Z0-9]{5}*$ ]]

匹配正则表达式。