我正在尝试验证版本号是否与版本模式匹配,但似乎检查由于某些奇怪的原因而失败。
#!/bin/bash
VERSION="1.2.3"
if [[ $VERSION =~ ^(\d+\.)?(\d+\.)?(\*|\d+)$ ]]; then
echo "INFO:<-->Version $VERSION"
else
echo "ERROR:<->Unable to validate package version: '$VERSION'"
exit 1
fi
你应该使用[0-9]
or [[:digit:]]
在 Bash 中而不是\d
(因为 Bash 不支持这个速记字符类),我建议在限制量词 http://www.regular-expressions.info/repeat.html#limit并将模式放入变量中:
#!/bin/bash
VERSION="1.2.3"
rx='^([0-9]+\.){0,2}(\*|[0-9]+)$'
if [[ $VERSION =~ $rx ]]; then
echo "INFO:<-->Version $VERSION"
else
echo "ERROR:<->Unable to validate package version: '$VERSION'"
exit 1
fi
See the IDEONE演示 https://ideone.com/HaBgpA
The ([0-9]+\.){0,2}
parts 匹配 1 个或多个数字,后跟文字点 0、1 或 2 次。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)