如果有的话,yaml中引用和未引用字符串之间的区别是什么?

时间:2018-05-11 20:39:27

标签: docker-compose yaml

基于这个问题:Docker Compose variable Substitution with Quotes vs without

yaml中引用和未引用字符串之间的区别是什么?

这个问题主要来自我在docker compose文件中的变量替换问题 - 这是yml。

给出的官方例子是:

db:
  image: "postgres:${POSTGRES_VERSION}"

我想知道没有字符串是否有效:

db:
  image: postgres:${POSTGRES_VERSION}

如果没有,那么为什么?在docker中使用变量替换时,我应该添加引号的情况是什么?我如何识别它们?它叫什么 - 如果我需要在谷歌进一步研究它们?

1 个答案:

答案 0 :(得分:0)

简短的回答是,在大多数情况下没有区别。

---
foo: bar

相同
---
'foo': 'bar'

使用特殊字符或保留字符时必须使用引号(例如,开头为&{,或:<space>)。

如果标量将作为特殊类型解析,您还必须使用引号,例如truefalsenull,数字等。这取决于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,例如。