zoukankan      html  css  js  c++  java
  • 关于变量的值中包含另一个变量引用的处理间接变量引用

    今天笔者在写一个脚本时,遇到了一种技术难点,就是一个变量值的部分内容,引用了另外一个变量,很多地方称这种技术为间接变量的引用

    脚本实现的部分逻辑为:定义了多个关联数组(关联数组不支持二维级多维),需要对多个关联数组的键进行遍历取值

    这样,笔者在定义多个关联数组时,变量的名字就定义的相对规律一些,如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民工!

  • 相关阅读:
    下个月去北京了,心如一团乱麻好多事情要解决,但是不知道从哪里开始,还是顺其自然吧,一件件的解决
    C# SQLServer 数据库连接类
    C#页面缓存写法
    从北京站到天通苑怎么走,
    工作描述的介绍|如何写工作描述
    网线制作方法|国标网线制作方法|常用的网线制作方法
    递归删除空文件夹
    如何使用股票行情软件看股票
    正则批量验证函数
    简单的游标更新日期例子
  • 原文地址:https://www.cnblogs.com/5201351/p/15587703.html
Copyright © 2011-2022 走看看