如何在bash中使用regexp验证版本号是否有效?
我试图验证版本号是否与版本模式匹配,但由于某种奇怪的原因,检查似乎失败了如何在bash中使用regexp验证版本号是否有效?,regex,bash,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 #/bi
#!/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
#/bin/bash
VERSION=“1.2.3”
如果[[$VERSION=~^(\d+\)?(\d+\)?(\*\124;\ d+$]);然后
echo“信息:版本$Version”
其他的
echo“错误:无法验证包版本:“$version”
出口1
fi
您应该在Bash中使用[0-9]
或[:digit:]]
而不是\d
(因为Bash不支持这个速记字符类),我建议在a的帮助下缩短模式,并将模式放入变量中:
#!/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
#/bin/bash
VERSION=“1.2.3”
rx=“^([0-9]+\){0,2}(\*|[0-9]+)$”
如果[[$VERSION=~$rx]];然后
echo“信息:版本$Version”
其他的
echo“错误:无法验证包版本:“$version”
出口1
fi
见
([0-9]+\.{0,2}
部分匹配1个或多个数字,后跟文字点0、1或2次。只需将\d
替换为[0-9]
。是否确实要允许匹配*
字符串?您还可以使用^([0-9]+\){0,2}(\*\[0-9]+)$
,这是shorter@WiktorStribi你为什么这么说<代码>\d和[0-9]
完全相同@Shafizadeh我不确定bash是否支持\d
@Thomas Oh。。这就是重点。。好的,tnxbash使用posix字符类:如果您还想匹配后缀,比如1.2.3-dev
(semver“允许”这些后缀)rx='^([0-9]+\){2,2}(\*.[0-9]+)(\-.{0,1}$'
@MichaelLihs,或者是相同模式的一个更干净的版本,rx='^([0-9]+\.+-.[-.-.-.-.-.-.-.-.[0-1249]+++-.-.-.-.-.-.[[0]+]