考虑以下脚本:
#! /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:]]*
(不带$
)仍然匹配,因为字符串开头有零个小写字母。