Когда нужны кавычки в файле .env?

Например, Документы Symfony configuring-environment-variables-in-env-files предоставляет примеры:

DATABASE_URL = "mysql://db_user:[email protected]:3306/db_name"
DB_USER=root

Почему в первом примере используются кавычки (круглые скобки), а не во втором?

Если применимый ответ зависит от приложения, анализирующего файл .env, используйте Symfony.

В документации говорится, что файлы .env — это просто сценарии оболочки, то есть они используют синтаксис сценария оболочки. Если вам нужны более подробные сведения об этом, прочитайте учебные пособия или документацию для сценариев оболочки в Unix (или Windows, если вы используете Windows).

siride 19.03.2022 15:05

@siride Прежде чем публиковать этот вопрос, я просмотрел несколько документов, и у меня сложилось впечатление, что он может быть основан на приложении. Если это просто linux/unix, я сосредоточусь на этом. Спасибо за ваш комментарий.

user1032531 19.03.2022 15:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
2
102
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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.

Если ваш ответ не готов, не публикуй это. Люди могут просматривать только то, что они видят, а не то, что может быть там в конечном итоге.

jonrsharpe 19.03.2022 15:07

Спасибо. Какие символы считаются специальными?

user1032531 19.03.2022 15:07

@ user1032531, см. правку. Правило простое: если это не одно слово, заключайте его в одинарные кавычки. Если вы хотите расширение переменной, всегда заключите ее в двойные кавычки.

jiwopene 19.03.2022 15:18

Другие вопросы по теме