(在给出答案之前,请注意,我尝试过>
和>-
,但没有成功)。
我试着在可变变量上表现得很好。我希望有一个格式良好的SQL (伪sql)查询,不需要新的行字符就可以折叠成一行。
我的问题是,如果字符串有标识,>
运算符就不能工作.
---
- hosts: localhost
gather_facts: no
tasks:
- debug: var=foo
vars:
foo: >
select foo
from bar
where ok
join left
select baz
from boo
生产:
ok: [localhost] => { "foo": "select foo\n from bar\n where ok\njoin left\n select baz\n from boo\n \n" }
我不想看到\n
在文本的中间。单凭YAML能力就能解决这个问题吗?
发布于 2019-02-19 15:38:17
是啊,这是YAML最奇怪的“特色”。使用普通的多行标量代替:
---
- hosts: localhost
gather_facts: no
tasks:
- debug: var=foo
vars:
foo:
select foo
from bar
where ok
join left
select baz
from boo
发布于 2019-02-19 16:22:22
从YAML加载的数据中获得换行符的原因是,根据YAML规范
折叠允许在任何一个空格字符分隔两个非空格字符的地方分割长行。
而且,由于在from bar
之前有空格,所以之前的换行线不可能是“折叠”的,而是硬换行符。
若要单独使用YAML来“解决”此问题,您可以尝试使用@flyx已经指出的纯文本标量,但请注意,对于不适用折叠标量的普通标量有一些限制。这可能不适用于您的示例,但可能是当您有真正的SQL语法时。
你能做的另一件事就是不要在褶皱之后缩进:
foo: >
select foo
from bar
where ok
join left
select baz
from boo
这并不能使事情变得更加可读性,但也没有普通标量所具有的限制。
最好的解决方案是添加标记并使用文字样式标量,同时保持最大的可读性。
foo: !flatten |
select foo
from bar
where ok
join left
select baz
from boo
并为标记!flatten
加载对象,在加载过程中适当地展开以下行(即用单个换行符替换换行符后面的空格)。
虽然使用标签是国际海事组织最好的解决办法,那就是将“仅由YAML”一词延伸到合理的范围之外。
https://stackoverflow.com/questions/54769350
复制相似问题