hal*_*ohn 3 groovy jenkins-pipeline
我在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")
Run Code Online (Sandbox Code Playgroud)
问题是当我尝试回显“ $ 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
Run Code Online (Sandbox Code Playgroud)
谢谢!
对于双引号字符串,Groovy将首先对字符串进行插值。
因为it,PLAN和CHANGES有壳的运行变量,而不是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"
Run Code Online (Sandbox Code Playgroud)
或使用不支持插值的单引号:
script: 'cd $it; PLAN=$(terragrunt plan --terragrunt-source-update | landscape);
echo $PLAN; CHANGES=$(echo $PLAN | tail -2); echo $CHANGES'
Run Code Online (Sandbox Code Playgroud)
有关Groovy字符串的更多详细信息,请点击此处