yaml中的多行文本和锚点引用
平时工作上ansible-playbook
、salt-sls
、k8s-yaml
遇到过很多次关于多行文本的书写方式,今天整理一些符号的用法和含义:
|: 多行字符串开始标识;(保留换行)
>: 同|,但是它会把中间字符串的换行符去掉,只保留一个(\n); (折叠换行)
|+: 保留末尾的换行符;
|-: 删除末尾的换行符;
>-: 末尾的换行符也删掉;
>+: 同>;
&: 锚点标记;
*: 引用锚点。
1.关于yaml中竖线的作用和用法
字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格。
1 2 3 |
str: 这是一段 多行 字符串 |
字符串表示如下:
1 |
{ str: '这是一段 多行 字符串' } |
多行字符串可以使用|
保留换行符,也可以使用>
折叠换行。
1 2 3 4 5 6 |
this: | Foo Bar that: > Foo Bar |
字符串表示如下:
1 |
{ this: 'Foo\nBar\n', that: 'Foo Bar\n' } |
+
表示保留文字块末尾的换行,-
表示删除字符串末尾的换行。
1 2 3 4 5 6 7 8 9 10 |
s1: | Foo s2: |+ Foo s3: |- Foo Bar |
字符串表示如下:
1 |
{ s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo\nBar' } |
字符串之中可以插入 HTML
标记。
1 2 3 4 |
message: | <p style="color: red"> 段落 </p> |
字符串表示如下:
1 |
{ message: '\n<p style="color: red">\n 段落\n</p>\n' } |
关于>-
、>+
、 >
的效果对比:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
this: | Foo Bar that: > Foo Bar othre: >- hello yaml ha other: >+ hi yaml ha |
字符串表示如下:
1 |
{other: 'hi yaml ha\n', othre: 'hello yaml ha', that: 'Foo Bar\n', this: 'Foo\nBar\n'} |
2.关于yaml中的锚点(&
)和引用(*
)
1 2 3 4 5 6 7 8 9 10 11 |
defaults: &defaults adapter: postgres host: localhost development: database: myapp_development <<: *defaults test: database: myapp_test <<: *defaults |
等同于下面的字符串:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
defaults: adapter: postgres host: localhost development: database: myapp_development adapter: postgres host: localhost test: database: myapp_test adapter: postgres host: localhost |
&
用来建立锚点(defaults),<<
表示合并到当前数据,*
用来引用锚点。
下面是另一个例子。
1 2 3 4 5 |
- &showell Steve - Clark - Brian - Oren - *showell |
字符串表示如下:
1 |
[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ] |
昨天整理这篇东西的时候装了一个md的编辑器,谁知道点了一下自动html转md之后,整个页面都乱了,而且页面是实时保存的,害--!只能怪自己太菜。
refer:
[YAML 语言教程 - 阮一峰的网络日志]