如何在groovy脚本的shell块中声明新变量?

时间:2018-06-26 15:33:16

标签: shell jenkins groovy

对于我来说,我无法弄清楚如何在常规脚本的shell块中声明和使用新变量。

例如,此shell块-

display

抛出错误

  

没有这样的属性:类GroovyUserScript的入耳列表

如果我在sh之前添加 def耳机列表,那么它会抛出错误--

  

没有方法签名:GroovyUserScript.sh()适用于   参数类型:(org.codehaus.groovy.runtime.GStringImpl)值:[   出口earlist ='abc.ear,def.ear'回声;

有人可以帮助我如何在groovy脚本中的shell块中声明和使用变量吗?

2 个答案:

答案 0 :(得分:0)

使用triple single quoted string代替,它不会插值变量:

sh '''
    export earlist='abc.ear,def.ear'
    echo $earlist;
'''

请参见triple single quoted strings上的文档:http://groovy-lang.org/syntax.html#_triple_single_quoted_string

以下是Groovy中可用字符串类型的概述:http://groovy-lang.org/syntax.html#_string_summary_table

答案 1 :(得分:0)

在我的工作场所咨询了高级专家之后,我找到了所需要的解决方案。

此代码存在的问题-

sh """
    export earlist='abc.ear,def.ear'
    echo $earlist;
"""

是当我说$ earlist时,编译器会查找一个名为earlist的常规变量,但找不到。由于earlist中有一个shell变量,因此我需要转义$。因此,正确的代码是-

sh """
    earlist='abc.ear,def.ear'
    echo \$earlist;
"""

Bonus TIL-如果我访问shell块内的常规变量,则该访问为只读。我无法编辑groovy变量的值,即使在shell块中也无法临时编辑。如果愿意,可以将groovy变量分配给shell变量,操纵shell变量值,将修改后的值保存在文件中,当shell块结束时,将文件读入原始groovy变量中。 >