这将起作用: if [[ $id =~ [[:digit:]]{9} ]] – David W. 11 小时前
@David 我在 bash 上尝试过,但似乎没有用。– Vivin Paliath 10 小时前
我刚刚写了一个测试程序:
#! /bin/bash
for id in 123456789 12345689 1234567890 987654321
do
if [[ $id =~ ^[[:digit:]]{9}$ ]]
then
echo "$id is 9 digits long"
else
echo "$id is bad"
fi
done
我得到以下输出:
DaveBook:~ david$ ./test.sh
123456789 is 9 digits long
12345689 is bad
1234567890 is bad
987654321 is 9 digits long
DaveBook:~ david$
我在 Mac OS X 上使用 BASH 3.2.48,在 Cygwin 上使用 Bash 4.1.10(4)(哇,Mac 版本这么旧?)。我还没有在 Linux 机器上测试过这个。
你用的是什么版本?你把方括号加倍了:digit:
吗?它必须是[[:digit:]]
而不是[:digit:]
。
我还意识到我需要^
and$
锚点,因为你不想匹配foo123456789bar
or 1234567890123456790
。这是您遇到的问题吗?
事情是[[:digit:]]
应该奏效的。我在许多 Bash shell 脚本中使用过它,认为它相当通用。但是,如果您的 BASH shell 无法正常工作,我将不得不停止使用它。