将字符串分解为最大长度子字符串列表的最佳实践?
Ansible best practice for breaking a string into a list of max length substrings?
这显示了我正在尝试做的事情
---
- hosts: localhost
gather_facts: false
vars:
str: "abcdefg"
str_parts: []
tasks:
- name: Break string into list of max 3 character parts
set_fact:
str_parts: "{{ str_parts + [ str[:3] ] }}"
str: "{{ str[3:] }}"
until: str == ""
运行它加上-vvv表示循环代码只执行一次。 str_parts 获得单个成员“abc”,str 更改为“defg”并且日志显示“失败 - 重试:将字符串分成最多 3 个字符部分的列表”消息直到超时
循环,呃,为什么不循环?
我可以通过使用命令或 shell 模块在断点处插入逗号然后使用 {{ str | 来解决它split(",") }} 但纯 Ansible 解决方案会更好
编辑:错误主题的行为 set_fact won't update a fact while looping (breaking change)
例如
- set_fact:
str_parts: "{{ str|batch(3)|map('join') }}"
给予
str_parts:
- abc
- def
- g
可以select只匹配项目,例如
- set_fact:
str_parts: "{{ str|batch(3)|map('join')|select('match', '^.{3}$') }}"
给予
str_parts:
- abc
- def
这显示了我正在尝试做的事情
---
- hosts: localhost
gather_facts: false
vars:
str: "abcdefg"
str_parts: []
tasks:
- name: Break string into list of max 3 character parts
set_fact:
str_parts: "{{ str_parts + [ str[:3] ] }}"
str: "{{ str[3:] }}"
until: str == ""
运行它加上-vvv表示循环代码只执行一次。 str_parts 获得单个成员“abc”,str 更改为“defg”并且日志显示“失败 - 重试:将字符串分成最多 3 个字符部分的列表”消息直到超时
循环,呃,为什么不循环?
我可以通过使用命令或 shell 模块在断点处插入逗号然后使用 {{ str | 来解决它split(",") }} 但纯 Ansible 解决方案会更好
编辑:错误主题的行为 set_fact won't update a fact while looping (breaking change)
例如
- set_fact:
str_parts: "{{ str|batch(3)|map('join') }}"
给予
str_parts:
- abc
- def
- g
可以select只匹配项目,例如
- set_fact:
str_parts: "{{ str|batch(3)|map('join')|select('match', '^.{3}$') }}"
给予
str_parts:
- abc
- def