Debian 提供了一种使用命令来比较 Debian 兼容版本的方法,dpkg
如下所示:
dpkg --compare-versions <version> <operator> <version>
例如,如果你想知道给定的版本是否在 1.0 之前,那么你可以使用:
# gather VERSION from somewhere...
VERSION=0.9
if dpkg --compare-versions "${VERSION}" lt 1.0
then
echo "unacceptable version as per policy"
exit 1
fi
基于 RPM(RedHat/Fedora)系统下的等效命令是什么?
答案1
$ rpm --eval "%{lua:print(rpm.vercmp('1.2-1', '2.0-1'))}"
-1
(rpm >= 4.7.0 仅比较零件,不完整的 Epoch:Version-Release 字符串)
对于 OpenSUSE,还有zypper vcmp
:
$ zypper vcmp 0.9.5+git20190908+3abfab2-150300.7.5.1 0.9.5~git20210406.e554475-150400.3.5.1
0.9.5+git20190908+3abfab2-150300.7.5.1 is newer than 0.9.5~git20210406.e554475-150400.3.5.1
答案2
rpmdev-vercmp
from rpmdevtools
package 提供了类似的功能,但不支持指定运算符,如果版本相等则返回 0,如果 version1 较新则返回 11,如果 version2 较新则返回 12。
$ rpmdev-vercmp 1.12 1.13
1.12 < 1.13
$ echo $?
12
您还可以在 Fedora 中安装 dpkg,它在默认存储库中可用。但仅仅为了版本比较而安装 dpkg 可能有点太多了。