Helm3中{{ ... }}与{{- ... -}}两种模板语法的区别是什么
你提到的两种语法都是Go模板引擎的空白控制语法,也是Helm模板中最常用的基础语法,二者的核心差异和适用场景如下:
核心差异
- 普通
{{ }}:仅渲染包裹的表达式内容,不会主动清理表达式前后的空格、换行、制表符等空白字符,渲染后会保留模板中原有的空白。 - 带减号的
{{- 表达式 -}}:减号对应方向的空白会被自动清理:- 开头加
-(即{{-):清理表达式左侧所有连续空白 - 结尾加
-(即-}}):清理表达式右侧所有连续空白 - 也支持仅单侧加减号,比如
{{- 表达式 }}只清左侧空白,{{ 表达式 -}}只清右侧空白
- 开头加
我们可以用一个简单示例直观感受差异:
假设模板内容如下,变量.Name值为张三,.Age值为20:
名字: {{ .Name }} 年龄: {{- .Age }}
最终渲染结果为:
名字: 张三 年龄:20
可以看到{{- .Age }}的左侧减号,把年龄:后面原本的空格清理掉了。
适用场景
- 普通
{{ }}适用于需要保留表达式前后空白的场景,最常见的就是普通配置值的填充:比如你给出的示例中example: {{ .Values.example.example }},用普通语法可以保留example:后面的空格,渲染后刚好符合YAML键值对的格式要求,不需要额外调整。 - 带减号的
{{- -}}主要用来解决模板渲染后产生多余空行、缩进错误的问题,多用于控制语句(if/with/range等)、模板引用、格式转换函数的场景:- 示例中的
{{- if .Values.serviceAccount.create -}}两侧加了减号,是为了避免if判断语句本身在渲染后留下多余的空行,最终生成的YAML不会出现大量无意义的空行。 - 示例中的
{{- include "alma.labels" . | nindent 4 }}左侧加了减号,是因为nindent 4函数会自动在输出内容前加换行和4个空格的缩进,左侧减号会清掉模板里当前行原有的缩进,避免输出的内容出现双重缩进导致YAML格式错误。
- 示例中的
需要注意使用带减号的语法时,不要误清理掉格式需要的空白,比如YAML键值对冒号后需要保留空格的场景,就不要在表达式左侧加-,避免渲染后出现key:value这类不符合YAML规范的内容。
内容的提问来源于stack exchange,提问作者Numichi
相关产品推荐
相关产品推荐

