2017-01-26 8 views
2

Я пытаюсь воссоздать this SO question, но с сохранением json в файле вместо передачи строки в командной строке. Вот что я делаю:Как передать переменную jq, когда json находится в файле?

$ cat test.json 
{"number":$number} 

$ jq --arg number 3000 test.json 
jq: error: test/0 is not defined at <top-level>, line 1: 
test.json 
jq: 1 compile error 

Что я делаю неправильно?

ответ

3

Как это:

# That's not json, it's a .jq file 
cat test.jq 
{"number":$number} 

jq -n --arg number 3000 -f test.jq 
{ 
    "number": "3000" 
} 

Btw, вышеизложенное пример дает вам "3000" как строка. Если вы хотите, чтобы это было число, которое вы должны использовать --argjson:

jq -n --argjson number 3000 -f test.jq 
{ 
    "number": 3000 
} 

или в виде строки

jq -n --argjson number '"3000"' -f test.jq 
{ 
    "number": "3000" 
} 
+1

Таким образом, правильный синтаксис, основанный на этом ответе, следующий: 'jq -n -arg number 3000 - f test.jq' (без прохождения env var) – shadi

+0

Я думал, что вы хотите использовать переменную. Во всяком случае, да, это правильная команда. – hek2mgl

1

Вам не нужно использовать jq здесь, если вы используете переменные окружения и заменить их envsubst, как это:

export number=3000 
envsubst < test.json 
+0

Примечание для доморощенного пользователей: Gettext формула «бочонок только». Если вы установили gettext, двоичный файл обычно будет находиться в каталоге, имеющем форму/usr/local/Cellar/gettext/VERSION/bin – peak