Bash 测试字符串是否只包含空格和非字母数字字符

Bash 测试字符串是否只包含空格和非字母数字字符,bash,Bash,我尝试了以下解决方案 if !(($str =~ ^.*[a-zA-Z0-9].*$)); then continue; fi 语法似乎有问题。您的正则表达式和语法都不正确。您根本不需要使用regex,只需要glob即可: checkStr() { [[ $1 != *[a-zA-Z0-9]* ]] } 如果在输入中找到一个字母数字,则返回false。否则将返回true 测试它: $> if checkStr 'abc'; then echo "true case" e

我尝试了以下解决方案

if !(($str =~ ^.*[a-zA-Z0-9].*$)); then
  continue;
fi

语法似乎有问题。

您的正则表达式和语法都不正确。您根本不需要使用regex,只需要glob即可:

checkStr() {
   [[ $1 != *[a-zA-Z0-9]* ]]
}
如果在输入中找到一个字母数字,则返回
false
。否则将返回
true

测试它:

$> if checkStr 'abc'; then
   echo "true case"
else
   echo "false case"
fi    
false case

$> if checkStr '=:() '; then
   echo "true case"
else
   echo "false case"
fi
true case

$> if checkStr '=:(x) '; then
   echo "true case"
else
   echo "false case"
fi
false case
您可以使用character类。我用
^
否定:

if [[ "${str}" =~ ^[^[:alnum:]]$ ]] ; then
    echo "yes"
fi

如果字符串匹配零个或多个空格和零个或多个非字母数字字符,我需要返回True的表达式。如果至少有一个字母数字字符,则应返回False。那是因为我找到了相反的结果,然后用@xralf
=操作符就是这样做的,除非你脑子里有一组特定的非字母数字字符。@anubhava你提供的例子正是我所想的。