在执政官模板中,我想用将要扩展的新行传递一个ENV var,因此"hellonworld"
显示为:
hello
world
命令:VARIABLE="hellnworld" consul-template -template "in.tpl:out.txt" -once && cat out.txt
模板文件:{{ env "VARIABLE" }}
但是我得到
hellonworld
如果我调试模板,则显示n
已转义为\n
:
{{ env "VARIABLE" | spew_dump }}
"hello\nworld"
在consul-template
中
{{ env "VARIABLE" | replaceAll "\n" "n" }}
假定新行是golang双引号字符串文字中的C-Escapen
,则replaceAll
领事模板函数1随时可用(类似于env
),用U+000A换行(Nl)换行(lf)、换行(eol)、lf替换n
。
这是所讨论的spew_dump
所显示的格式。
请注意,这仅替换n
,而不是r
或其他转义序列。
外壳内(早期版本)
在像"hellonworld"
这样的双引号字符串中没有n
C-Escape,但printf(1)
有它——或者——如果你的shell支持它们,$''
字符串(bash,zsh/z-shell)。
与比较如何在sh中的字符串中使用换行符。
示例:
示例#1:$''
带引号的字符串
VARIABLE=$'hellonworld' consul-template -template "in.tpl:out.txt" -once && cat out.txt
示例2:printf(1)
VARIABLE="$(printf "hellonworld")" consul-template -template "in.tpl:out.txt" -once && cat out.txt
请注意,命令替换($(...)
)可能会删除后面的换行符。
- https://github.com/hashicorp/consul-template/blob/378ee4bf907cae0d41eebf6a854f5539a7de1987/template/funcs.go#L1173-L1177