如何在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
相关产品推荐
相关产品推荐

