首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何折叠带有标识的多行yaml字符串

如何折叠带有标识的多行yaml字符串
EN

Stack Overflow用户
提问于 2019-02-19 15:07:45
回答 2查看 1K关注 0票数 3

(在给出答案之前,请注意,我尝试过>>-,但没有成功)。

我试着在可变变量上表现得很好。我希望有一个格式良好的SQL (伪sql)查询,不需要新的行字符就可以折叠成一行。

我的问题是,如果字符串有标识,>运算符就不能工作.

代码语言:javascript
运行
复制
---
- 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能力就能解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-19 15:38:17

是啊,这是YAML最奇怪的“特色”。使用普通的多行标量代替:

代码语言:javascript
运行
复制
---
- hosts: localhost
  gather_facts: no
  tasks:
   - debug: var=foo
  vars:
   foo:
     select foo
       from bar
       where ok
     join left
       select baz
       from boo
票数 2
EN

Stack Overflow用户

发布于 2019-02-19 16:22:22

从YAML加载的数据中获得换行符的原因是,根据YAML规范

折叠允许在任何一个空格字符分隔两个非空格字符的地方分割长行。

而且,由于在from bar之前有空格,所以之前的换行线不可能是“折叠”的,而是硬换行符。

若要单独使用YAML来“解决”此问题,您可以尝试使用@flyx已经指出的纯文本标量,但请注意,对于不适用折叠标量的普通标量有一些限制。这可能不适用于您的示例,但可能是当您有真正的SQL语法时。

你能做的另一件事就是不要在褶皱之后缩进:

代码语言:javascript
运行
复制
foo: >
  select foo
  from bar
  where ok
  join left
  select baz
  from boo

这并不能使事情变得更加可读性,但也没有普通标量所具有的限制。

最好的解决方案是添加标记并使用文字样式标量,同时保持最大的可读性。

代码语言:javascript
运行
复制
foo: !flatten |
  select foo
    from bar
    where ok
  join left
    select baz
    from boo

并为标记!flatten加载对象,在加载过程中适当地展开以下行(即用单个换行符替换换行符后面的空格)。

虽然使用标签是国际海事组织最好的解决办法,那就是将“仅由YAML”一词延伸到合理的范围之外。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54769350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档