YAML 是 “YAML Ain't Markup Language”(YAML 不是标记语言)的递归缩写,最初设计为一种人类友好的数据序列化格式。相比 XML 和 JSON,YAML 更易于阅读和编写,广泛应用于配置文件和数据交换等场景,如前文提到的 Ansible 和 Nuclei。YAML 配置文件通常以 .yml 作为后缀,例如 config.yml。
一、YAML 核心特性与应用场景
(一)核心优势
- 简洁性
:通过缩进和符号(如 :
、-
)实现结构化,代码量通常比 JSON/XML 更少。 - 可读性
:语法接近自然语言,适合人类直接编辑。 - 语言无关性
支持多种编程语言(如 Python、Java、Go 等)解析和生成。
配置文件
-
:替代复杂的 XML/JSON 配置(如 Docker Compose、Kubernetes 配置)。 - 数据存储
:用于日志、缓存数据的序列化存储。 - 元数据描述
:在 CI/CD 管道(如 GitHub Actions)中定义流程规则。
person:
name: John
age: 30
person: { name: John, age: 30 }
2. 数组(序列/列表)
列表格式:每个元素以 - (短横线 + 空格)开头
fruits:
- Apple
- Banana
- Cherry
行内表示法:用[ ]包裹元素
fruits:
3. 纯量(基本值)
纯量是最基本的,不可再分的值,包括:
字符串
布尔值
整数
浮点数
Null
时间
日期
普通字符串:无需引号(建议包含特殊字符时使用引号)。
str1: 简单字符串
str2: '带空格的字符串 示例'
多行字符串:
|:保留换行符(默认保留末尾换行)
desc: |
第一行
第二行
输出:第一行n第二行n
>:折叠换行(换行转为空格)
desc: >
第一行
第二行
输出:第一行 第二行n
- 数值
支持整数、浮点数(123,3.14) - 布尔值
true/false
(大小写不敏感,但建议小写) - 空值
用 ~或
直接留空表示
empty: ~
- 时间与日期
(三)高级语法:锚点与引用
通过 &(定义锚点)和 *(引用锚点)避免重复定义相同数据。
defaults: &config # 定义锚点
host: localhost
port: 8080
development:
<<: *config # 引用锚点
database: dev_db
test:
<<: *config
database: test_db
等价于
development:
host: localhost
port: 8080
database: dev_db
test:
host: localhost
port: 8080
database: test_db
三、实践建议与工具
引号使用:
字符串包含空格、特殊字符(如 $、#)时必须使用引号。
单引号与双引号的选择:双引号支持转义字符(如 n 表示换行),单引号直接转义(如 '' 表示单引号)。
复杂结构拆分:避免单个 YAML 文件过于庞大,可通过锚点引用或分文件导入(需结合具体工具支持)。
如需进一步了解 YAML 规范细节或其他语言的实现,可访问官方网站 (https://www.yaml.org/) 或相关仓库文档。
参考链接:
https://github.com/yaml/
https://yaml.org/spec/1.2.2/
-End-
如果觉得我的分享有用
[点赞+分享+关注]
原文始发于微信公众号(网络个人修炼):YAML 基础语法详解与示例
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论