我使用以下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