Как объединить JQ с переменными? - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть объект json, который я читаю с помощью jq и пытаюсь написать некоторые свойства с локальными переменными.

Я устанавливаю локальную переменную в моем сценарии оболочки следующим образом:

LOCATION_NAME="stag5"
DOMAIN_LOCATION="example.io"

Затем я создаю следующую переменную:


echo "Build New ID"

DOMAIN_NAME_BUILT="$LOCATION_NAME.$DOMAIN_LOCATION.s3-website.us-east-2.amazonaws.com"


Я пытаюсь прочитатьmy distconfig.json file и установите свойства с помощью указанных выше переменных.

tmp=$(mktemp)
jq '.Origins.Items[0].DomainName = "$DOMAIN_NAME_BUILT"' distconfig.json > "$tmp" && mv "$tmp" distconfig.json

Команда работает, но она передает переменную в виде строки в мой новый файл JSON.Поэтому, когда я просматриваю свойство в новом созданном файле json, оно сохраняется как "$DOMAIN_NAME_BUILT" вместо stag5.example.io.s3-website.us-east-2.amazonaws.com

Как можно вместо передачи строки передать переменную для $ DOMAIN_NAME_BUILT и записать ее вновый файл json

1 Ответ

2 голосов
/ 20 апреля 2019

Используйте параметр --argjson вместо интерполяции параметров.

jq --argjson dnb "$DOMAIN_NAME_BUILT" \
    '.Origins.Items[0].DomainName = $dnb' distconfig.json > "$tmp" &&
  mv "$tmp" distconfig.json

(Ваша непосредственная проблема заключается в том, что расширение параметра не происходит внутри одинарных кавычек, но создание статического фильтра, который принимает аргумент, безопаснеечем динамическое построение фильтра.)

...