如何在执行期间注册的 ANSIBLE 变量中转义单引号。我不能使用""因为该变量在注册之前是未知的



例如,当注册变量中有一个单引号时如果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

最新更新