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)
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)