YAML: 我需要为YAML中的字符串加引号吗?

问题描述 投票:397回答:2

我正在尝试编写一个用于Rails项目国际化的YAML字典。但我有点困惑,因为在一些文件中,我看到字符串有双引号,而在一些文件中没有。有几点需要考虑。

  • 例1 - 所有字符串都使用双引号。
  • 例二 - 没有字符串(除了最后两个)使用引号。
  • YAML烹饪书 说。用双引号括住字符串,可以使用转义符来表示ASCII和Unicode字符。 这是否意味着只有当我想转义一些字符时才需要使用双引号?如果是--为什么在第一个例子中到处使用双引号--只是为了统一风格的原因?
  • 例子2的最后两行使用了 "双引号"。! - 的非特定标签,而第一个例子的最后两行没有--它们都能用。

我的问题是:YAML中不同类型引号的使用规则是什么?

是否可以这样说。

  • 一般来说,你不需要引号。
  • 如果你想转义字符,使用双引号。
  • 使用 ! 用单引号,当...?
syntax yaml quotes
2个回答
568
投票

经过对问题中引用的YAML烹饪书的简单回顾和一些测试,我的解释是这样的。

  • 一般来说,你不需要引号。
  • 使用双引号来强制执行一个字符串,例如,如果你的键或值是 10 但你想让它返回一个字符串,而不是一个Fixnum,写上 '10'"10".
  • 如果您的值包含特殊字符,请使用引号,(例如:. :, {, }, [, ], ,, &, *, #, ?, |, -, <, >, =, !, %, @, \).
  • 单引号可以让你在字符串中放入几乎任何字符,并且不会尝试解析转义码。'\n' 会以字符串 \n.
  • 双引号解析转义码。 "\n" 将作为换行字符返回。
  • 惊叹号引入了一个方法,例如,返回一个Ruby符号。!ruby/sym 来返回一个Ruby符号。

在我看来,最好的方法是除非必要,否则不要使用引号,然后使用单引号,除非你特别想处理转义码。

更新

"Yes "和 "No "应该用引号括起来(单倍或双倍),否则会被解释为TrueClass和FalseClass值。

en:
  yesno:
    'yes': 'Yes'
    'no': 'No'

0
投票

我在做一个项目的时候就有这样的担心 申请与 Docker.

我最喜欢的方法是,一般来说 使用引号。这包括 用引号表示。

  • 变量如 ${RAILS_ENV}
  • 用冒号(:)分隔的值,如 postgres-log:/var/log/postgresql
  • 其他字符串值

不过,我用双引号表示的是 integer 等需要转换为字符串的值。

  • docker-compose version like version: "3.8"
  • 端口号 "8080:8080"

然而,对于特殊情况,如 booleans, floats, integers在其他情况下,使用双引号的条目值可能被解释为 strings,请做 使用双引号。

下面是一个例子 docker-compose.yml 文件来解释这个概念。

version: "3"

services:
  traefik:
    image: traefik:v2.2.1
    command:
      - --api.insecure=true # Don't do that in production
      - --providers.docker=true
      - --providers.docker.exposedbydefault=false
      - --entrypoints.web.address=:80
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro

就这样吧

希望对你有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.