首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jq:为什么产生相同输出的两个表达式在被数组操作符包围时会产生不同的输出?

jq:为什么产生相同输出的两个表达式在被数组操作符包围时会产生不同的输出?
EN

Stack Overflow用户
提问于 2022-04-26 19:30:55
回答 1查看 46关注 0票数 0

我一直在试着理解jq,下面的迷思让我头疼:我可以构造两个表达式,AB,它们似乎产生相同的输出。然而,当我用[]数组构造大括号(如[A][B])包围它们时,它们会产生不同的输出。在这种情况下,表达式如下:

代码语言:javascript
运行
复制
A := jq  '. | add'
B := jq -s `.[] | add`

具体而言:

代码语言:javascript
运行
复制
$ echo '[1,2] [3,4]' | jq  '.'
[1,2]
[3,4]
$ echo '[1,2] [3,4]' | jq  '. | add'
3
7
# Now surround with array construction and we get two values:
$ echo '[1,2] [3,4]' | jq '[. | add]'
[3]
[7]

$ echo '[1,2] [3,4]' | jq -s '.[]'
[1,2]
[3,4]
$ echo '[1,2] [3,4]' | jq -s '.[] | add'
3
7
# Now surround with array construction and we get only one value:
$ echo '[1,2] [3,4]' | jq -s '[.[] | add]'
[3,7]

这里发生什么事情?为什么应用B设置但似乎产生与A表达式相同的中间输出的--slurp表达式在被[]数组构造括号包围时产生不同的输出?

EN

回答 1

Stack Overflow用户

发布于 2022-04-26 19:44:55

jq被输入一个流时,就像两个输入的[1,2] [3,4]一样,它对每个流独立地执行过滤器。这就是为什么jq '[. | add]'将产生两个结果;每个添加将分别包装到一个数组中。

jq被赋予--slurp选项时,它将流组合到一个数组中,只提供一个输入。因此,jq -s '[.[] | add]'将只有一个结果;数组构造函数将捕获多个加法,只执行一次。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72019546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档