使用特殊字符导出 .env

Pet*_*ack 5 linux bash environment-variables

我正在使用set -o allexport; source .env; set +o allexport从 .env 文件中导出所有变量。不幸的是,一个变量包含)它导致语法错误的原因。上面的命令有解决方案吗?我知道可以在括号中设置它,但是 .env 是在没有括号的情况下自动生成的。

例如,Dotenv 看起来像这样:

username=test
password=*fdas_dfar+)mbn
Run Code Online (Sandbox Code Playgroud)

Kam*_*Cuk 6

source .env
Run Code Online (Sandbox Code Playgroud)

source是一个 shell 命令,该.env文件被解析为 shell 文件。您需要引用您的字符串,就像在 shell 中一样。

username=test
password='*fdas_dfar+)mbn'
Run Code Online (Sandbox Code Playgroud)

它有什么好处,您可以从这样的文件运行所有 shell 命令:

username=$(echo test)
password='*fdas_dfar+)mbn'
Run Code Online (Sandbox Code Playgroud)

或者您可以编写自己的解析器,例如:

while IFS='=' read -r name value; do
       if [ -z "$value" -o -z "$name" ]; then
           echo "Error - unparsable line!" >&2
           exit 1
       fi

       # add quotes around `'`
       value=$(<<<"$value" sed "s/'/'\''/g")
       
       # set the variable value using bash special builtin
       printf -v "$name" "%s" "$value"

 done <.env
Run Code Online (Sandbox Code Playgroud)