例如,当注册变量中有一个单引号时如果var.stdout
的值是IxMy5NPG'dCbrHD
(,注意string中的单引号)
当我在即将到来的任务中使用这个变量时,
lineinfile:
path: /path/to/file.j2
regexp: "X1234"
line: {{ var.stdout }}
mode: 0755
state: present
我得到以下错误
ERROR! failed at splitting arguments, either an unbalanced
jinja2 block or quotes
只有在字符串中有单引号时才会出现这种情况,字符串可能有单引号,也可能没有单引号。因此,我不能期待这已经和处理它。我尝试了regex_replace过滤器上的变量,如{{ var.stdout | regex_replace("'", "'") }}
,我得到"在模块执行期间意外失败。">
表达式{{ var.stdout }}
必须加引号
lineinfile:
path: file.j2
regexp: X1234
line: {{ var.stdout }} # <-- WRONG
例如,给定文件
shell> cat file.j2
X1234
下面的任务
lineinfile:
path: file.j2
regexp: X1234
line: "{{ var.stdout }}" # <-- CORRECT
工作正常
shell> cat file.j2
IxMy5NPG'dCbrHD
如果您想将引号替换为下划线"_">
- set_fact:
var_stdout: "{{ var.stdout|regex_replace(_regex, _replace) }}"
vars:
_regex: "'"
_replace: "_"
为
var_stdout: IxMy5NPG_dCbrHD
要避免转义,请将_regex/_replace放入任务的变量中。
如果你想转义引号
_replace: "\'"
为
var_stdout: IxMy5NPG'dCbrHD