今天笔者在写一个脚本时,遇到了一种技术难点,就是一个变量值的部分内容,引用了另外一个变量,很多地方称这种技术为间接变量的引用
脚本实现的部分逻辑为:定义了多个关联数组(关联数组不支持二维级多维),需要对多个关联数组的键进行遍历取值
这样,笔者在定义多个关联数组时,变量的名字就定义的相对规律一些,如server_01 、server_02
在使用for遍历时,需要先得到这些关联数组,然后再取它的固定的键的值,笔者最开始使用如下方法:
#!/bin/bash # declare -A server_01 server_02 server_01[instance_id]=i-0c2f35d32afcadd5b server_01[user]=qq_5201351 server_02[instance_id]=i-0323eabc546829ead server_02[user]=qq_5201351 for server in server_{01..02};do instance_id=${$server[instance_id]} user=${$server["user"]} echo $instance_id $user done
这样执行时,就会直接报错:xxx.sh: line 13: ${$server[instance_id]}: bad substitution
解决方法:对于关联数组这种场景,笔者能想到的只有如下一种使用eval的方法:
#!/bin/bash # declare -A server_01 server_02 server_01[instance_id]=i-0c2f35d32afcadd5b server_01[user]=qq_5201351 server_02[instance_id]=i-0323eabc546829ead server_02[user]=qq_5201351 for server in server_{01..02};do eval instance_id=\${$server[instance_id]} eval user=\${$server["user"]} echo $instance_id $user done
执行结果,就是正常的,我们想要得到的结果
i-0c2f35d32afcadd5b qq_5201351
i-0323eabc546829ead qq_5201351
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
补充,对于普通的变量,还有一种方式,是可以通过${!var}进行间接变量取值,效果如下:
var=name name=admin echo ${!var}
这样也可以通过var变量得到name变量的值,最终输出admin,但是这样方式,不合适上面案例中的关联数组的场景
尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/15587703.html
作者:一名卑微的IT民工
出处:https://www.cnblogs.com/5201351
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
由于博主的水平不高,文章没有高度、深度和广度,只是凑字数,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用读书、参考、引用、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个卑微的IT民工!