Ansible中如何获取split处理后列表的第n项?
在Ansible中获取filter链split输出列表的第n项
直接解决方法
如果用[2]索引报错,大概率是split(':')返回的不是Ansible模板能直接索引的标准列表类型,试试这两种方式:
- 强制转换为列表后索引
把filter链末尾加上| list再索引,确保输出是标准列表:
variable_b.stdout_lines | flatten | first | trim | regex_replace('\\s+', '') | split(':') | list | [2]
- 用
json_query提取json_query对列表索引的支持更稳定,适合这种场景:
variable_b.stdout_lines | flatten | first | trim | regex_replace('\\s+', '') | split(':') | json_query('[2]')
排查步骤
如果还是报错,先确认filter链的输出是否符合预期:
用debug模块打印中间结果,看split后的内容是不是你要的列表:
- debug: var: variable_b.stdout_lines | flatten | first | trim | regex_replace('\\s+', '') | split(':')
如果输出不是列表,说明前面的filter步骤可能返回了非字符串内容,需要检查flatten、first、trim等步骤的结果。
额外提示
如果split后的列表长度可能不足3,建议加上默认值避免报错:
variable_b.stdout_lines | flatten | first | trim | regex_replace('\\s+', '') | split(':') | list | [2] | default('默认文件名')
内容的提问来源于stack exchange,提问作者Appleoddity
相关产品推荐
相关产品推荐

