文章目錄
- 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解析錯誤問題。