如何比较两个软件包的版本号

如何比较两个软件包的版本号

我正在用 PHP 编写一个脚本,需要比较两个软件包版本数字来确定哪一个较新。

PHP 有一个方便的函数叫做version_compare(),但它很容易与一些比较有创意的版本号混淆。例如,version_compare()认为0.9.8g-16ubuntu3.1比 更新0.9.8o-1ubuntu4.4

有人知道我怎样才能让它工作吗?

我很高兴使用 运行任何命令行脚本exec()

答案1

看看dpkg --比较版本选项,它将允许您要求 dpkg 进行比较:)

dpkg --compare-versions 0.9.8g-16ubuntu3.1 lt 0.9.8o-1ubuntu4.4

将返回 0,这意味着0.9.8g-16ubuntu3.1小于0.9.8o-1ubuntu4.4

答案2

Debian 软件包版本号有其自己的、有点特殊的一套比较规则。

因此,您大致有三个选择。

  1. 阅读规范并自行实现。
  2. 查找适用于您的语言的现有实现。perl、python 和 rust 当然有选项,但我似乎找不到适用于 php 的选项。
  3. 运行 dpkg --compare-versions 作为外部程序,这很容易,但如果您需要批量执行此操作则效率低下。

另一种选择可能是使用 ffi 来调用进行比较的 C 库,但我很难找到要使用的 C 库。libdpkg 具有版本比较功能,但他们似乎希望版本已经分为 epoch、upstream 和 debian 版本。

相关内容