2

我有两个数组,我想根据用户输入动态分配给一个变量

ARRAY_ONE=('one' 'two')
ARRAY_TWO=('three' 'four')

假设这$opt可以是ONE或者TWO取决于用户输入。我有一个变量,ARRAY_THREE我想根据.ARRAY_ONEARRAY_TWO$opt

以下代码段不起作用,因为它只获取分配数组的第一个位置的元素:

TEMP=ARRAY_$opt
ARRAY_THREE=${!TEMP}
echo $ARRAY_THREE     # 'one'
4

3 回答 3

4

将您的代码更改为:

TEMP=ARRAY_$opt[@]
ARRAY_THREE=(${!TEMP})
echo ${ARRAY_THREE[@]}

输出:

three four

编辑:

现场演示:http: //ideone.com/hocG24

于 2013-06-18T08:35:14.650 回答
3
$ opt=ONE
$ TEMP="ARRAY_${opt}[@]"
$ ARRAY_THREE=( "${!TEMP}" )
$ set|grep ^ARRAY_
ARRAY_ONE=([0]="one" [1]="two")
ARRAY_THREE=([0]="one" [1]="two")
ARRAY_TWO=([0]="three" [1]="four")
于 2013-06-18T08:30:36.880 回答
0

这是我不使用临时变量的解决方案:

#!/bin/bash

foo_1=(fff ddd) ;
foo_2=(ggg ccc) ;

for i in 1 2 ;
do
    eval mine=( \${foo_$i[@]} ) ;
    echo ${mine[@]} ;
done ;
于 2017-01-05T20:41:36.817 回答