You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elixir中System.get_env读取含\n的环境变量出现额外反斜杠如何解决

问题原因

你遇到的不是System.get_env/1主动插入额外反斜杠的问题,根源在环境变量的写入环节:
使用单引号包裹内容导出环境变量时,Shell不会解析其中的\n转义序列,实际存入环境变量的是字面量的反斜杠+字符n两个字符。Elixir读取到的原始内容就是这两个字符,iex中显示为\\n只是Elixir的字符串默认转义展示规则,方便你区分字面反斜杠和实际转义字符,并非内容被额外修改。

解决方法

方案1:修改环境变量的导出逻辑(推荐)

直接在导出时让Shell把\n解析为真实换行符,后续读取就不需要额外处理:

  • 如果使用Bash/Zsh等支持ANSI-C引号的Shell,使用$'包裹内容即可自动解析转义序列:
export TEST_KEY=$'hello\nworld' && iex

此时在iex中读取的结果就是预期的带换行的字符串:

iex(1)> System.get_env("TEST_KEY")
"hello\nworld"
iex(2)> IO.puts(System.get_env("TEST_KEY"))
hello
world
:ok
  • 也可以直接在导出时输入真实换行:
export TEST_KEY="hello
world"

方案2:读取后手动解析转义序列

如果无法修改环境变量的导出逻辑,可以在Elixir中对读取到的字符串做转义还原:
如果只需要处理\n换行,直接替换即可:

test_key = System.get_env("TEST_KEY") |> String.replace("\\n", "\n")

如果需要处理\t、\r等更多常见转义序列,可以自行扩展替换规则,或者使用对应工具函数实现完整转义解析。


内容的提问来源于stack exchange,提问作者bosey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:06:04