如何在 OPAM 中列出当前包版本?

How to list current package versions in OPAM?

opam list -a 列出 OPAM 当前可用的所有包,但不显示当前未安装的包的版本号,根据 opam list --help 输出:

(...) the output format displays one package per line, and each line contains the name of the package, the installed version or -- if the package is not installed, (...)

如何列出所有软件包及其版本号?

使用opam info <packagename>

我猜 opam list 由于包的依赖关系,只打印已安装包的版本。列出最新版本的软件包,例如,尚未安装的软件包并不是很有用。

这不是一个理想的解决方案,但根据 camlspotter 的建议,我使用以下 shell 循环手动查询每个包的 version 字段:

for p in $(opam list -a -s); do echo "$p $(opam show -f version $p)"; done

它有效,但在我的机器上需要大约 85 秒才能完成(查询当前可用的 1000 多个包)。

anol 答案的精炼(和更快)版本是一次性将整个包列表提供给 opam show(要求 opam 输出 packageversion 字段),并使用 sed 处理结果,显然 show 输出每个字段在其自己的行上:

opam show -f package,version $(opam list -a -s) \
 | sed -e '/ *package:/N; s/ *package: \([^\n]*\)\n *version: \([^\n]*\)/: /'