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

How do I escape a single quote inside single quotes in jenkins-pipeline bash command

在 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
  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

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

参见bash manual page

Enclosing characters in single quotes preserves the literal value of each character within the quotes. A single quote may not occur between single quotes, even when preceded by a backslash.

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