文章目录
- yaml中的| 符号 和 > 符号
- yaml中的 - 符号
- 工作中常遇到的问题
- - 命令行中有冒号加空格,导致yaml解析报错
yaml中的| 符号 和 > 符号
-
在 YAML 中,| 符号表示标量块(Scalar Block)的开始。它用于表示长文本块或保持多行字符串的格式。
-
在 YAML 中,> 符号表示折叠块(Folded Block)的开始。它用于表示将多行文本块折叠为单行,不保留每行的换行符和大部分缩进。
使用 > 符号后,多行文本会被折叠成单行,而换行符会被替换为空格。只有在文本末尾的换行符会被保留。
需要注意的是,只有文本末尾的换行符会被保留。如果希望保留所有换行符和缩进,可以使用 | 符号。
另外,在 YAML 中,您可以同时使用 | 和 \ 进行多行文本块的折叠,并将其折叠到一行中。这样可以保留换行符,并将多行文本合并为一行。
以下是一个示例,展示了如何在 YAML 中使用 | 和 \ 进行多行折叠到一行的写法:
description: |This is a long text \that spans \multiple lines \and is folded into a single line.
在上述示例中,使用 | 表示标量块的开始,使用 \ 将多行文本折叠到一行中,保留了原始的换行符。
需要注意的是,\ 符号后面不能有空格,否则会被解析为文本的一部分。
yaml中的 - 符号
在 YAML 中,- 符号用于表示一个列表项(List Item)。它是 YAML 中定义序列(Sequence)的一种方式。
使用 - 符号,可以将多个值组合成一个列表,表示一组相关的项。
fruits:- apple- banana- orange
在上述示例中,fruits 是一个键,- 符号后面的值表示一个列表,包含了三个水果项:apple、banana 和 orange。
注意,每个列表项需要在同一缩进级别下,并且可以包含任意数量的空格缩进。
工作中常遇到的问题
- 命令行中有冒号加空格,导致yaml解析报错
- cd /home/xxx/ && curl -vF "f1=@$(ls -t xxx.install*| head -1)" -H "UploadToken: xxx:vimYNbV-aaa=:fasdfaluZbb" http://192.168.1.1:8888/api/v1/file/upload
问题分析:
在 YAML 中的标量块中使用了冒号:加空格,可能会导致yaml解析问题。因为在 YAML 中,冒号用于表示键值对的分隔符。
经过观察:在 HTTP 请求头中,冒号 : 用于分隔头字段的名称和值。
值中虽然有冒号, UploadToken: 和值中间有个空格。
经过测试,使用postman生成的curl中,也是这么处理的。
curl --location 'http://192.168.1.2:8888/api/v1/file/upload' \
--header 'UploadToken: httpcat:aaaVvimYNbV-YpJ9EFMbbb=:aaakZWFkbGluZSIcccc' \
--form 'f1=@"/C:/Users/xxx/Desktop/syslog.md"'
解决方法:
推荐如下方法:
为了避免 YAML 解析失败,如果您想在 YAML 中表示命令行,可以使用以下两种方式:
您可以将该行放在引号中,以保留原始字符串的格式。例如:
- 'xxxx'
或者,您可以将该行作为纯文本块(Plain Scalar)进行处理,使用 | 或 >- 符号来保留换行符和缩进。例如:
- |xxxx
使用上述写法,您可以确保以 - 开头的行被正确解析为字符串,而不会被误解为列表项。
总结:yaml中写命令行字符时候,建议 使用 - | 方式,避免被当前列表项导致一些yaml解析错误问题。