Во-первых, вам никогда не понадобится начальный .|
, так как .
здесь только фильтр "identity".
Во-вторых, важно различать переменные оболочки, с одной стороны, и jq $ -переменные.с другой.Если вы явно не связываете их вместе, они живут совершенно независимо.Как вы обнаружили, использование --arg MYVAR FOO
устанавливает переменную jq $MYVAR
в строку JSON "FOO"
;чтобы ссылаться на эту переменную, вы просто пишете $MYVAR
в программе jq.
Также можно инициализировать переменную jq, используя:
--arg MYVAR "${MYVAR}"
Это устанавливает для переменной jq значение (строку) переменной оболочки.
В-третьих,имена jq «$ -вариумов» сильно ограничены: за исключением начального «$», они должны соответствовать регулярному выражению: [a-zA-Z _] [a-zA-Z_0-9] *
Таким образомесли вашей реальной целью является изменение вхождений строки JSON "$ {FOO}" с помощью "BAR", где FOO должен быть задан программно, вам придется принять другую стратегию.Это будет работать:
echo '{ "name": "${FOO}" }' |
jq -c --arg MYVAR FOO --arg MYVALUE BAR '
if .name == "${\($MYVAR)}" then .name = $MYVALUE else . end'
Это приводит к: {"name": "BAR"}
См. Также раздел "Использование jq в качестве движка шаблонов" in JQ Кулинарная книга .