例如,Symfony 的configuration-environment-variables-in-env-files 檔案提供了示例:
DATABASE_URL="mysql://db_user:[email protected]:3306/db_name"
DB_USER=root
為什么第一個示例使用引號(又名括號)而不是第二個示例?
如果適用的答案取決于決議 .env 檔案的應用程式,請基于 Symfony。
uj5u.com熱心網友回復:
TL;DR 解決方案:當字串包含空格或某些特殊字符和某些語法時使用引號。這些包括:
空格和其他空格,
反斜杠(轉義空格和換行符 -
\即使在未參考的字串中也給出空格),引號(但您可以組合多個引號
mark\ 'styles like'"this"),標記注釋開始的井號 (
#)(如果它不在引號字串或 中$(…)),美元符號(用于擴展變數 - 見下文),
括號 (
(和)) – 取決于背景關系,shell 重定向字符(
>,<,2>,|等),星號 (
*) 和問號 (?),因為它用于 glob,方括號(因為它們列出了字符),
逗號分隔的文本
{…}(因為它提供了多種文本變體 -{foo,bar}baz擴展為foobaz barbaz),也許其他人,
當然,換行符。
.env根據您鏈接的頁面,檔案是常規bash腳本。這意味著:
一個字串不能包含多個單詞(空格分隔的部分),除非用引號引起來。1
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”.可以執行 Shell 命令來生成字串。2
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.
1 在另一種情況下,它將使用給定變數將第二個和所有后續“單詞”作為 shell 命令運行。請參閱bash(1)手冊頁。
2 根據檔案,Microsoft Windows 不支持它。它沒有說明 Windows 上的變數擴展語法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/448587.html
