包含美元的字符串变量的回显内容

时间:2020-06-10 14:14:44

标签: bash shell jenkins jenkins-pipeline

我见过How to echo a variable containing an unescaped dollar sign in bash 但是,我的情况略有不同。

我有变量var 我想回显变量var的内容。

之类的命令
echo ${var}

echo "${var}"

在全球范围内都可以

但是,在一种情况下,此变量取值为

var=abdc$32

在这种特定情况下,我的回声无法正常工作,因为它解释了abcd$32符号时没有按预期方式打印$

我不是为变量赋值的人,这就是为什么赋值

var='abcd$32'

无法完成。

该变量实际上是我从Jenkins Credential Binding插件中提取的密码(请参见https://www.jenkins.io/doc/pipeline/steps/credentials-binding/)。

语法:

withCredentials([usernamePassword(credentialsId: 'my_credential', passwordVariable: 'MY_PASSWORD', usernameVariable: 'MY_USERNAME')]) 
{
                   sh "echo MY_PASSWORD ${MY_PASSWORD} "  
}

如果我单引号,

 sh 'echo MY_PASSWORD ${MY_PASSWORD} '

密码将被隐藏(这是您实际从插件中获得的密码)。

我该如何做才能使我回显var MY_PASSWORD变量的真实内容?

1 个答案:

答案 0 :(得分:3)

@markp-fuso的评论所述,在分配期间var=abcd$32会解释美元符号

这是shell引用的基础知识,因此:

 var='abdc$32'
 echo "$var"

了解如何在shell中正确报价,这非常重要:

每个包含空格/元字符和每个扩展名的文字:“ "$var""$(command "$var")""${array[@]}""a & b"。将'single quotes'用于代码或文字$'s: 'Costs $5 US'ssh host 'echo "$HOSTNAME"'。参见
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words