如何在Makefile中保留\n将多行环境变量输出为单行JSON文件
问题描述
我将包含多行字符串的JSON对象存储为环境变量,并在Makefile中调用:
.env 文件内容
ENV_VAR = {"example": "multi\nline\n"}
Makefile 内容
include .env export job: echo ${ENV_VAR} > example.json
执行后生成的example.json是损坏的JSON,内容如下:
{"example": "multi line "}
使用printf命令也会出现同样问题。需要将该环境变量输出为单行的有效JSON,期望结果为:
{"example": "multi\nline\n"}
补充修正(第二次更新)
抱歉之前未区分Makefile变量与环境变量,且此前示例中的.env文件内容有误,实际使用的是:
ENV_VAR = '{"example": "multi\nline\n"}'
单引号的包裹至关重要(我原以为会被自动剥离)。
针对两种情况的解决方案:
- 无单引号包裹时,使用@william purcell的方案即可解决:
printf '%s\n' '$(MAKE_VAR)' > example.json
- 有单引号包裹时,最佳方案是按照@Barmar和@Christopher Wrogg的建议,在每个
\n前添加额外的\,修改后的.env文件内容如下:
ENV_VAR = '{"example": "multi\\nline\\n"}'
这样输出时就能保留\n转义符,生成符合要求的单行JSON文件。
内容的提问来源于stack exchange,提问作者l2silver
相关产品推荐
相关产品推荐

