Ansible 转义双引号和单引号

Posted

技术标签:

【中文标题】Ansible 转义双引号和单引号【英文标题】:Ansible escaping double quotes and single quotes 【发布时间】:2015-10-07 12:44:40 【问题描述】:

我想用这个 ansible 命令在 nrpe.cfg 中插入一个 nrpe 命令

check_tomcat_threads.pl -H localhost -p 30011 -C '"http-bio-30011"' -w 200 -c 50

但问题是 '" 和 "'

要在 nrpe.cfg 中设置这一行,请使用命令

 -  regexp: '^command\[SERVICE_tomcat_pi_Threads\]', line: "command[SERVICE_tomcat_Threads_pi]=/appiu/monitoring/check_tomcat_threads.pl -H localhost -p 30011 -C '\"http-bio-30011\"' -w 200 -c 50" 

但 nrpe.cfg 中的结果是

...-C http-bio-30011..

如果我在 ansible 脚本中使用 ''\"http-bio-30011\"''

nrpe.cfg 中的结果是

...-C "http-bio-30011"... 

我怎样才能转义单引号和双引号来得到这个-C '"http-bio-30011"'

问候乔治

【问题讨论】:

如果回答对你有帮助,最好accept它。 【参考方案1】:

这是lineinfile 模块中的bug。

从 YAML 的角度来看,正确的语法如下(但只有在修复错误时才会起作用)。你应该 escape 在双引号文字中只使用两个字符 "\

line: "command[SERVICE_tomcat_Threads_pi]=/appiu/monitoring/check_tomcat_threads.pl -H localhost -p 30011 -C '\"http-bio-30011\"' -w 200 -c 50"

要临时解决它,您可以使用:

line: 'command[SERVICE_tomcat_Threads_pi]=/appiu/monitoring/check_tomcat_threads.pl -H localhost -p 30011 -C \''"http-bio-30011"\'' -w 200 -c 50'

【讨论】:

以上是关于Ansible 转义双引号和单引号的主要内容,如果未能解决你的问题,请参考以下文章

Javascript - 如何在 Kendo 模板上转义双引号和单引号

在mysql中插入时保留双引号和单引号以及转义字符

SQL双引号和单引号同时存在的时候该如何转义呢? 比如这一句

javascript中双引号和单引号之间的歧义

PHP字符串定义方式和单引号双引号的区别

Perl双引号和单引号的区别