如何在jenkins-pipeline bash命令中的单引号内转义单引号

时间:2019-08-12 22:35:04

标签: bash jenkins-pipeline quotes

在jenkins-pipeline中,我试图使用SED将以下行添加到文件末尾。

sh "sed -i '\$ s/\$/ public_file=\\/var\\/lib\\/jenkins\\/workspace\\/test-project\\ ansible_ssh_common_args='-o StrictHostKeyChecking=no'  /' file.txt"

但是我不知道如何在我的Jenkins文件中转义以下行以使其正常工作。

ansible_ssh_common_args='-o StrictHostKeyChecking=no' 

我已经尝试了以下方法,这些方法可以在katacoda游乐场中使用,但不能在jenkins管道中使用。

'"'"'-o StrictHostKeyChecking=no'"'"'  /' file.txt

2 个答案:

答案 0 :(得分:0)

  1. 使用"来包装sed命令,然后您可以直接在命令中使用'而不必对其进行转义。

  2. 使用@,但将/用作sed s命令的定界符,则无需转义出现在文件路径中的/即可推荐简洁明了。

sed -i "\$ s@\$@ public_file=/var/lib/jenkins/workspace/test-project ansible_ssh_common_args='-o StrictHostKeyChecking=no'  @" file.txt

答案 1 :(得分:0)

bash中,您不能在单引号内转义单引号。

请参见bash manual page

  

将字符括在单引号中可保留引号内每个字符的字面值。即使在前面加上反斜杠,也不能在单引号之间引起单引号。

您可以使用双引号代替;然后根据需要逃避它们。然后,您可以在其中使用单引号,而无需进一步转义。