我正在尝试验证版本号是否与版本模式匹配,但似乎检查因某些奇怪的原因而失败。
#!/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 :(得分:7)
你应该在Bash中使用[0-9]
或[[:digit:]]
而不是\d
(因为Bash不支持这个速记字符类),我建议在{的帮助下缩短模式{3}}并将模式放入变量:
#!/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
([0-9]+\.){0,2}
部分匹配1位或更多位数后跟一个字面点0,1或2次。