繁体   English   中英

如何评估变量bash脚本中的变量?

[英]How to evaluate a variable inside a variable bash scripting?

我有一堆这样的数组:

array1=("A" "B")
array2=("C" "D")
array3=("E" "F" "G")

我想遍历数组以及每个数组中的元素。 这是我试图实现的方法:

for i in `seq 1 2`
do 
    for elm in ${array${i}[@]}
    do
        echo "the element in array$i is $elm" 
    done
done

但是,这给了我:

./new_test.sh: line 6: ${array${i}[@]}: bad substitution

我有点知道我在做什么,因为我不希望第一个$评估其中的${i}

我该如何预防?

这应该工作:

var=array$i[@]
for elm in ${!var}
...

例:

#!/bin/bash
array1=("A" "B")
array2=("C" "D")
array3=("E" "F" "G")

for i in `seq 1 2`
do 
    var=array$i[@]
    for elm in "${!var}"
    do
        echo "the element in array$i is $elm" 
    done
done

输出:

the element in array1 is A
the element in array1 is B
the element in array2 is C
the element in array2 is D


间接扩展(来自bash手册):

如果参数的第一个字符是感叹号(!),则它将引入一定程度的变量间接寻址。 Bash使用由其余参数形成的变量的值作为变量的名称; 然后扩展此变量,并在其余替换中使用该值,而不是参数本身的值。 这称为间接扩展 例外是$ {!prefix *}和$ {!name [@]}的扩展,如下所述。 感叹号必须紧随左括号之后才能引入间接指示。

#!/bin/bash

array1=("A" "B")
array2=("C" "D")
array3=("E" "F" "G")

for i in "array"{1..3}"[@]"; do
    echo "$i"
    for el in "${!i}"; do
        echo "$el"
    done
done

输出为:

array1[@]
A
B
array2[@]
C
D
array3[@]
E
F
G

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM