Ansible如何通过换行符拼接多个变量生成字符串?
Ansible变量拼接后实现换行显示的解决方法
问题场景
现有Ansible脚本如下:
--- - hosts: localhost vars: new_line: "\n" text_msg1: "Hello" text_msg2: "Bye" tasks: - name: append set_fact: new_text: "{{ text_msg1 + new_line + text_msg2 }}" - name: Show Output debug: msg: "{{ new_text }}"
执行后输出中,换行符\n被显示为字面量:
TASK [Show Output] **** ok: [localhost] => { "msg": "Hello\nBye" }
期望输出为换行后的格式:
msg": "Hello Bye"
要求保持text_msg1 + new_line + text_msg2的变量生成方式,且不在每个text_msg变量末尾添加\n。
解决方案
方法一:使用var参数输出变量
将debug任务的msg替换为var,Ansible会自动解析变量中的换行符:
- name: Show Output debug: var: new_text
输出效果:
TASK [Show Output] **** ok: [localhost] => { "new_text": "Hello Bye" }
方法二:替换换行符添加缩进(匹配期望格式)
如果需要严格匹配你想要的缩进格式,可以在msg中使用replace过滤器,将单个换行符替换为换行+7个空格:
- name: Show Output debug: msg: "{{ new_text | replace('\n', '\n ') }}"
执行后输出将完全符合期望:
TASK [Show Output] **** ok: [localhost] => { "msg": "Hello Bye" }
内容的提问来源于stack exchange,提问作者andrew
相关产品推荐
相关产品推荐

