В общем, имена переменных среды с точками в них разрешены на техническом уровне, но не поддерживаются ни в каком контексте, и я бы выбрал другое имя.
В Docker Compose, похоже, что регулярные выражения, используемые для определения расширений переменных, поддерживают только буквы, цифры и символы подчеркивания ASCII. Это говорит о том, что точки в именах переменных среды не поддерживаются, и их невозможно избежать.
Я думаю, что переменные с точками в них также не поддерживаются в сценариях оболочки, но мне трудно это доказать. Я читал POSIX spe c. A Имя также состоит только из букв ASCII, цифр и знаков подчеркивания; параметры либо имеют имя, номер или единственный символ; а переменные - параметры с именами; но ни в одном формальном описании этого не говорится, что «имя» - это Имя.
Одна простая вещь, которую можно продемонстрировать, - это запуск оболочки bash
в образе ubuntu
Docker. Мы можем использовать параметр docker run -e
для установки произвольных переменных среды (которые не содержат =
), но мы не можем использовать какие-либо функции оболочки для расширения переменных точками:
host$ docker run --rm -it -e foo=A -e foo.bar=B ubuntu
# Demonstrate the environment variable is set:
root@227bec28c674:/# env | grep foo
foo.bar=B
foo=A
# It won't get expanded without braces:
root@227bec28c674:/# echo $foo.bar
A.bar
# With braces, it's considered illegal syntax:
root@227bec28c674:/# echo ${foo.bar}
bash: ${foo.bar}: bad substitution