Bash:动态地将数组分配给新变量

时间:2013-06-18 08:17:26

标签: bash

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

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

假设$opt可以是ONETWO,具体取决于用户输入。我有一个变量ARRAY_THREE,我想根据ARRAY_ONE的值分配给ARRAY_TWO$opt的内容。

以下代码段不起作用,因为它只将元素放在指定数组的第一个位置:

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

3 个答案:

答案 0 :(得分:4)

将您的代码更改为:

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

输出:

three four

修改

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

答案 1 :(得分: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")

答案 2 :(得分:0)

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

#!/bin/bash

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

for i in 1 2 ;
do
    eval mine=( \${foo_$i[@]} ) ;
    echo ${mine[@]} ;
done ;