第二次更新
抱歉大家,我没有意识到Makefile变量和环境变量之间的区别。
在下面的例子中,我说的 .env 文件看起来像
ENV_VAR = {"example": "multi\nline\n"}
但实际上我使用的例子是
ENV_VAR = '{"example": "multi\nline\n"}'
似乎这里的单引号包装很重要(我以为它们只是被剥离了)。如果没有单引号,@william purcell 的以下答案就可以解决问题
printf '%s\n' '$(MAKE_VAR)' > example.json
但是,对于引号,我看到的最佳解决方案是按照@Barmar 和@Christopher Wrogg 建议的那样\
在每个引号前面添加附加内容。\n
更新以包含 makefile 的使用
我将一个包含多行字符串的 json 对象存储为环境变量,并在 Makefile 中使用
(.环境)
ENV_VAR = {"example": "multi\nline\n"}
(Makefile)
include .env
export
job:
echo ${ENV_VAR} > example.json
我需要将此环境变量打印到文件中,创建一个有效的 json 文件 example.json
但上述命令最终导致 JSON 损坏
{"example": "multi
line
"}
命令也同样如此printf
。
我可以使用什么命令将这个多行环境变量作为单行打印到文件中?
期望的最终结果:
{"example": "multi\nline\n"}
谢谢
对于类似这样的dockerfile:
类似于:
可以。默认情况下
-c
,只会禁用漂亮的打印jq
。编辑:
使用 Makefile 变量来实现这一点:
.env
Makefile
在您描述的问题中,没有多行字符串,也没有环境变量。在给定的示例中,
\n
make 变量中的 (其名称令人困惑ENV_VAR
)被您的 特定实现替换为换行符echo
。如果您停止使用echo
,问题就会消失:转义反斜杠
.env
并在 makefile 中替换变量时引用该变量