YAML 中管道符号的用途是啥?

Posted

技术标签:

【中文标题】YAML 中管道符号的用途是啥?【英文标题】:What is the use of the pipe symbol in YAML?YAML 中管道符号的用途是什么? 【发布时间】:2013-03-10 13:20:46 【问题描述】:

我是 yaml 新手,我对用于多行的管道符号 (|) 有疑问。 YAML 是否有类似下面的语法?

测试:|6+

在下面的两个 YAML 文件中,第一个有效,第二个无效。我不知道是什么原因造成的。

第一个文件

Name :
  -
   testing:
     val1
  -
   second:
     val2
  -
   third:
     val3
  -
   then
  - 
    final: |
     a
     aa
     aaa
     aaaa : 'test:'

第二个文件

Name :
  -
   testing:
     val1
  -
   second:
     val2
  -
   third:
     val3
  -
   then
  - 
    final: |6+
      a
      aa
      aaa
      aaaa : 'test:'

第二个文件是客户的。

我正在使用 XMLBeans,但出现此错误:

com.esotericsoftware.yamlbeans.parser.Parser$ParserException:第 17 行,第 12 列:应为“块结束”,但发现:块映射开始”

【问题讨论】:

【参考方案1】:

YAML 中行尾的管道符号表示后面的任何缩进文本都应解释为多行标量值。见the YAML spec。

具体来说,竖线表示(除了缩进之外)标量值应该以保留换行符的方式按字面意思解释。相反,> 字符表示后面是多行“折叠”标量,这意味着换行符被转换为空格。例如:

>>> import yaml
>>> yaml.load("""
... |
...  This is a multi-line
...  literal style scalar.
... """)
'This is a multi-line\nliteral style scalar.\n'
>>> yaml.load("""
... >
...  This is a multi-line
...  folded scalar; new lines are folded into
...  spaces.
... """)
'This is a multi-line folded scalar; new lines are folded into spaces.\n'

6+ 部分是缩进指示符(明确说明应该使用多少个缩进空格)和“chomping 指示符”+ 控制应如何处理标量文字末尾的额外空格.

你得到的错误是一个棘手的错误:这是因为缩进应该是相对于当前的块级元素。所以在这种情况下,它应该是 2+ 而不是 6+ 因为最后一个块级元素是映射 final: 并且文字从它缩进 2。更新了来自@bramvi 的更正。

【讨论】:

也看in-yaml-how-do-i-break-a-string-over-multiple-lines So in this case it should be 4+ instead of 6+ 我认为应该是 2,而不是 4,因为那是那里的相对缩进。在pyyaml 6.0 上测试。 @bravmi 不错。这个答案已经 8 年多了,之前没有人指出过。我同意。 我不记得为什么我基于final: 不是块元素来为4+ 辩护。显然是。没有 ... 就不是流式映射。【参考方案2】:

当您希望将换行符保留为换行符时使用管道。

欲了解更多信息:https://yaml-multiline.info/

【讨论】:

以上是关于YAML 中管道符号的用途是啥?的主要内容,如果未能解决你的问题,请参考以下文章

特殊符号管道符命令:cutsortuniqwcteetrsplit等命令

管道符常营命令以及特殊符号

Linux5.4 shell特殊符号及管道相关命令

8.6-8.9 管道符和作业控制shell变量,环境变量

管道符和作业控制 shell变量 环境变量配置文件

Ubuntu无法输入管道符及其他符号