【问题标题】:Passing multiple variables not files to jq command将多个变量而不是文件传递给 jq 命令
【发布时间】:2017-12-07 11:09:17
【问题描述】:

我在 shell 脚本中有两个变量,每个变量都包含一个 JSON 数据。

我想使用命令合并这些

jq '.' $var1 $var2

在哪里echo $var1 => {"key1": "value1"}

echo $var2 => {"key2": "value2"}

但它不起作用,但是当我将这些变量的内容分别写入 file1 和 file2 时,它工作正常jq '.' file1.json file2.json 它完美地工作。 任何有关如何将多个变量传递给 jq 命令的帮助将不胜感激。

【问题讨论】:

  • 发布您的$var1 $var2 内容
  • 如果您想合并这两个变量,为什么不简单地使用echo "$var1$var2"
  • jq --argjson var1 "$var1" --argjson var2 "$var2" -n '$var1 + $var2'

标签: json shell jq


【解决方案1】:

如果你所说的“合并”是指 jq 的add,那么你可以简单地写:

jq -n "$var1 + $var2"

更一般地说,如果您的 jq 支持 --argson 命令行选项,那么您可以使用它;否则,您可以使用 --arg 但需要小心进行任何所需的转换。在这两种情况下,您可能还想使用 -n 命令行选项。

如果您使用的是 bash 等 shell,则另一组选项基于进程替换,例如

jq -s add <(echo "$var1") <(echo "$var2")

如果您的 echo 不合适,您可以使用其他替代方法(例如 printf)。

如果进程替换是多余的,那么正如@chepner 指出的那样,另一个选择就是简单地使用“$var1 $var2”,例如

jq -s add "$var1 $var2"

最后,如果shell变量已经被导出(即,如果它们作为“环境”变量可用),那么你可以使用jq的env函数:env.var1 + env.var2

【讨论】:

  • 谢谢,我几乎尝试过这种方式,除了之前的语法正确。
  • jq -s add &lt;&lt;&lt; "$var1$var" 会更简单,并避免echo 处理反斜杠字符的任何潜在问题。
  • $var1$var2 在var1=true; var2=false 等情况下会给出意想不到的结果,但添加空格应该没问题。
猜你喜欢
  • 1970-01-01
  • 2018-04-16
  • 2018-02-09
  • 1970-01-01
  • 2017-11-30
  • 2017-02-22
相关资源
最近更新 更多