Импорт переменной в jq

Debian имеет 32-битную версию и поддерживает uefi

0
02.12.2019, 10:10
2 ответа

Вы используете $domain_nameв одинарных кавычках. Вот почему оболочка не расширяет переменную.

В этом случае, однако, я бы предложил сделать это немного по-другому:

jqпредоставляет безопасные способы импорта необработанных данных из оболочки:

jq '.mazda |= $ARGS.positional' file.json --args car{00..11}"$domain_name"

Это вставит ключ mazdaсо значениями, взятыми из списка, после --argsв командной строке. --argsи список значений должны быть последними в командной строке. Значения будут JSON -, закодированные как jq, если это необходимо. Обычно это лучше, чем пытаться создать правильный JSON самостоятельно из данных, которые могут поступать из внешних источников (, например, если данные, которые вы хотите вставить, содержат табуляцию, новую строку или двойные кавычки, jqправильно закодирует их как JSON. строки с--args).

Список создается с помощью раскрытия фигурных скобок. Предполагая, что вы используете bashвыпуск 4 или более позднюю, числа, сгенерированные {00..11}, будут должным образом заполнены нулями -.

Обратите внимание, что domain_nameне обязательно должна быть переменной среды, (экспортируемой ).

3
28.01.2020, 02:17

Я думаю, что ваша основная проблема заключается в том, что вы не используете переменную на входе для jq-, вы используете ее как вход на seq.

Тем не менее, комментарий @muru верен, а также указывает на вопрос «Есть ли способ напечатать значение внутри переменной в одинарной кавычке?»-который вы уже продемонстрировали, что знаете, как использовать :вы использовали его при экранировании вывода seqв аргумент jq.

Но ваша проблема может быть решена гораздо проще, потому что на самом деле вам не нужно использовать одинарную кавычку в seqвводе :вы только думаете, что делаете это, потому что хотите использовать двойные кавычки в вводе входное значение,но вы можете легко избежать этих:

seq -s, -f "\"car%02.0f${domain_name}\"" 11
1
28.01.2020, 02:17

Теги

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