我有以下YAML片段:
description: |
"API for bean consuming applications.
Examples: painted pony, lima bean"
Swagger editor将冒号(:
)解释为特殊字符,尽管有引号。
根据this question的接受答案,结肠不应被视为特殊字符。
这是Swagger的错误还是在引用的文本文字中使用冒号所需的转义序列?
我尝试使用YAML specification找到这个,但放弃了。
我如何阅读该规范来回答这个问题?
YAML中单引号('
)和双引号("
)之间是否存在差异?
管道(|
)或大于(>
)构造是否仅影响换行处理或处理特殊字符?
答案 0 :(得分:17)
我会认为这是一个招摇的错误,但我在其他编辑器中看到了问题,例如在突出显示YAML时。
当字符串标量被single quotes '....'
包围时,该字符串中唯一可以转义的是插入双引号以表示单引号:
'It''s a good question'
当double quotes,"...."
绕过标量字符串时,使用反斜杠(\
)进行转义,并且必须至少转义反斜杠和双引号。此外,您可以转义其他特殊字符,例如换行符(\n
),并通过在反斜杠前面使用它来转义行尾。
YAML规范说no way to escape characters inside literal scalars(从|
开始),因此您无法插入额外的换行符或其他转义序列。
对于折叠样式(>
),转义行为与文字标量一样。
除了普通标量(没有任何引号或>
/ |
的标量)之外的所有字符串标量都可以包含:
后跟空格而不会出现问题,如果编辑器解释的不同,那么是可以理解的(因为完整的YAML解析很昂贵),但不正确。
答案 1 :(得分:16)
我遇到了完全相同的问题,并发现使用HTML转义码可以使用:
,这就是我所使用的。
答案 2 :(得分:2)
以其他评论中已经提供的答案为基础:http://yaml.org/spec/1.2/spec.html#id2788097
从这里: https://yaml.org/spec/1.2/spec.html#id2776092
我发现使用任何引号都可以只使用两个冒号来转义冒号特殊字符。即:::
因此描述将变为:
docker-machine restart default
eval $(docker-machine env default)