诡异的 Yaml Multiline
YAML
多行字符串找到正确的语法,因为它太诡异了🤬🤬🤬
YAML 支持两种类型的字符串格式:块标量格式 和 流标量格式。 (标量是 YAML 所说的数字或字符串等基本值,而不是数组或对象等复杂类型。)块标量对它们的解释方式有更多的控制,而流标量的转义支持更有限。
块标量
块标量标头由三个部分组成。
块样式指示符
块样式指示符控制块内换行符的行为方式。
- 如果您希望将它们保留为换行符,请使用
字面样式
,由竖线 (|
) 指示。 - 如果您希望将它们替换为空格,请使用
折叠样式
,由右尖括号 (>
) 表示。
块咬合指示符
块咬合是指两个block区域衔接的位置。例如以下文件中同级的 Corefile1
块末尾和 Corefile2
块的开始区域属于咬合位置(注释部分)。
apiVersion: v1 kind: ConfigMap metadata: name: coredns namespace: kube-system data: Corefile1: | .:53 { errors health { lameduck 5s } } # -- 咬合位置 -- Corefile2: | .:53 { errors health { lameduck 10s } }
咬合指示符控制块字符串末尾换行符的行为方式。
- 默认情况下,
clip
在字符串末尾放置一个换行符。 要删除所有换行符,请通过在样式指示符后面添加减号 (-
) 来删除它们。 clip
和strip
都会忽略块末尾实际有多少换行符; 为了让它们全部保留,请在样式指示符后面添加一个加号 (+
)。
块缩进指示符
通常,用于缩进块的空格数将从其第一行自动猜测。 如果块的第一行以额外空格开头,则可能需要块缩进指示符。 在这种情况下,只需将用于缩进的空格数(1 到 9 之间)显示的放在标头末尾即可。
块标量 Demo
为了对比更直观,开头用 .
字符显示的打印了缩进提示符(默认 2 个缩进),末尾用 \n
字符显示的打印了换行提示符,实际操作中,这部分字符不可见。
从左到右,依次点击 Tab选项卡
,对比效果会更加明显,或者选择任意两个选项卡进行频繁切换,查看差异对比。
块样式 (?)
块咬合 (?)
缩进
块样式 (?)
块咬合 (?)
缩进
块样式 (?)
块咬合 (?)
缩进
块样式 (?)
块咬合 (?)
缩进
块样式 (?)
块咬合 (?)
缩进
块样式 (?)
块咬合 (?)
缩进
块样式 (?)
块咬合 (?)
缩进
流标量
:
和 #
字符很挑剔。 它们可以在字符串中,但是 :
不能出现在空格或换行符之前,#
不能出现在空格或换行符之后, 这样做会导致语法错误。 如果您需要使用这些字符,您最好使用引用的样式之一。
流标量 Demo
以下示例分别在展示了转义单引号(Single-quoted
)、双引号(Double-quoted
)和原值(Plain
)的效果。