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
等等
答案 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"