在 YAML 中,!
(感叹号)是一个特殊符号,主要用于 标签(Tag) 的声明,表示对数据类型或结构的自定义处理。以下是它的常见用途和示例:
1. 内置标签(Built-in Tags)
YAML 提供了一些内置标签,用于显式指定数据类型:
# 强制将值解析为字符串(即使看起来像其他类型)
str_value: !str "123"
# 强制将值解析为整数
int_value: !int "42"
# 强制将值解析为布尔值
bool_value: !bool "true"
2. 自定义类型标签
在特定框架或工具中(如 Kubernetes、Ansible),!
用于自定义类型的声明:
# Kubernetes 中的私有镜像仓库配置
imagePullSecrets:
- name: !secret my-registry-key
# Ansible 的特殊变量标记
vars:
password: !vault |
$ANSIBLE_VAULT;1.1;AES256...
3. 语言无关的本地标签
用户或工具可以定义自己的本地标签:
# 自定义对象构造(如某些编程语言的类)
person: !Person
name: Alice
age: 30
4. 引用和锚点(与 &
和 *
配合使用)
虽然不直接依赖 !
,但结合锚点可以实现复杂结构:
defaults: &defaults
timeout: !int "60"
service:
<<: *defaults
port: 8080
⚠️注意事项:
- 上下文相关:
!
的具体行为取决于解析 YAML 的工具或框架(如 Python 的PyYAML
、Kubernetes、Ansible)。 - 安全性:某些解析器允许通过
!
执行任意代码(如!!python/object
),加载不受信任的 YAML 文件时需谨慎。
如果需要进一步解释某个具体场景下的用法,可以提供更多上下文!
内容由零声教学AI助手提供,问题来源于学员提问