Сначала прочитайте предупреждение. Это говорит о большей нагрузке на основной поток. Так что вам нужно просто запустить функции с большим количеством работы в потоке.
Программа jq .dev.projects."$v"
в вашем примере будет буквально пытаться найти ключ с именем "$v"
. Вместо этого попробуйте следующее:
jq --arg v "$PRJNAME" '.dev.projects[$v]' config.json
Как было сказано в комментарии выше, есть способ передать несколько аргументов. Возможно, есть более элегантный способ, но он работает.
jq --arg key1 $k1 --arg key2 $k2 --arg key3 $k3 --arg key4 $k4 '.[$key1] | .[$key2] | .[$key3] | .[$key4] '
jq --arg key $k ' if key != "" then .[$key] else . end'
jq --arg key $k ' if type == "array" then .[$key |tonumber] else .[$key] end'
, конечно, вы можете их комбинировать!
вы также можете использовать --argjson
, когда вы делаете свой json.
--arg a v set variable $a to value <v>;
--argjson a v set variable $a to JSON value <v>;
--arg
несколько раз, как в:jq --arg foo 1 --arg bar 2 -n '[$foo, $bar]'
– Noemi Lapresta 12 January 2016 в 16:58PRJNAME='.dev.projects.prj1' jq --arg v "$PRJNAME" '[$v]' config.json
. Конечно, этот код не работает - он преобразует arg в строку, окруженную квадратными скобками, поэтому я предполагаю, что ей не нравится точечная нотация ... – lane 17 January 2018 в 11:38