Syntax YAML:在YAML中字符串需要引号吗?
我正试图为Rails项目的国际化编写一本YAML词典。但我有点困惑,因为在一些文件中,我看到字符串用双引号括起来,而在一些文件中没有。需要考虑的几点:Syntax YAML:在YAML中字符串需要引号吗?,syntax,yaml,quotes,Syntax,Yaml,Quotes,我正试图为Rails项目的国际化编写一本YAML词典。但我有点困惑,因为在一些文件中,我看到字符串用双引号括起来,而在一些文件中没有。需要考虑的几点: -所有字符串都使用双引号 -没有字符串(最后两个除外)使用引号 声明:用双引号括起来的字符串允许您使用转义来表示ASCII和Unicode字符。这是否意味着仅当我想转义某些字符时才需要使用双引号?如果是-为什么他们在第一个例子中到处使用双引号-只是为了统一/风格的原因 示例2的最后两行使用-非特定的标记,而第一个示例的最后两行则没有-它们都可以
- -所有字符串都使用双引号李>
- -没有字符串(最后两个除外)使用引号李>
- 声明:用双引号括起来的字符串允许您使用转义来表示ASCII和Unicode字符。这是否意味着仅当我想转义某些字符时才需要使用双引号?如果是-为什么他们在第一个例子中到处使用双引号-只是为了统一/风格的原因
- 示例2的最后两行使用
代码>-非特定的标记,而第一个示例的最后两行则没有-它们都可以工作
- 一般来说,你不需要报价李>
- 如果要转义字符,请使用双引号李>
- 使用
代码>单引号,何时李>
- 一般来说,您不需要引用
- 使用引号强制输入字符串,例如,如果您的键或值是
,但希望它返回字符串而不是Fixnum,请编写10
或'10'
“10”
- 如果您的值包含特殊字符,请使用引号,(例如,
,:
,{
,,
,
,
,
,
,&
,*
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
)
- 单引号允许您在字符串中放入几乎任何字符,并且不会尝试解析转义码<代码>'\n'将作为字符串
返回\n
- 双引号解析转义码<代码>“\n”将作为换行符返回
- 感叹号介绍了一种方法,例如
返回一个ruby符号!ruby/sym
en:
yesno:
'yes': 'Yes'
'no': 'No'
在使用Docker开发Rails应用程序时,我就有过这种担心 我最喜欢的方法是通常不使用引号。这包括不使用引号:
- 像
${RAILS\u ENV}
- 用冒号(:)分隔的值,如
postgres-log:/var/log/postgresql
- 其他字符串值
整数
值,请使用双引号,如:
- docker编写版本,如
版本:“3.8”
- 端口号,如“8080:8080”
- 图像
“traefik:v2.2.1”
布尔值
、浮点值
、整数
,以及其他可能将输入值使用双引号解释为字符串
,请不要使用双引号
下面是一个示例docker compose.yml
文件来解释这个概念:
版本:“3”
服务:
特拉菲克:
图片:“traefik:v2.2.1”
命令:
---api.unsecure=true#不要在生产中这样做
---providers.docker=true
---providers.docker.exposedbydefault=false
---entrypoints.web.address=:80
端口:
- "80:80"
- "8080:8080"
卷数:
-/var/run/docker.sock:/var/run/docker.sock:ro
就这些
我希望这会有所帮助被标记为正确答案的答案具有极大的误导性。(虽然它解释了yaml one在野外遇到的情况) 只有当值(的开头)可能被误解为数据类型时,yaml中的字符串才需要引号,或者该值包含“:”(因为它可能被误解为键) 比如说
foo:“{{bar}”
需要引号,因为它可能被误解为数据类型dict
,但是
foo:barbaz{{{bam}
不会,因为它不以关键字符开头。其次,
foo:'123'
需要引号,因为它可能被误解为数据类型int
,但是
foo:bar1baz234
酒吧:123baz
不会,因为它不能被误解为int
foo:“是”
需要引号,因为它可能被误解为数据类型bool
foo:“bar:baz:bam”
需要引号,因为值可能会被误解为键
这些只是例子。使用yamlint
有助于避免使用错误的令牌启动值
foo@bar:/tmp$yamlint test.yaml
test.yaml
3:4错误语法错误:找到无法启动任何令牌的字符“@”(语法)
如果与yaml合作富有成效,这是必须的
引用一些人建议的所有字符串就像在python中使用括号一样。这是一种不好的做法,损害了可读性,并抛弃了不必引用字符串的美妙特性。在传播虚假知识之前,请阅读文档。虽然Mark的回答很好地总结了根据YAML语言规则何时需要引用,但我认为许多开发人员/管理员在使用YAML字符串时问自己的问题是“我的手的经验法则是什么