我想自动下载AdoptiumJDK的最新LTS。所以我找到了一个好的清单作为开始。
我只想过滤1.17的稳定版本,所以我尝试了:
curl -s https://raw.githubusercontent.com/coursier/jvm-index/master/index.json
| jq -r '.linux.amd64."jdk@adoptium-jre"
| to_entries[]
| .[]
| select(match("1.17.[0-9]+.[0-9]+$"))'
给出:
1.17.0.1 1.17.0.2 1.17.0.3 1.17.0.4
但我想要最新(最高数量(的版本,并且我想要此版本的URL。
curl -s https://raw.githubusercontent.com/coursier/jvm-index/master/index.json
| jq -r '.linux.amd64."jdk@adoptium-jre"
| to_entries[]
| .[]
| select(match("1.17.[0-9]+.[0-9]+$"))'
| sort -n
| tail -1
但这并不优雅,我必须通过bash解析这个输出并进行新的查找。
我如何获得当前最新版本1.17的URL(应该给出"tgz+https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4%2B8/OpenJDK17U-jre_x64_linux_hotspot_17.0.4_8.tar.gz"
(
您可以在应用正则表达式的过程中获取键/值对,而不是单独获取版本字段,然后对版本字段执行sort_by
。记住转义要作为文字处理的.
字符,或者使用startswith("1.17.")
.linux.amd64."jdk@adoptium-jre"
| to_entries
| map(select(.key | test("1\.17\.[0-9]+\.[0-9]+$")))
| sort_by(.key | split(".") | map(tonumber))
| last.value
这里的关键部分是sort_by
表达式,它告诉jq
将版本字段拆分为组成字符串,然后转换为数字,即map(tonumber)
,然后对其执行排序操作
通过该操作,列表[1, 17, 0, 4]
预计是其余记录中最高的。last
内建函数获取元素列表中的最后一条记录。
jqplay演示
尝试max_by
。
.linux.amd64."jdk@adoptium-jre"
| to_entries
| map(select(.key | startswith("1.17.")))
| max_by(.key)
| .value