YAML 啥意思?有啥含义?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了YAML 啥意思?有啥含义?相关的知识,希望对你有一定的参考价值。

参考技术A 在小说《拜金女的恋爱方程式》中,YAML 是You are my love 的缩写。 来自YAML官方网站 ( http://www.yaml.org/ ) 的定义: YAML是一种直观的能够被电脑识别的的数据数据序列化格式,他并且容易被人类阅读,容易和脚本语言交互的。换种说法,YAML是一种很简单的类似于XML的数据描述语言,语法比XML简单很多。他在描述能够被转化成数组或hash的数据是很有用,例如: house: family: name: Doe parents: - John - Jane children: - Paul - Mark - Simone address: number: 34 street: Main Street city: Nowheretown zipcode: 12345 解析这个YAML将会自动创建下面的php数组: $house = array( 'family' => array( 'name' => 'Doe', 'parents' => array('John', 'Jane'), 'children' => array('Paul', 'Mark', 'Simone') ), 'address' => array( 'number' => 34, 'street' => 'Main Street', 'city' => 'Nowheretown', 'zipcode' => '12345' ) ); 在YAML里面,结构通过缩进来表示,连续的项目通过减号"-"来表示,map结构里面的key/value对用冒号":"来分隔。YAML也有用来描述好几行相同结构的数据的缩写语法,数组用'[]'包括起来,hash用''来包括。因此,前面的这个YAML能够缩写成这样: house: family: name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] address: number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 YAML是"YAML Ain't Markup Language(YAML不是一种标记语言)"的缩写。这种格式大约是2001年出现的,现在为止已有多种语言的YAML解析器。 提示YAML格式的周详规格能够在YAML官方网站 http://www.yaml.org/ 找到。本回答被提问者采纳

我的 GitHub 操作中嵌入式 shell 脚本的 YAML 语法有啥问题?

【中文标题】我的 GitHub 操作中嵌入式 shell 脚本的 YAML 语法有啥问题?【英文标题】:What's wrong with my YAML syntax for an embedded shell script in my GitHub action?我的 GitHub 操作中嵌入式 shell 脚本的 YAML 语法有什么问题? 【发布时间】:2021-12-17 18:15:26 【问题描述】:

在我的 GitHub 操作 workflow 中,我有以下部分(在作业/构建/步骤下):

      - name: Install/Select GCC and G++
        run: |
          sudo apt-get install -y gcc-$ matrix.gcc  g++-$ matrix.gcc 
          echo "CC=/usr/bin/gcc-$ matrix.gcc " >> $GITHUB_ENV
          echo "CXX=/usr/bin/g++-$ matrix.gcc " >> $GITHUB_ENV
          echo "CUDAHOSTCXX=/usr/bin/g++-$ matrix.gcc " >> $GITHUB_ENV

GitHub 运行失败,发出:

工作流文件无效

第 82 行的 yaml 语法有错误

现在,我从另一个存储库中提取了这个same code 应该可以工作的存储库……这是怎么回事?

【问题讨论】:

这似乎与缩进有关,看看第 76 行和第 83 行 - 符号前有多少空格。 @GuiFalourd:哦,缩进很重要?这不仅仅是“任意数量的空格”吗?我认为 YAML didn't care much 关于缩进。 在这种情况下,我认为这很重要,因为工作、步骤和工作流变量有很多级别。例如,在您的情况下,第 83 行的步骤与作业变量字段处于相同的缩进级别,并且由于它不希望该字段存在,因此它返回错误。 @einpoklum 一定很喜欢那篇文章复制my answer 而不尊重CC-BY-SA。没有提到的是,当然,同一个集合节点的键/项必须在相同的缩进级别。只是说,对那个压痕层的深度没有要求,只要它比周围层至少缩进一个空间。这就是你断章取义时得到的结果。 【参考方案1】:

以下是相关行,从68开始,有些行略过:

    steps:
      - uses: actions/checkout@v2
      - name: Install CUDA
        # .. snip ..

      - name: Install/Select GCC and G++
        run: |
          sudo apt-get install -y gcc-$ matrix.gcc  g++-$ matrix.gcc 
          echo "CC=/usr/bin/gcc-$ matrix.gcc " >> $GITHUB_ENV
          echo "CXX=/usr/bin/g++-$ matrix.gcc " >> $GITHUB_ENV
          echo "CUDAHOSTCXX=/usr/bin/g++-$ matrix.gcc " >> $GITHUB_ENV
    - name: CMake configure

steps: 是 YAML 映射的一部分。下一行开始一个 YAML 序列,它缩进了两个空格。因此,该序列在第 82 行以- name: CMake configure 结束。我不知道为什么 GitHub 将其显示为第 83 行;如果您将其复制粘贴到编辑器,则该空行不存在。可能是行尾问题,但我懒得启动十六进制编辑器来找出答案。

无论如何,在第 82 行,YAML 解析器结束了映射键 steps 的值,因此期望另一个映射键或映射结束。但是,它会找到一个序列项。那是你的错误。

您似乎打算将以下序列项作为steps: 的一部分。如果是这样,请将它们缩进到与前面的项目相同的级别。

【讨论】:

以上是关于YAML 啥意思?有啥含义?的主要内容,如果未能解决你的问题,请参考以下文章

C语言中sum表示啥意思?有啥用处?

String 的compare比较方法返回值有啥含义

Oracle 语句后加t有啥特殊的含义吗?

招手在中国是招呼别人来,在美国有啥含义?

“Bearer”授权标头有啥特殊含义吗?

属性和属性有啥区别? [关闭]