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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:45:07