如何将含换行符的环境变量保存至.env文件?
环境变量转义保存到.env文件的解决方案
单个变量转义处理
如果要将单个带换行/回车的环境变量转成key=值\n转义的格式,可直接用printf配合sed完成:
# 示例:处理MY_VAR并写入文件 echo "MY_VAR=$(printf '%s' "$MY_VAR" | sed -e 's/\\/\\\\/g' -e 's/\n/\\n/g' -e 's/\r/\\r/g')" >> variables.env
这段命令会把变量值中的实际换行替换为\n,回车替换为\r,同时转义原有的反斜杠避免冲突。
批量处理所有环境变量(解决\r字符问题)
你的原脚本未处理\r字符,且通过tr -d '\n'删除换行再手动添加转义的方式逻辑冗余。以下是改进后的批量处理脚本:
# 先清空目标文件(避免重复写入) > variables.env # 用env -0以null分隔输出所有环境变量,避免换行干扰遍历 while IFS='=' read -r -d '' key value; do # 转义特殊字符:反斜杠→\\,换行→\n,回车→\r escaped_value=$(printf '%s' "$value" | sed -e 's/\\/\\\\/g' -e 's/\n/\\n/g' -e 's/\r/\\r/g') # 写入.env文件 echo "$key=$escaped_value" >> variables.env done < <(env -0)
脚本说明:
env -0:让env命令用null字符分隔每个环境变量条目,确保包含换行/回车的变量能被完整读取。IFS='=' read -r -d '' key value:以=为分隔符拆分变量名和值,-d ''表示以null字符作为行结束符,-r避免读取时转义反斜杠。sed命令:依次处理反斜杠、换行、回车的转义,保证输出格式符合.env文件的转义规范。
内容的提问来源于stack exchange,提问作者gitstackyflow
相关产品推荐
相关产品推荐

