如何检查jq列表中是否存在完全匹配

问题描述 投票:0回答:1

我正在尝试在 Docker 注册表中查找与特定映像存储库匹配的标签。

curl -X GET http://my-registry-ip-address/v2/ancean-api/tags/list\

result: {"name":"ancean-api","tags":["v1.0.0","v19.0.0","v11.1.1"]}

如何检查上面结果输出的 json 数据中是否存在 v1.0.0(example) 标签?


我试过了

curl -X GET http://my-registry-ip-address/v2/ancean-api/tags/list | jq '.tags | select(. == v1.0.19)'

jq文档 jq文档尝试使用select但失败。 无论使用哪个标签,上面的命令都会成功。

curl -X GET http://my-registry-ip-address/v2/ancean-api/tags/list | jq '.tags | .[]' | grep "v1.0.0"

我尝试将其与 grep 一起使用但失败了。


问题解决了

通过pms的回答,我用

IN
功能解决了问题。

curl -X GET http://my-registry-ip-address/v2/ancean-api/tags/list | jq IN'(.tags[]; "v1.0.0")'

使用

IN
,当 json 数据中有特定值时,我能够获取 bool 值。 enter image description here

json shell jq whitelist
1个回答
2
投票

如果包含

tags
键的对象位于另一个对象的
default
键内(如示例所示,尽管缺少引号),则必须将其包含在路径中。

在那里,您可以使用

IN
function 来测试相关项目的包含性,这会产生一个布尔值:

IN(.default.tags[]; "v1.0.0")

此外,

--exit-status
(或
-e
flag可以根据结果设置退出状态。

© www.soinside.com 2019 - 2024. All rights reserved.