如何在 YAML 中转义指示符(冒号和连字符)

问题描述 投票:0回答:8

在配置文件中,我有一个想要为其分配 URL 的键。问题是 YAML 将

:
-
字符解释为创建映射或列表,因此该行存在问题

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

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

有没有明确的方法来逃避

:
-
?或者将整个内容放在单引号中然后就到此为止会有效吗?

escaping yaml delimiter
8个回答
368
投票

引用:

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

澄清一下,我的意思是“引用值”,最初认为整个事物就是值。如果

http://www.some-site.example/
是值,只需像这样引用它:

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

301
投票

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

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

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


107
投票

根据 YAML 规范,

:
-
都不应该成为问题。
:
只是一个键分隔符,后面有一个空格,而
-
只是行首的数组指示符,后面有一个空格。

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

- url: 'http://www.some-site.example/'
- url: "http://www.some-site.example/"
- url:
    http://www.some-site.example/
- url: >-
    http://www.some-site.example/
- url: |-
    http://www.some-site.example/

然而,在“plain style”中显然不可能有任何形式的转义。


36
投票

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

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

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


25
投票

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

title: My Life: A Memoir

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


8
投票

如果您在 Spring Boot 2 中使用

@ConfigurationProperties
来注入带有包含冒号的键的映射,那么您需要在引号内使用方括号进行额外级别的转义,因为 spring 只允许字母数字和“-”字符,从而删除其余字符。您的新密钥将如下所示:

"[8.11.32.120:8000]": GoogleMapsKeyforThisDomain

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


8
投票

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

5
投票

GitHub 操作抱怨

curl -L -H "Authorization: token ${{ secrets.TOKEN }}"  https://example.com/try.txt

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

curl -L -H "Authorization:token ${{ secrets.TOKEN }}"  https://example.com/try.txt
© www.soinside.com 2019 - 2024. All rights reserved.