【问题标题】:In bash, how to use a variable as part of the name of another variable?在 bash 中,如何使用一个变量作为另一个变量名称的一部分?
【发布时间】:2013-08-14 03:34:47
【问题描述】:

一个简单的问题

我有一些数组:

array_0=(1 2 3) 
array_1=(1 2 3) 
.......

我有一个变量a:

 a=0
 echo ${array_"$a"[0]}

有一个错误的替换错误。有人知道正确的语法吗?

【问题讨论】:

    标签: bash variables


    【解决方案1】:

    您可以做的一件事是使用以下语法:

    array_a=array_$a[0]
    echo ${!array_a}
    

    ! 作为第一个字符表示您希望通过计算变量然后将结果用作表达式来使用额外的间接级别。

    【讨论】:

      【解决方案2】:

      你可以使用eval:

      #!/bin/bash
      array_0=(1 2 3)
      array_1=(4 5 6)
      array_2=(7 8 9)
      for a in {0..2} ; do
        for i in {0..2} ; do
          eval 'echo ${'"array_$a[$i]"'}'
        done
      done
      

      Vaughn Cato 的语法略显冗长,但 echo 语句本身更易于理解。您将双 for 循环的内部部分替换为这两行:

          array_a=array_$a[$i]
          echo ${!array_a}
      

      【讨论】:

      • 如果 a 本身是一个数组,你知道吗?例如,我将 $a 替换为 ${array_2[$j]}
      • @HaoShen:无论哪种解决方案,这样做都应该没有问题。
      • 嗨,非常感谢。我只是卡住了。如果我想将结果分配给变量怎么办。例如,eval 'result=${'"array_$a[$i]"'}'。它不起作用......对不起我一直天真的问题......
      • 例如,您可以用$() 包围eval(带有echo 的那个),并将其分配给一个变量。使用 Vaughn 的解决方案,您只需将 ${!array_a} 分配给一个变量。
      • 谢谢。实际上 eval 'result=${'"array_$a[$i]"'}' 有效。是我的错
      【解决方案3】:

      您可以使用eval

      echo $(eval echo \${array_$a[0]})
      

      请注意,我必须在第一个美元符号前加一个反斜杠,以防止 shell 插入它。

      不用说,数组的全部目的是允许您执行这种类型的变量插值,而无需像我需要数组时那样大惊小怪地回显 eval原始的 Bourne shell。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多