如何在Bash中通过参数拼接环境变量名获取Slack令牌
问题描述
我有一个环境变量:
slack_auth_token_test="x0xb-xxxxx-xxxx"
我的脚本执行命令为:
./script.sh test
脚本内容如下:
slack_channel=${1} echo "token for slack channel is" echo "${slack_auth_token_[$slack_channel]}"
我传入频道名test作为参数,希望将该频道名追加到环境变量名后,从而获取对应的令牌。
解决方法
你当前的写法${slack_auth_token_[$slack_channel]}无法实现动态拼接环境变量名并取值的需求,Bash中有两种可靠方式可以达成目标:
方法1:使用Bash间接扩展语法(推荐)
通过拼接出完整的环境变量名,再用${!变量名}的语法间接获取对应值:
slack_channel=${1} # 拼接得到完整的环境变量名称 token_var="slack_auth_token_${slack_channel}" echo "token for slack channel is" # 间接扩展获取变量值 echo "${!token_var}"
方法2:使用eval命令(需注意安全风险)
如果能确保传入的参数是可信的,也可以用eval实现动态取值:
slack_channel=${1} echo "token for slack channel is" eval "echo \${slack_auth_token_${slack_channel}}"
注意:
eval会解析并执行传入的任意命令,若参数来源不可信,可能引发安全问题,因此优先推荐第一种方法。
内容的提问来源于stack exchange,提问作者Ajay
相关产品推荐
相关产品推荐

