如何在 case 语句中匹配美国 phone 数字模式

How to match a US phone number pattern in a case statement

所以我只想特别匹配该格式:xxxxxxxxxx

目前我有:

case $num in
 [0-9]{10}) echo "$num"   ;;
         *) echo "no num" ;;
esac

但不幸的是,它不起作用,我根本找不到原因。 这种模式匹配有什么问题?

谢谢

它不起作用,因为 case 支持 glob 模式匹配并且 [0-9]{10} 是正则表达式。

您需要在 if 中使用 =~ 运算符才能使用正则表达式:

if [[ $num =~ ^[0-9]{10}$ ]]; then
   echo "$num"
else
   echo "no num"
fi
num=1234567890

case $num in
  [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]) echo "$num" ;;
  *) echo "no num" ;;
esac

输出:

1234567890