docker-compose - yaml 中带引号和不带引号的字符串之间有什么区别(如果有)?

标签 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 中使用变量替换时,我应该在哪些情况下添加引号?我如何识别它们?它叫什么 - 如果我需要在谷歌中对它们进行进一步研究?

最佳答案

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

---
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/

相关文章:

bash - 在Shell脚本中进行参数扩展时取消引用环境变量

docker - 警告 : no logs are available with the 'none' log driver

mysql - 无法从本地主机连接到 mysql 容器

arrays - 合并嵌套的 Yaml 数组

java - 将 YAML 文件加载到 Playframework 1.2.X 中的对象

docker - Rabbitmq - Docker 连接在端口 5672 上被拒绝

java - 在 docker 中为 docker-client for java 设置容器端口

mysql - 使用 ROR 应用程序设置 mysql 数据库时出现 ArgumentError

java - 是否可以将 application.yml 中的属性解析为具有不同名称的 java 类字段?

azure-devops - 如何在 Azure Pipelines YAML 构建定义中接收修订