在带有连接字符串的默认 Ansible 过滤器中转义反斜杠
Escaping backslash in a default Ansible filter with concatenated strings
我一直在努力解决以下问题:
我想转义默认过滤器中的反斜杠以连接两个变量。但是 Ansible 按预期抛出以下错误(反斜杠转义了 "):
jinja2.exceptions.TemplateSyntaxError: unexpected char '"' at 41
我一直在解决这个问题,但我想知道是否可以在我的字符串中以单个反斜杠 (\) 结尾。添加反斜杠以转义连接字符串中的反斜杠最终会给我一个双反斜杠。我知道 Ansible 逃脱了反斜杠。以下剧本演示了差异。
---
- hosts: 127.0.0.1
connection: local
vars:
loop_var:
- name: archive1
path: '\domain.com\archive1'
targetpath: 'foobar'
fallback: 'bla\bla\bla'
- name: archive2
path: '\domain.com\archive2'
fallback: 'bla\bla'
tasks:
- name: wanted output
debug:
msg: '{{ item.path }}\{{ item.fallback }}'
loop: "{{ loop_var }}"
- name: output default
debug:
msg: '{{ item.targetpath | default(item.path + "\" + item.fallback) }}'
loop: "{{ loop_var }}"
这似乎是 Jinja 的词法分析器或 Ansible 的 Jinja 集成中的错误。您可以通过将 \
移到表达式之外来解决它,这样它就不会触发错误:
- name: output default
debug:
msg: "{{ item.targetpath | default(item.path ~ bs ~ item.fallback) }}"
loop: "{{ loop_var }}"
vars:
bs: \
我一直在努力解决以下问题:
我想转义默认过滤器中的反斜杠以连接两个变量。但是 Ansible 按预期抛出以下错误(反斜杠转义了 "):
jinja2.exceptions.TemplateSyntaxError: unexpected char '"' at 41
我一直在解决这个问题,但我想知道是否可以在我的字符串中以单个反斜杠 (\) 结尾。添加反斜杠以转义连接字符串中的反斜杠最终会给我一个双反斜杠。我知道 Ansible 逃脱了反斜杠。以下剧本演示了差异。
---
- hosts: 127.0.0.1
connection: local
vars:
loop_var:
- name: archive1
path: '\domain.com\archive1'
targetpath: 'foobar'
fallback: 'bla\bla\bla'
- name: archive2
path: '\domain.com\archive2'
fallback: 'bla\bla'
tasks:
- name: wanted output
debug:
msg: '{{ item.path }}\{{ item.fallback }}'
loop: "{{ loop_var }}"
- name: output default
debug:
msg: '{{ item.targetpath | default(item.path + "\" + item.fallback) }}'
loop: "{{ loop_var }}"
这似乎是 Jinja 的词法分析器或 Ansible 的 Jinja 集成中的错误。您可以通过将 \
移到表达式之外来解决它,这样它就不会触发错误:
- name: output default
debug:
msg: "{{ item.targetpath | default(item.path ~ bs ~ item.fallback) }}"
loop: "{{ loop_var }}"
vars:
bs: \