【发布时间】:2017-08-01 23:20:26
【问题描述】:
Here 我找到了测试变量是否为数字的好方法:
case $string in
''|*[!0-9]*) echo bad ;;
*) echo good ;;
esac
我正在尝试对其进行修改以测试变量是 1、2、3 还是 4 位自然数(在 0-9999 范围内),所以我添加了 |*[0-9]{5,}* 以排除超过 5 位的数字,但下面的代码打印 good 用于大于 9999 的数字,例如1234567.
case $string in
''|*[!0-9]*|*[0-9]{5,}*) echo bad ;;
*) echo good ;;
esac
我正在使用busybox中的ash。
【问题讨论】:
-
我把正则表达式和shell模式混在一起了。根据 ash man 文档: 模式由匹配自身的普通字符和元字符组成。元字符是“!”、“*”、“?”和“[”。如果引用这些字符,它们就会失去其特殊含义。 所以
{5,}*无法识别。
标签: regex linux shell numbers ash