如何在YAML中转义指示符(即:或 - )

dan*_*ara 212 yaml escaping delimiter

在配置文件中,我有一个我希望分配URL的密钥.问题是YAML解释:和 - 字符作为创建映射或列表,所以它有一个问题的线

url: http://www.example-site.com/
Run Code Online (Sandbox Code Playgroud)

(因为http后跟冒号和中间的连字符)

是否有明确的方法来逃避':'和' - '?或者它是否可以将整个事物放在单引号中并称之为一天?

Ry-*_*Ry- 204

行情:

"url: http://www.example-site.com/"
Run Code Online (Sandbox Code Playgroud)

澄清一下,我的意思是"引用价值",最初认为整个事情就是价值.如果http://www.example-site.com/是值,只需引用它:

url: "http://www.example-site.com/"
Run Code Online (Sandbox Code Playgroud)

  • 显然,这取决于解析器.这与Jekyll YAML无关. (27认同)
  • 没有什么比......好?因为然后引号需要自己转义,这并不能解决问题,而只是将其向前推进...... (2认同)
  • 好吧,拥有一个防错文档就好得多,就像降价一样,所以团队的非技术人员可以编辑它(例如Rails中的语言环境文件),没有任何破坏它的风险! (2认同)

Mic*_*ros 165

什么也有效,对于长的多行文本来说更好,就是将文本缩进到下一行,在管道或大于号之后:

text: >
    Op dit plein stond het hoofdkantoor van de NIROM: Nederlands Indische 
    Radio Omroep
Run Code Online (Sandbox Code Playgroud)

管道保留换行符,gt符号将以下所有行转换为一个长字符串.

  • @equaeghe:您可以使用`> -`或`| -`来防止这种情况发生. (43认同)
  • ...并在最后添加换行符,这通常不是您想要的. (6认同)
  • 这是一个很棒的解决方案.完全避免必须转义文本中的其他字符.+++ 90000分 (4认同)
  • @ffghfgh - urg!我无法弄清楚如何在评论中正确格式化代码,现在我无法编辑原始评论.基本上,我使用带有管道的列表项,如下所示:` - |`然后在新行上我缩进列表项文本,以便第一个字符与管道对齐.我希望有帮助,它在Rails 4.2语言环境文件中对我有用. (3认同)

Ste*_*ett 41

根据YAML规范,既不是:也不-应该是问题.:只是一个带有空格的关键分隔符,它-只是一行后面的一个数组指示符,后面有一个空格.

但是如果你的YAML实现有问题,你可能有很多选择:

- url: 'http://www.example-site.com/'
- url: "http://www.example-site.com/"
- url:
    http://www.example-site.com/
- url: >-
    http://www.example-site.com/
- url: |-
    http://www.example-site.com/
Run Code Online (Sandbox Code Playgroud)

然而,在" 普通风格 "中明确没有任何形式的逃避.


Gri*_*ave 30

行情,但我更喜欢它们的价值:

url: "http://www.example.com/"
Run Code Online (Sandbox Code Playgroud)

将它们放在整条线上看起来可能会导致问题.


pto*_*ato 20

另一种适用于Jekyll中使用的YAML解析器的方法:

title: My Life: A Memoir
Run Code Online (Sandbox Code Playgroud)

另一方面,没有空格的冒号似乎不会打扰Jekyll的YAML解析器.破折号也没有.


And*_*own 6

如果您使用@ConfigurationPropertiesSpring Boot 2 来注入包含冒号的键的映射,那么您需要使用引号内的方括号进行额外的转义级别,因为 spring 只允许使用字母数字和 '-' 字符,去掉其余部分。您的新密钥将如下所示:

"[8.11.32.120:8000]": GoogleMapsKeyforThisDomain
Run Code Online (Sandbox Code Playgroud)

请参阅github 问题以供参考。


Hei*_*tad 6

我来到这里是为了让我的 Azure DevOps 命令行任务正常工作。对我有用的是使用管道 ( |) 字符。使用>没有效果。

例子:

steps:
- task: CmdLine@2
  inputs:
    script: |
      echo "Selecting Mono version..."
      /bin/bash -c "sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 5_18_1"
      echo "Selecting Xcode version..."
      /bin/bash -c "echo '##vso[task.setvariable variable=MD_APPLE_SDK_ROOT;]'/Applications/Xcode_10.2.1.app;sudo xcode-select --switch /Applications/Xcode_10.2.1.app/Contents/Developer"
Run Code Online (Sandbox Code Playgroud)

  • 我在`.gitlab-ci.yml`中使用了同样的东西,但是直到我需要管道'|' 在脚本中 - 它默默地失败了:( (2认同)
  • 您需要管道,因为管道在块内保留换行符,而“>”将整个块转换为单行。 (2认同)

Ale*_*ohn 6

GitHub 操作抱怨

curl -L -H "Authorization: token ${{ secrets.TOKEN }}"  https://example.com/try.txt
Run Code Online (Sandbox Code Playgroud)

但当冒号后面没有空格时就可以了,比如

curl -L -H "Authorization:token ${{ secrets.TOKEN }}"  https://example.com/try.txt
Run Code Online (Sandbox Code Playgroud)

  • 使用多行命令,以 > 或 | 开头 然后在下一行写下你的命令。 (2认同)