shell: =~ 运算符未按预期工作

shell: =~ 运算符未按预期工作

考虑以下脚本:

#! /bin/bash

line="confusing"

if [[ $line =~ [[:lower:]]* ]]
then
    echo "matches!"
else
    echo "does not match."
fi

虽然上面的代码产生了预期的结果,但以下代码却没有:

#! /bin/bash

line="CoNfUsInG"

if [[ $line =~ [[:lower:]]* ]]
then
    echo "matches!"
else
    echo "does not match."
fi

这会打印“匹配!”
我很困惑;正则表达式不是[[:lower:]]*意味着零个或多个小写字母吗?

当下面还打印“matches!”时,它会变得更加混乱。

#! /bin/bash

line="CoNfUsInG"

if [[ $line =~ [[:digit:]]* ]]
then
    echo "matches!"
else
    echo "does not match."
fi

有人能解释为什么会发生这种情况吗?

答案1

正则表达式不必匹配整个字符串。这就是为什么字符串开头和结尾分别有^和 的原因。$

[[ CoNfUsInG =~ ^[[:lower:]]*$ ]] || echo no

CoNfUsInGlY,^[[:lower:]]*(不带$)仍然匹配,因为字符串开头有零个小写字母。

相关内容