首页 > 解决方案 > 回显包含美元的字符串变量的内容

问题描述

我已经看到如何在 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 的真实内容?

标签: bashshelljenkinsjenkins-pipeline

解决方案


正如@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


推荐阅读