【问题标题】:How to declare a new variable inside a shell block in groovy script?如何在 groovy 脚本的 shell 块中声明一个新变量?
【发布时间】:2018-06-26 15:33:15
【问题描述】:

对于我的一生,我不知道如何在 groovy 脚本中的 shell 块内声明和使用新变量。

比如这个shell块-

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

抛出一个错误提示

没有这样的属性:类的earlist:GroovyUserScript

如果我在 sh 之前添加一个 defearlist,那么它会抛出错误说 -

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

有人可以帮我在一个常规脚本中如何在 shell 块中声明然后使用变量吗?

【问题讨论】:

  • 直接使用${earlist}
  • 使用单引号sh ''' ... '''。或者你必须逃避$ 标志:\$。当您使用双引号时,groovy 会尝试用 groovy 变量值替换字符串中的 $xxx 表达式。

标签: shell jenkins groovy


【解决方案1】:

在咨询了我工作场所的资深专家后,我找到了我正在寻找的解决方案。

这段代码的问题 -

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

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

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

奖励 TIL - 如果我访问 shell 块内的 groovy 变量,则访问是只读的。我无法编辑 groovy 变量的值,即使是暂时在 shell 块中也是如此。如果我确实想这样做,我可以将 groovy 变量分配给 shell 变量,操作 shell 变量值,将修改后的值保存在文件中,当 shell 块结束时,将文件读入原始 groovy 变量。

【讨论】:

    【解决方案2】:

    改用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

    【讨论】:

      猜你喜欢
      • 2020-01-20
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 2022-06-27
      相关资源
      最近更新 更多