消除模式匹配中的 ^ 和 $

消除模式匹配中的 ^ 和 $

我使用以下regex condition, 和^$表示给定模式的开始和结束。

if [[ "$1" =~ ^[[:digit:]]+$ ]]; then

我也写了等效的glob condition

if [[ "$1" == ^+([[:digit:]])$ ]]; then

因为我看到有些人不使用^$,消除它们的原因是什么?

答案1

第二个表达式与整数不匹配。你尝试过吗?

word=123
if [[ "$word" == ^+([[:digit:]])$ ]]; then echo yes; else echo no; fi

输出

no

这是因为对于 shell glob,==需要整个模式来匹配字符串,因此^$不是必需的。让我们再试一次,首先使用文字^$围绕值:

word='^123$'
if [[ "$word" == ^+([[:digit:]])$ ]]; then echo yes; else echo no; fi

输出

yes

现在没有任何地方提到^$

word=123
if [[ "$word" == +([[:digit:]]) ]]; then echo yes; else echo no; fi

输出

yes

为了确定起见,让我们检查几个字符串:

for word in 123 a123 123b 12c3
do
    if [[ "$word" == +([[:digit:]]) ]]
    then
        match=yes
    else
        match=no
    fi
    printf "%s:\t%s\n" "$word" "$match"
done

输出

123:    yes
a123:   no
123b:   no
12c3:   no

相关内容