如何将Bash动态变量取值逻辑内联到echo命令以精简代码?
解决方案
嘿,这事儿好办!咱们可以借助Bash的间接变量扩展特性,直接把动态取值的逻辑内联到echo命令里,完全省去单独定义value变量的步骤,甚至还能进一步精简代码。
第一步:去掉多余的value变量
原来的代码里,value="${!tempStr}"只是把间接引用的结果临时存起来,咱们直接把${!tempStr}放到echo里就行:
tempStr="${1^^}_DOCKER_DEPLOY_KEY" export "$tempStr"=gggg # 给变量名加引号更规范,避免特殊字符引发的问题 echo "The value is ${!tempStr}"
这里${!tempStr}的作用是:先解析tempStr的值(也就是你拼接出来的目标变量名),然后获取这个变量对应的内容——和你原来用value存储的结果完全一致。
第二步:极致精简(完全内联变量名拼接)
如果想更进一步,连tempStr变量都省去,直接把变量名的拼接逻辑放到间接扩展里也是可行的:
export "${1^^}_DOCKER_DEPLOY_KEY"=gggg echo "The value is ${!${1^^}_DOCKER_DEPLOY_KEY}"
这里${1^^}_DOCKER_DEPLOY_KEY会先展开成完整的变量名(比如如果第一个参数是test,就变成TEST_DOCKER_DEPLOY_KEY),然后!符号告诉Bash:“去取这个名字对应的变量的值”,完美实现内联的动态取值。
原理说明
Bash的${!variable_name}语法就是间接变量扩展,它允许你通过一个存储着变量名的变量,去获取目标变量的内容。这正是你原来代码里value="${!tempStr}"的核心逻辑,把它直接嵌入echo命令就省去了中间变量的定义。
内容的提问来源于stack exchange,提问作者user1167253
相关产品推荐
相关产品推荐

