提问人:Matias Barrios 提问时间:11/16/2023 更新时间:11/16/2023 访问量:39
JQ - 收集项目数量并在 IF 语句中使用结果
JQ - Collect the amount of items and use the result in an IF sentence
问:
我在 JQ 中有一个表达式,如下所示:
[{ "names": .products[] | .name }] | length > 200 as $qty | if ($qty) then "ok" else "not ok" end
我假装在“qty”中保存一个布尔值。确实如此。但是当我添加 如果我没有得到语法错误,但我得到布尔值作为结果,而不是“ok”或“not ok”。
我做错了什么?
另外,如果我这样做:
( [{ "names": .products[] | .name }] | length > 200 ) as $qty | if ($qty) then "ok" else "not ok" end
为了提高表达式的可读性,我收到一个语法错误,告诉我有一个“意外的)符号”
答:
1赞
knittl
11/16/2023
#1
立即再次读取的变量不会给您带来任何好处。只需直接使用该值:
[{ names: .products[] | .name }]
| length > 200
| if (.) then "ok" else "not ok" end
或者也许更具表现力:
[{ names: .products[] | .name }]
| if (length > 200) then "ok" else "not ok" end
由于将值包装在对象中不会更改输出,因此可以将其简化为以下两种之一:
.products | if (length > 200) then "ok" else "not ok" end
if(.products | length > 200) then "ok" else "not ok" end
您可能还对 jq 的 -e
标志感兴趣,该标志根据过滤器的结果设置退出代码:
如果最后一个输出值既不是也不是,则将 jq 的退出状态设置为 0,如果最后一个输出值为 false 或 null,则为 1,如果从未生成有效结果,则为 4。通常,如果存在任何使用问题或系统错误,jq 会退出 2,如果存在 jq 程序编译错误,则退出 3,如果 jq 程序运行,则退出 0。
false
null
评论
"ok"
"not ok"
(…) as $var