Shell groovy脚本-带变量的sh

Shell groovy脚本-带变量的sh,shell,jenkins,groovy,Shell,Jenkins,Groovy,遗漏了一些明显的东西如何将groovy脚本中的变量传递到shell命令?这是在Jenkins文件的上下文中进行的,如果它与语法有关的话 def COLOR node('nodename'){ stage ('color') { COLOR = "green" echo "color is $COLOR" sh '''COLOR=${COLOR} echo $COLOR''' } } 我希望看到shell位

遗漏了一些明显的东西如何将groovy脚本中的变量传递到shell命令?这是在Jenkins文件的上下文中进行的,如果它与语法有关的话

def COLOR

node('nodename'){

    stage ('color') {

        COLOR = "green"
        echo "color is $COLOR"

        sh '''COLOR=${COLOR}
        echo $COLOR'''

    }
}
我希望看到shell位打印为绿色,但是我得到了以下信息:

[Pipeline] echo
color is green
[Pipeline] sh
[job] Running shell script
+ COLOR=
+ echo

我必须在
sh
上使用三重引号,因为一旦我弄清楚了这一点,就会有内容进入其中。

为了替换字符串中的表达式,必须使用双引号而不是单引号:

def COLOR

node('nodename'){

    stage ('color') {

        COLOR = "green"
        echo "color is $COLOR"

        sh """COLOR=${COLOR}
        echo $COLOR"""

    }
}
如果出于某种原因需要使用单引号,请尝试使用
+
连接:

sh '''COLOR=''' + COLOR + '''
    echo ''' + COLOR

如果此处的代码是要将groovy变量值(“绿色”)分配给环境变量COLOR,而
echo$COLOR
是要打印shell变量,则需要像这样转义
$
,以便shell可以读取它,如下所示:

sh """COLOR=${COLOR}
echo \$COLOR"""
COLOR=“绿色”


sh label:“”,脚本:“echo$COLOR”

argh,看起来您是对的,但这就打乱了我要说的内容(引用问题-尝试将jq/json放入变量中)。我假设没有其他解决办法使用单引号?对于多行字符串(使用三重引号),我怀疑您能否解决很多问题。但我并不完全理解“试图将jq/json放入变量中”是什么意思。以下内容在Groovy中起作用:
def s=“”root{key:“val”}”“”
这是试图将该解决方案引入Groovy/shell组合的后续问题。可能超出了这个问题的范围solve@Alex字符串串联可以与单引号一起使用(参见更新的答案)。稍加解释通常可以改进“仅代码”答案