yaml语法
最近在写配置的时候, 发现很多配置文件都是用yaml
语法, 比如docker-composer
k8s
等等. 因此整理一下yaml
语法以备后续翻阅. 其实很简单, 一眼看上去和json
类似.
可以通过网站校验yaml
语法是否符合规则: https://www.bejson.com/validators/yaml_editor/
基本语法
-
使用空格进行缩进(tab 不行)
-
缩进的空格数目随意, 左侧对其即可.
-
语法分割的冒号
:
和逗号,
后面必须跟空格- 正因如此, 字符串可以直接写成这样:
1234,5678
- 正因如此, 字符串可以直接写成这样:
-
#
为整行注释
数据结构
哈希#
# 第一种写法, 同级元素整合为一个对象
hash1:
name: Xiaoming
age: 15
# 第二种写法, 也可以写到一行
hash2: {name: XiaoMing, age: 15}
# 当哈希的 key 或 Value 是一个符合类型的时候. 可以使用 ? : 配合的方式.
# 不过这玩意应该用不到吧,没有谁会写这么个配置
hash3:
?
name: XiaoMing
age: 15
:
address: BeiJing
?
name: LiMing
age: 20
没了, 简单吧.
数组#
# 第一种写法, 使用中横线`-`分割的同级元素, 整合为一个数组
list1:
- value1
- value2
# 第二种写法, 也可以写到一行
list2: [value1, value2]
基本类型#
# 基础类型直接写就行
number: 12.30
# 可以使用科学记数法表示
number2: 2.352145e+5
# 二进制表示法
number3: -b1010_0010
# 布尔值. true/false
isMan: true
# ~ 标识 null
parent: ~
# 时间使用 ISO8601 gesh格式标识
isoTime: 2021-12-26T14:45:03.394Z
isoDate: 2021-12-26
# 使用 !! 强制转换数据类型
# 内置类型包括: int, float, bool, str, binary(字符串), timestamp(时间), null, set, omap(哈希列表), pairs(哈希列表), seq(列表), map(哈希)
str1: !!str 1234
str2: !!str true
字符串#
其中字符串应该是使用场景最多的了.
# 默认直接写即可
# 注意, 若存在特殊字符会被转义
str1: 一行字符串
# 字符串中包含特殊字符或空格时, 需要使用引号包裹
str2: '空 格'
# 当单引号包裹的字符串中存在单引号, 要使用两个单引号进行转义
str3: '包含单''引号'
# 注意, 双引号字符串不会对字符串进行转义
str4: "空\n格"
# 写成多行的字符串, 从第二行开始要有缩进.
# 注意, 这种方式, 会将行尾的换行转为空格. 故结果还是一行
str5: 多行字符串
第二行
第三行
# 在字符串前面添加标识符可标识不同的情况:
# `|` 保留行尾换行符, 也会保留末尾的换行
# `>` 不保留行尾换行符, 但会保留末尾的换行. 若中间需要换行符, 留空行即可.
# `|+` 保留末尾的换行, 也是默认行为
# `|-` 不保留末尾的换行
# `>+`
# `>-`
str6: |
添加标识符号的
前面对其的缩进会被会被去掉
但是, 已经对其的缩进差异会被保留. 比如这一行
符合类型#
以上所有类型可以混合使用. 等等吧, 大家都懂得
# 数组的元素是哈希
list:
- name: Name1
age: 10
- name: Name2
age: 20
# 哈希的值是数组
hash:
hashList: [V1, V2]
特殊用法#
锚点复制#
用于对相同的内容进行复用.
names:
- name: &name1 XiaoMing
# 这里引用上方的锚点, 既 &name1
- name: *name1
# 复制对象
user1: &user1
name: XiaoMing
age: 20
user2:
# 引用对象的值. << 表示将内容合并到当前.
# 其想过相当于: user3
<<: *user1
# 可以覆写引用的内容
age: 30
user3:
name: XiaoMing
age: 30
标记分割#
可以将多个yaml
配置写入到同一个文件中.
---
name: XiaoMing
# 三个点表示一个配置文件的结束
...
# 三个中横线标识一个配置文件的开头
# 一般使用`---`就可以不用再额外写 `...` 了
---
name: LiMing
...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
2018-12-26 23种设计模式之迭代器模式
2018-12-26 23种设计模式之门面模式
2018-12-26 23种设计模式之策略模式
2018-12-26 23种设计模式之装饰模式
2018-12-26 23种设计模式之命令模式
2018-12-26 23种设计模式之责任链模式
2018-12-26 23种设计模式之中介者模式