基于这个问题:Docker Compose variable Substitution with Quotes vs without
yaml中引用和未引用字符串之间的区别是什么?
这个问题主要来自我在docker compose文件中的变量替换问题 - 这是yml。
给出的官方例子是:
db:
image: "postgres:${POSTGRES_VERSION}"
我想知道没有字符串是否有效:
db:
image: postgres:${POSTGRES_VERSION}
如果没有,那么为什么?在docker中使用变量替换时,我应该添加引号的情况是什么?我如何识别它们?它叫什么 - 如果我需要在谷歌进一步研究它们?
答案 0 :(得分:0)
简短的回答是,在大多数情况下没有区别。
---
foo: bar
与
相同---
'foo': 'bar'
使用特殊字符或保留字符时必须使用引号(例如,开头为&
或{
,或:<space>
)。
如果标量将作为特殊类型解析,您还必须使用引号,例如true
,false
,null
,数字等。这取决于YAML版本和架构。< / p>
它还取决于您使用的应用程序/处理器。根据是否引用标量,它们可能会做不同的事情。
在您给出的示例中,如果处理器正确实现YAML,则不需要引用。
在我的文章中,您可以阅读有关YAML中引用和模式/类型的所有内容: http://blogs.perl.org/users/tinita/2018/03/strings-in-yaml---to-quote-or-not-to-quote.html http://blogs.perl.org/users/tinita/2018/01/introduction-to-yaml-schemas-and-tags.html
进一步说明:YAML由具有三种基本数据类型的节点组成:标量,映射和序列。 Sequence是标量,映射或序列的列表。映射是值的键的映射(或字典,散列),两者都可以是所有三种类型。因此,您可以获得树结构,或者更准确地说是图形。 标量可以是字符串,数字或null,例如。