基于这个问题:Docker Compose 带引号的变量替换与不带引号的变量替换
yaml 中带引号和不带引号的字符串之间有什么区别(如果有)?
这个问题主要来自我关于 docker compose 文件中变量替换的问题 - 即 yml。
官方给出的例子是:
db:
image: "postgres:${POSTGRES_VERSION}"
Run Code Online (Sandbox Code Playgroud)
我想知道如果没有字符串这是否有效:
db:
image: postgres:${POSTGRES_VERSION}
Run Code Online (Sandbox Code Playgroud)
如果不是,那为什么?在 docker 中使用变量替换时,什么情况下应该添加引号?我如何认出他们?它叫什么 - 如果我需要在谷歌上对它们进行进一步的研究?
简短的回答是,在大多数情况下没有区别。
---
foo: bar
Run Code Online (Sandbox Code Playgroud)
是相同的
---
'foo': 'bar'
Run Code Online (Sandbox Code Playgroud)
使用特殊或保留字符(例如开头的&或,例如 或 )时,必须使用引号。{:<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 由具有三种基本数据类型的节点组成:标量、映射和序列。序列是标量、映射或序列的列表。映射是键到值的映射(或字典、哈希),两者都可以是所有三种类型。这样你就得到了一个树结构,或者更准确地说,一个图表。例如,标量可以是字符串、数字或 null。
| 归档时间: |
|
| 查看次数: |
1847 次 |
| 最近记录: |