如果您希望JQ逃脱破折号,则需要在类似的方括号之间放置钥匙;
jq '.["key-key"]'
除此之外,如果您想在JQ中包含一个变量,则需要使用双引号而不是单引号;
jq "."${var[i+1]}""
但是我的变量在其中包含破折号,在这种情况下,我试图合并上面的两个示例,但它不起作用;
var=key-key
jq ".["${var[i+1]}"]."key""
我如何才能完成此工作?
更新:
这是最终脚本,我忘了提到;
declare -a var=(
"key-key"
"key2-key2"
"key3-key3"
)
for ((i=0; i<${#var[@]})); do
curl -s "url" | jq ".["${var}"]."something""
done
在您包含在双引号中的jq
命令中具有双重报价
jq ".["key-key"]"
最终命令的另一个问题是${var[i+1]}
扩展到空字符串,因为该语法用于索引数组的元素,并且您以前将var
定义为简单的字符串。
在jq
命令中使用变量的更好方法是通过--arg name value
选项定义它们,然后您可以在单引号包含的命令中使用$foo
参考它们::
jq --arg keyName key-key '.[$keyName]'
要修复更新中包含的代码,我将使用以下内容:
declare -a var=(
"key-key"
"key2-key2"
"key3-key3"
)
json=$(curl -s "url")
for searchedKey in "${var[@]}"; do
echo $json | jq --arg keyName $searchedKey '.[$keyName].something'
done