簡體   English   中英

groovy escape雙引用$

[英]groovy escape double quoted $

我有一個在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,但它不適用於$ inside內部雙引號。而且我需要雙引號才能使此命令正常工作。

solution: either escape a literal dollar sign "\$5" or bracket the value 
expression "${5}" @ line 34, column 148.
ce-update | landscape); echo "$PLAN"; CH

謝謝!

對於雙引號字符串,Groovy將首先對字符串進行插值。

因為itPLANCHANGES是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'

關於Groovy string的更多細節在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM