我刚刚看到了一个使用将多个事物放入管道的示例(用于)。echo
jq
echo '{"A": {"a": 1}}' '{"A": {"b": 2}}' '{"B": 3}' |\
jq --slurp 'reduce .[] as $item ({}; . * $item)'
如果我理解正确的话,这似乎在一端将三个对象放入管道,在另一端jq
接收它们并将它们放入数组中,并使用合并运算符将其减少。
这让我很惊讶,我不确定如何在 中拥有多个东西stdin
。
更具体地说,系统如何知道输入是三个文件以及每个文件在哪里开始/结束?
如果我只执行回显部分echo '{"A":1}' '{"A": {"b": 2}}' '{"B": 3}'
,则输出似乎在三个对象之间没有任何可见的分隔符:
{"A":1} {"A": {"b": 2}} {"B": 3}
单引号是否有一些特殊效果,可以告诉下一个过滤器(jq
)边界?或者 jq 如何知道边界?
(这是 Ubuntu 24.04,jq 1.7.1)