Чтобы иметь двойные кавычки в команде 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