我正在尝试解决一个非常奇怪的问题。我正在努力完成这样的事情,
# loaded ahead of time
silly1_cred="secret"
silly2_cred="password"
important_var="silly1" #known at run time
cred=`echo ${important_var}_cred` #now value of cred is silly1_cred
现在我希望能够做这样的事情:eval $cred
访问“秘密”值,但它得到错误命令未找到:silly1_cred
另外,如果这是不可能的,请让我,我搜索并得到 this stackoverflow question 作为建议,但它似乎没有解决我的问题。
From another question 我发现了一些似乎能准确回答我正在寻找的问题,但我没有得到预期的结果。
答案 0 :(得分:0)
eval
有效,但它需要一个命令,而不仅仅是一个字符串。所以你可以做例如cred=$(eval "echo \"\$${important_var}_cred\"")
。请注意,您需要一个文字 $
以便将变量扩展为其值;我在扩展周围加上了文字双引号,因为您几乎总是应该在扩展周围加上双引号。
但是 eval
is best avoided 因为它使您的代码特别容易受到注入攻击。
如果将变量名单独放到另一个变量中,可以使用${!var}
语法,比eval
更安全:
varname=${important_var}_cred
cred=${!varname}
请参阅 Bash 常见问题中的 this entry。