我见过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变量的真实内容?
答案 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