jq: ошибка: test1 / 0 не определен в, строка 1 - PullRequest
0 голосов
/ 07 декабря 2018

У меня ниже файл JSON и ошибка при попытке динамически добавлять значения в массив в оболочке.

Ниже приведен файл tmp.json,

{
  "environments": {
    "integration": [
      "testing for jenkins job"
    ],
    "prod": [],
    "staging": [],
    "uat": []
  }
}

Когда я пытаюсьдобавить значения в массив со статической переменной, он работает нормально.Ниже приведена команда: jq '.environments.integration + = ["test1"]' tmp.json

Соответствующий вывод:

{
  "environments": {
    "appbuild": [],
    "integration": [
      "testing for jenkins job",
      "test1"
    ],
    "prod": [],
    "staging": [],
    "uat": []
  }
 }

В то время как при попытке добавить значения динамически, он выдает ошибку.

export Environment_Name="integration"
jq ".environments."\"${Environment_Name}"\" += test1" tmp.json

Ошибка, которую я получаю,

jq: error: test1/0 is not defined at <top-level>, line 1:
.environments."integration" += test1
jq: 1 compile error

Может кто-нибудь, пожалуйста, помогите исправить это.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Использование интерполяции переменных на основе оболочки обычно является очень плохой идеей - в данном случае, что, если переменная оболочки, например, содержит двойные кавычки?Безопаснее всего использовать env или —arg или —argjson в зависимости от ситуации, например,

jq —-arg e "${Environment_Name}" '.environments[$e] += ["test1"]'
0 голосов
/ 07 декабря 2018

У вас есть несколько дополнительных кавычек, и test1 должно быть ["test1"]

jq ".environments.${Environment_Name} += [\"test1\"]" tmp.json

...