String Bash测试正则表达式匹配,似乎总是返回OK甚至不匹配

String Bash测试正则表达式匹配,似乎总是返回OK甚至不匹配,string,bash,testing,expression,match,String,Bash,Testing,Expression,Match,我在bash下,尝试将短字符串与模式匹配: $[[ "ab" =~ "^a*" ]] $echo $? 0 好的,如我所料,但后来我改为“^b*”,我想这次不匹配: $[[ "ab" =~ "^b*" ]] $echo $? 0 奇怪的是,返回值仍然是“OK”。为什么,我哪里出错了? 谢谢。Regex^b*在开始时表示0或更多b,因此对于任何输入,它都会返回true 对于1个或多个匹配项,应使用+量词,并避免在bash中引用正则表达式,因为: [[ "ab" =~ ^a+ ]] &&

我在bash下,尝试将短字符串与模式匹配:

$[[ "ab" =~ "^a*" ]]
$echo $?
0
好的,如我所料,但后来我改为“^b*”,我想这次不匹配:

$[[ "ab" =~ "^b*" ]]
$echo $?
0
奇怪的是,返回值仍然是“OK”。为什么,我哪里出错了?
谢谢。

Regex
^b*
在开始时表示
0
或更多
b
,因此对于任何输入,它都会返回true

对于1个或多个匹配项,应使用
+
量词,并避免在bash中引用正则表达式,因为:

[[ "ab" =~ ^a+ ]] && echo 'ok' || echo 'no'
ok

[[ "ab" =~ ^b+ ]] && echo 'ok' || echo 'no'
no
同样,您也可以使用
^a
^a.*

此外,由于bash的正则表达式特别昂贵,我想说:

如果您需要检查字符串的第一个位置是否存在字符,并且因为这种测试必须针对变量进行:

将输出:
字符串“ab”以“a”开头
,但是

myVar="ab"

[ "$myVar" ] && [ -z "${myVar%%b*}" ] && echo "String '$myVar' begin with 'b'"
不会产生任何结果


另请参见:

^b*
表示开始时0个或更多的
b
,因此显然它将匹配任何输入。不要在RHS上使用双引号!
myVar="ab"

[ "$myVar" ] && [ -z "${myVar%%b*}" ] && echo "String '$myVar' begin with 'b'"