You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ansible变量中用YAML折叠带缩进的多行SQL字符串?

嘿,这个问题我之前也碰到过,只用YAML完全能解决!核心是搞懂YAML字符串的折叠规则,给你几个靠谱的解决方案:

方法1:正确使用>-折叠块(推荐)

YAML的>-标记会把块内的中间换行符替换成空格,同时去掉末尾的多余换行,但有个关键前提:块内所有SQL行的缩进必须完全一致(相对于foo: >-的位置)。调整你的代码如下:

- hosts: localhost
  gather_facts: no
  tasks:
    - debug: var=foo
      vars:
        foo: >-
          select foo
          from bar
          where ok
          join left
          select baz
          from boo

执行后foo的值会变成纯单行字符串:"select foo from bar where ok join left select baz from boo"

方法2:双引号+换行转义符\

如果你习惯用多行编辑但要强制合并为单行,可以用双引号包裹字符串,每行末尾加\告诉YAML忽略当前换行:

- hosts: localhost
  gather_facts: no
  tasks:
    - debug: var=foo
      vars:
        foo: "select foo \
              from bar \
              where ok \
              join left \
              select baz \
              from boo"

注意:行首的缩进空格会被保留到最终字符串里,如果不想带多余空格,把SQL内容顶格写就行:

foo: "select foo \
from bar \
where ok \
join left \
select baz \
from boo"

方法3:直接写单行字符串(最直白)

如果SQL语句长度允许,直接把整个查询写在一行最省事,不需要任何折叠或转义:

foo: "select foo from bar where ok join left select baz from boo"

至于你之前用>-没成功,大概率是块内的缩进不一致(比如你示例里的join left行缩进比其他行少),YAML会把缩进不一致的行视为独立块,导致换行被保留。只要保证所有SQL行的缩进完全相同,>-就能正常工作。

内容的提问来源于stack exchange,提问作者George Shuklin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:45:37