Что касается немедленного выпуска: .key
работает с { "foo": "value" }
, но .100
не работает с { "100": "value" }
;синтаксис, на который вы полагаетесь, - сахар, доступный только для ограниченного набора ключей..["100"]
будет работать, но генерирование этого путем расширения переменных оболочки в строки, анализируемые как код, является хрупким (jq
не является побочным языком в текущих выпусках, но в языках, которые do поддерживают I/ O операции, такие замены могут быть использованы для инъекционных атак).Чтобы сделать все правильно, выведите свои переменные из кода и используйте их для поиска таким образом, чтобы не полагаться на то, что они содержат.
jq
эквивалентно -v var="$value"
в awk: --arg var "$value"
, используется следующим образом:
jq --arg pgid "$pgid" \
--arg tpogo "$tpogo" \
'.[$pgid].pogo = $tpogo'
Проверка этого с вашими данными:
json='{"0000000":{"pogo":"AJHVUYKJBOIHKNNLNM"},"7000000":{"pogo":"PPPVUYKJBOIHKNNLNM"}}'
pgid="0000000"
tpogo="XXXXXXX"
jq --arg pgid "$pgid" --arg tpogo "$tpogo" \
'.[$pgid].pogo = $tpogo' <<<"$json"
... выдает в качестве вывода:
{
"0000000": {
"pogo": "XXXXXXX"
},
"7000000": {
"pogo": "PPPVUYKJBOIHKNNLNM"
}
}