如何使用jq从Docker镜像标签列表中筛选非latest值
解决Docker标签数组筛选非"latest"值的jq问题
你用jq 'select(. != "latest")'没得到预期结果,是因为这个表达式是对整个数组对象做判断,数组本身不等于"latest",所以会返回完整数组。要筛选数组内的元素,得先遍历每个元素再判断:
常用解决方案
1. 提取单个非"latest"元素(直接输出字符串)
用.[]展开数组里的每个元素,再筛选:
echo '["latest", "SOME_SHA"]' | jq '.[] | select(. != "latest")'
执行后会直接输出:
"SOME_SHA"
2. 保留数组格式(支持多个非"latest"元素)
如果数组里有多个非latest标签,用map()函数遍历筛选,结果还是数组:
echo '["latest", "SOME_SHA", "v1.2.3"]' | jq 'map(select(. != "latest"))'
执行后输出:
[ "SOME_SHA", "v1.2.3" ]
3. 直接取第一个匹配的元素(确保唯一非latest时用)
如果确定数组里只有一个非latest值,用first()直接提取单个值:
echo '["latest", "SOME_SHA"]' | jq 'first(.[] | select(. != "latest"))'
执行后输出不带引号的字符串:
SOME_SHA
内容的提问来源于stack exchange,提问作者Bok
相关产品推荐
相关产品推荐

