如何去除Ansible列表元素中的u'前缀
解决Ansible 2.9中列表元素显示u'前缀的问题
问题原因
u'是Python 2中Unicode字符串的标识,Ansible 2.9基于Python 2运行,当你将列表以字符串插值的形式赋值给fact时,会触发Python的字符串表示逻辑,导致输出显示u'前缀。实际上这些前缀并不是字符串内容的一部分,仅为显示格式问题。
修改方案
方案1:修正现有set_fact任务写法
将你的"set fact to array"任务从字符串包裹的写法,改为YAML原生键值对格式,避免把列表转换成字符串类型:
- name: set fact to array set_fact: basename_array: "{{ item_path_basename_list.results | map(attribute='ansible_facts.dir_name_list2_basename') | list }}"
方案2:简化流程,直接从find结果提取(推荐)
去掉中间循环set_fact的冗余步骤,直接通过map过滤器从find模块的结果中提取basename,一步生成目标列表:
# 替换原有所有相关set_fact和debug任务,直接执行此步骤 - name: Extract directory basenames from find results set_fact: basename_array: "{{ zookeeper_data_dir.files | map(attribute='path') | map('basename') | list }}"
验证效果
修改后执行debug任务,输出会显示为标准的YAML列表格式:
ok: [zk3-dev] => { "msg": "basename_array &&&&&&&&&& [\"version-2_backup\", \"version-2\"]" }
若直接debug变量本身:
- debug: var: basename_array
输出会更清晰:
ok: [zk3-dev] => { "basename_array": [ "version-2_backup", "version-2" ] }
补充说明
即使不修改,u'前缀也不会影响后续任务对列表元素的使用——它只是Python 2的显示标记,字符串实际内容完全正常。修改写法仅为让输出格式符合预期。
内容的提问来源于stack exchange,提问作者adbdkb
相关产品推荐
相关产品推荐

