如何将多个args传递给jq?

use*_*969 -1 shell json jq

我正在尝试编写一个新的 json 文件。我想定义多个变量,然后通过管道将它们设置为新 json 文件中的不同属性。

jq --arg dnb "$DOMAIN_NAME_BUILT" --arg origin "$DOMAIN_ID_BUILT" \ 
   '.Origins.Items[0].DomainName = $dnb' | '.Origins.Items[0].Id = $origin' distconfig.json > "$tmp" && mv "$tmp" distconfig.json
Run Code Online (Sandbox Code Playgroud)

这仅适用于一个变量:--arg NAME VALUE 模式,但是当我添加第二个 arg 并使用管道时,jq ... 'x1 = y1 | x2 = y2, e.g.它会中断。

ogu*_*ail 8

管道应在过滤器内。并且,考虑使用赋值运算符来缩短您的代码:

jq --arg dnb "$DOMAIN_NAME_BUILT" \
   --arg origin "$DOMAIN_ID_BUILT" \
   '.Origins.Items[0] |= ( .DomainName = $dnb | .Id = $origin )' \
distconfig.json > "$tmp" && mv "$tmp" distconfig.json
Run Code Online (Sandbox Code Playgroud)

  • @msoutico 是的。在这种情况下,您应该使用“.[$foo]”而不是“.DomainName”。 (2认同)