jq提取keypair的值并分配给bash变量

时间:2017-03-29 15:45:52

标签: json bash jq

jq有时会这样做。假设您有一个名为emails.json的json文件,如下所示;

[
  {
    "ParameterKey": "foo1",
    "ParameterValue": "bar1"
  },
  {
    "ParameterKey": "foo2",
    "ParameterValue": "bar2"
  }
]

如果我使用参数foo1运行我的bash脚本(让我们称之为script.sh),我想将bar1分配给名为emailAdd的变量。同样,如果我使用参数foo2,我想要分配bar2。

我认为我的脚本看起来如下,但我得到一个空变量。

#!/usr/bin/env bash

EMAIL=$1

emailAdd=$(jq --arg email "$EMAIL" '.[] | select(.ParameterKey=="$email") | .ParameterValue' < emails.json)

echo "address is " $emailAdd 

所以,运行sh script.sh foo1我希望address is bar1等等

1 个答案:

答案 0 :(得分:1)

你几乎是正确的。您不需要$email周围的引号,因为与shell不同,jq实际上将其视为包含值的变量,而不是扩展为任意文本的内容。您可能还想使用-r选项,以便输出为bar1,而不是"bar1"

#!/usr/bin/env bash

EMAIL=$1

emailAdd=$(jq -r --arg email "$EMAIL" '.[] | select(.ParameterKey==$email) | .ParameterValue' < emails.json)

echo "address is $emailAdd"