我在Jenkins管道中运行了这个shell脚本
def planResults = sh(returnStdout: true, script: "cd $it; PLAN=\$(terragrunt plan --terragrunt-source-update | landscape); echo "$PLAN"; CHANGES=$(echo "$PLAN" | tail -2); echo $CHANGES")
问题是当我尝试回显“ $ PLAN”变量时。
这是groovy推荐的解决方案,它可以在PLAN设置为\ $(terragrunt的位置附近使用,但是对于$内的双引号不起作用。我需要双引号才能使此命令正常工作。>
solution: either escape a literal dollar sign "\$5" or bracket the value
expression "${5}" @ line 34, column 148.
ce-update | landscape); echo "$PLAN"; CH
谢谢!
答案 0 :(得分:4)
对于双引号字符串,Groovy将首先对字符串进行插值。
因为it
,PLAN
和CHANGES
是Shell的运行时变量,而不是Groovy运行时的变量。 Groovy在插值期间无法从Groovy变量堆栈中找到响应值来替换$it/PLAN/CHANGS
。
因此,如果在这种情况下使用双引号,则需要转义所有$
:
script: "cd \$it; PLAN=\$(terragrunt plan --terragrunt-source-update | landscape);
echo \$PLAN; CHANGES=\$(echo \$PLAN | tail -2); echo \$CHANGES"
或使用不支持插值的单引号:
script: 'cd $it; PLAN=$(terragrunt plan --terragrunt-source-update | landscape);
echo $PLAN; CHANGES=$(echo $PLAN | tail -2); echo $CHANGES'
有关here上Groovy字符串的更多详细信息