将多个变量而不是文件传递给jq命令

时间:2017-12-07 11:09:18

标签: json shell jq

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

我想使用命令

合并它们
jq '.' $var1 $var2

其中echo $var1 => {"key1": "value1"}

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

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

1 个答案:

答案 0 :(得分:1)

如果通过“合并”表示jq的add之类的东西,那么你可以简单地写一下:

jq -n "$var1 + $var2"

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

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

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

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

如果过程替换过度,那么另一个选项,就像@chepner所指出的那样,只是使用“$ var1 $ var2”,例如

jq -s add "$var1 $var2"

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