Вы используете $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
не обязательно должна быть переменной среды, (экспортируемой ).
Я думаю, что ваша основная проблема заключается в том, что вы не используете переменную на входе для jq
-, вы используете ее как вход на seq
.
Тем не менее, комментарий @muru верен, а также указывает на вопрос «Есть ли способ напечатать значение внутри переменной в одинарной кавычке?»-который вы уже продемонстрировали, что знаете, как использовать :вы использовали его при экранировании вывода seq
в аргумент jq
.
Но ваша проблема может быть решена гораздо проще, потому что на самом деле вам не нужно использовать одинарную кавычку в seq
вводе :вы только думаете, что делаете это, потому что хотите использовать двойные кавычки в вводе входное значение,но вы можете легко избежать этих:
seq -s, -f "\"car%02.0f${domain_name}\"" 11