【发布时间】:2011-11-18 07:24:54
【问题描述】:
我无法在 bash 4.1 中使用正则表达式正确匹配模式。我已经阅读了一些关于引号与非引号差异的信息,但我认为这不是我的问题。
我的目标是检查并确保为脚本提供了有效的 ID。在这种情况下,一个有效的 ID 是一个 9 位数字的字符串。据我了解,它的正则表达式是 \d{9}。鉴于这是我要检查的代码 sn-p:
id=$1
if [[ $id =~ \d{9} ]]; then
echo "This is a vaild ID"
else
echo "This is not a vaild ID"
fi
然后调用脚本:
./script 987654321
我错过了什么明显的东西?
【问题讨论】:
-
您应该编辑您的问题以包括您认为它不起作用的原因。你得到其他陈述了吗?还是您遇到语法错误。祝你好运。
-
Bash(v3 及更高版本)中的正则表达式不支持
\d,您可以使用[0-9]或[:digit:]posix 字符类。 -
完全可移植的方式是使用 glob 模式,即
case $id in [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]) echo fine ;; *) die in anguish;; esac