在bash中,如何使用变量作为另一个变量名称的一部分?

Hao*_*hen 5 variables bash

只是一个简单的问题

我有一些数组:

array_0=(1 2 3) 
array_1=(1 2 3) 
.......
Run Code Online (Sandbox Code Playgroud)

我有一个变量a:

 a=0
 echo ${array_"$a"[0]}
Run Code Online (Sandbox Code Playgroud)

得到了错误的替换错误.有谁知道正确的语法?

Vau*_*ato 5

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

array_a=array_$a[0]
echo ${!array_a}
Run Code Online (Sandbox Code Playgroud)

!作为第一个字符表示要通过评估的变量,然后使用结果作为表达式中使用额外的间接水平.


jxh*_*jxh 1

您可以使用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
Run Code Online (Sandbox Code Playgroud)

Vaughn Cato 的语法稍微冗长一些,但echo语句本身更容易理解。for您可以用这两行替换双循环的内部部分:

    array_a=array_$a[$i]
    echo ${!array_a}
Run Code Online (Sandbox Code Playgroud)