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

时间:2012-07-02 21:46:50

标签: escaping yaml delimiter

在配置文件中,我有一个我希望分配URL的密钥。问题是YAML将:和 - 字符解释为创建映射或列表,因此它存在行问题

url: http://www.example-site.com/

(两者都是因为http后面的冒号和中间的连字符)

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

7 个答案:

答案 0 :(得分:175)

行情:

"url: http://www.example-site.com/"

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

url: "http://www.example-site.com/"

答案 1 :(得分:152)

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

text: >
    Op dit plein stond het hoofdkantoor van de NIROM: Nederlands Indische 
    Radio Omroep

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

答案 2 :(得分:31)

根据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/

然而,“plain style”中明确没有任何形式的转义。

答案 3 :(得分:29)

引用,但我更喜欢它们的价值:

url: "http://www.example.com/"

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

答案 4 :(得分:18)

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

title: My Life: A Memoir

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

答案 5 :(得分:2)

如果您在Spring Boot 2上使用@ConfigurationProperties来插入带有冒号的键的映射,那么您需要在引号内使用方括号进行额外的转义,因为spring只允许使用字母数字和'-'字符,除去其余部分。您的新密钥如下所示:

"[8.11.32.120:8000]": GoogleMapsKeyforThisDomain

请参阅this github问题以供参考。

答案 6 :(得分:0)

我来这里是为了使我的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"