代码之家  ›  专栏  ›  技术社区  ›  user9588170

如果有的话,yaml中带引号的字符串和不带引号的字符串之间有什么区别?

  •  4
  • user9588170  · 技术社区  · 6 年前

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

    如果有的话,yaml中带引号的字符串和不带引号的字符串之间有什么区别?

    这个问题主要来自我对docker compose文件中变量替换的问题,即yml。

    给出的官方示例是:

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

    我想知道这是否在没有字符串的情况下有效:

    db:
      image: postgres:${POSTGRES_VERSION}
    

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   tinita    6 年前

    简而言之,在大多数情况下没有区别。

    ---
    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由具有三种基本数据类型的节点组成:标量、映射和序列。 序列是标量、映射或序列的列表。映射是键到值的映射(或字典、哈希),这两者都可以是所有三种类型。所以你得到一个树结构,或者更准确地说,一个图。 例如,标量可以是字符串、数字或null。