我有字符串参数param1.If我尝试使用param1 = [a]和使用$ param1来构建作业,jenkins添加单引号,如'param1 = [a]'。如何摆脱单引号?< / p>
答案 0 :(得分:2)
这与Jenkins有很强的关系 。问题在于,您希望将变量的值有效地放在shell中引用变量的位置,而bash
只是不起作用。某些字符在命令行(仅)上具有特殊含义,除非转义,例如"
或;
(将同一行上的各个命令分开)。
在shell构建步骤中运行env
时,您会看到双引号实际上是变量值的一部分。所以Jenkins做的一切都正确 - 它将参数逐字传递到shell构建步骤,作为环境变量。
单引号由shell 在回显有效命令时添加,因此您可以复制它并在将其粘贴到shell时获得相同的行为。
这里可能的解决方案是使用eval
- 它的行为就像参数写在命令行上并执行它们一样。当然这可能很危险如果您允许不完全信任的用户为此Jenkins作业提供参数。
$ VAR="you fool ; pwd"
$ echo $VAR
you fool ; pwd
$ eval echo $VAR
you fool
/Users/danielbeck
答案 1 :(得分:0)
如果您正在使用Jenkins的sh
构建步骤&#39; groovy /管道上下文,你只需要变量替换而不是通过bash环境传递变量,你可以做的是在将命令传递给sh
.toString()
之前强制替换。例如:
sh("some command ${param1}".toString())