基于这个问题:Docker Compose variable Substitution with Quotes vs without
yaml 中带引号和不带引号的字符串之间有什么区别(如果有)?
这个问题主要来自我关于docker compose文件中变量替换的问题——yml。
官方给出的例子是:
db:
image: "postgres:${POSTGRES_VERSION}"
我想知道如果没有字符串这是否有效:
db:
image: postgres:${POSTGRES_VERSION}
如果不是,那为什么呢?在 docker 中使用变量替换时,我应该在哪些情况下添加引号?我如何识别它们?它叫什么 - 如果我需要在谷歌中对它们进行进一步研究?
最佳答案
简短的回答是,在大多数情况下没有区别。
---
foo: bar
是相同的
---
'foo': 'bar'
使用特殊字符或保留字符时必须使用引号(例如
&
或 {
开头,或 :<space>
)。如果标量将解析为特殊类型,您还必须使用引号,例如
true
, false
, null
、数字等。这取决于 YAML 版本和架构。它还取决于您使用的应用程序/处理器。根据标量是否被引用,它们可能会做不同的事情。
在您给出的示例中,如果处理器正确实现 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 由具有三种基本数据类型的节点组成:标量、映射和序列。
序列是标量、映射或序列的列表。映射是键到值的映射(或字典、散列),这两种值都可以是所有三种类型。所以你会得到一个树结构,或者更准确地说,是一个图。
例如,标量可以是字符串、数字或空值。
关于docker-compose - yaml 中带引号和不带引号的字符串之间有什么区别(如果有)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50299958/