У меня есть скрипт, который использует Docker env vars для настройки файла json при запуске.Функция использует одну и ту же переменную ENV дважды в одной и той же команде JQ, и в первом месте целое число остается неизменным, а во второй строке JQ вычитает 13 (WTF?) Из числа.Кто-нибудь может объяснить это?И что более важно, как я могу предотвратить это.
Примечание: Чтобы конфигурация была действительной, второй экземпляр должен быть целым без кавычек.Тестирование показывает, что цитирование целого числа приводит к ожидаемому выводу, но неверной конфигурации.
Env Var
DISCORD_CHANNEL=448887356515418113
Функция Bash:
function updateDiscordConfig {
echo "Setting Discord configuration..."
jq ".discord |= . + {\"token\":\"${DISCORD_TOKEN}\"} | .discord.channels.channels |= . + {\"${DISCORD_CHANNEL}\": {}} | .minecraft.dimensions.generic |= . + {\"discordChannel\": [${DISCORD_CHANNEL}]}" ${DISCORD_SRCCONFIG} | sponge ${DISCORD_DESTCONFIG}
}
Выход:
// First output
"channels": {
"448887356515418113": {}
}
// Second output
"discordChannel": [
448887356515418100
],
Обновление : я заменил второе обновление экземпляра на строку с использованием sed:
function updateDiscordConfig {
echo "Setting Discord configuration..."
jq ".discord |= . + {\"token\":\"${DISCORD_TOKEN}\"} | .discord.channels.channels |= . + {\"${DISCORD_CHANNEL}\": {}}" ${DISCORD_SRCCONFIG} | sponge ${DISCORD_DESTCONFIG}
sed -i "/discordChannel/c\ \"discordChannel\" : [${DISCORD_CHANNEL}]," ${DISCORD_DESTCONFIG}
}