如何使用bash中的regexp验证版本号是否有效?

时间:2016-03-09 14:15:56

标签: regex bash

我正在尝试验证版本号是否与版本模式匹配,但似乎检查因某些奇怪的原因而失败。

#!/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

1 个答案:

答案 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

请参阅limiting quantifier

([0-9]+\.){0,2}部分匹配1位或更多位数后跟一个字面点0,1或2次。