Например, Документы Symfony configuring-environment-variables-in-env-files предоставляет примеры:
DATABASE_URL = "mysql://db_user:[email protected]:3306/db_name"
DB_USER=root
Почему в первом примере используются кавычки (круглые скобки), а не во втором?
Если применимый ответ зависит от приложения, анализирующего файл .env, используйте Symfony.
@siride Прежде чем публиковать этот вопрос, я просмотрел несколько документов, и у меня сложилось впечатление, что он может быть основан на приложении. Если это просто linux/unix, я сосредоточусь на этом. Спасибо за ваш комментарий.






TL; DR решение: Используйте кавычки, если строка содержит пробелы или определенные специальные символы и определенные синтаксисы. Это включает:
пробел и другие пробелы,
обратная косая черта (экранирует пробел и новую строку — \ дает пробел даже в строке без кавычек),
кавычки (но можно объединить несколько кавычек mark\ 'styles like'"this"),
знак решетки (#), который отмечает начало комментария (если он не в строке кавычек или $(…)),
знак доллара (используется для расширения переменной — см. ниже),
скобки (( и )) – в зависимости от контекста,
символы перенаправления оболочки (>, <, 2>, | и т. д.),
звездочка (*) и вопросительный знак (?), поскольку они используются в глобах,
квадратные скобки (потому что они перечисляют символы),
текст, разделенный запятыми, в {…} (поскольку он предоставляет несколько вариантов текста — {foo,bar}baz расширяется до foobaz barbaz),
может другие,
и, конечно же, новая строка.
.env файлы, согласно страница, на которую вы ссылаетесь, являются обычными bash скриптами. Это означает, что:
Одна строка не может содержать несколько слов (части, разделенные пробелами), если только она не заключена в кавычки.¹
FOO_VAR='multiple words' # This works.
ANOTHER_VAR = "foo bar" # This works, too.
BAR_VAR=this does not work # Executes “does” with args
# “not work” and variable
# BAR_VAR=“this”.
Расширение переменной выполняется, если текст заключен в двойные кавычки или не заключен ни в какие кавычки.
my_var=42
VARIABLES = "foo ${my_var}" # Gives “foo 42”.
Команды оболочки могут быть выполнены для создания строк.²
CURRENT_DATE = "$(date)" # Executes “date” and uses its
# stdout as the value.
DO_NOT_DO_THIS=$(date) # First expands the command, and we
# then get multiple unquoted words.
AVOID_THIS = "`date`" # Non-standard syntax, accepted by bash.
¹ В другом случае он будет запускать второе и все последующие «слова» как команду оболочки с заданной переменной. См. bash(1) справочную страницу.
² Согласно документам, он не поддерживается в Microsoft Windows. Он ничего не говорит о синтаксисе расширения переменных в Windows.
Если ваш ответ не готов, не публикуй это. Люди могут просматривать только то, что они видят, а не то, что может быть там в конечном итоге.
Спасибо. Какие символы считаются специальными?
@ user1032531, см. правку. Правило простое: если это не одно слово, заключайте его в одинарные кавычки. Если вы хотите расширение переменной, всегда заключите ее в двойные кавычки.
В документации говорится, что файлы .env — это просто сценарии оболочки, то есть они используют синтаксис сценария оболочки. Если вам нужны более подробные сведения об этом, прочитайте учебные пособия или документацию для сценариев оболочки в Unix (или Windows, если вы используете Windows).