Выбрать оператор с переменной неработоспособной [дубликат]

Сначала прочитайте предупреждение. Это говорит о большей нагрузке на основной поток. Так что вам нужно просто запустить функции с большим количеством работы в потоке.

19
задан peak 12 January 2016 в 18:40
поделиться

3 ответа

Программа jq .dev.projects."$v" в вашем примере будет буквально пытаться найти ключ с именем "$v". Вместо этого попробуйте следующее:

jq --arg v "$PRJNAME" '.dev.projects[$v]' config.json 
22
ответ дан Noemi Lapresta 18 August 2018 в 05:10
поделиться
  • 1
    Что делать, если я хочу передать 2 или более параметров? Можете ли вы показать мне пример? – lisi4ok 12 January 2016 в 16:32
  • 2
    Вы можете передать несколько аргументов с помощью команды --arg несколько раз, как в: jq --arg foo 1 --arg bar 2 -n '[$foo, $bar]' – Noemi Lapresta 12 January 2016 в 16:58
  • 3
    Возможно ли передать несколько компонентов в arg? например PRJNAME='.dev.projects.prj1' jq --arg v "$PRJNAME" '[$v]' config.json . Конечно, этот код не работает - он преобразует arg в строку, окруженную квадратными скобками, поэтому я предполагаю, что ей не нравится точечная нотация ... – lane 17 January 2018 в 11:38

Как было сказано в комментарии выше, есть способ передать несколько аргументов. Возможно, есть более элегантный способ, но он работает.

  • Если вы уверены, что всегда все необходимые ключи, вы можете использовать это:
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'

, конечно, вы можете их комбинировать!

1
ответ дан LuWa 18 August 2018 в 05:10
поделиться

вы также можете использовать --argjson, когда вы делаете свой json.

--arg a v   set variable $a to value <v>;
--argjson a v   set variable $a to JSON value <v>;
2
ответ дан Manfred Radlwimmer 18 August 2018 в 05:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: