我有两个数组,我想根据用户输入动态分配给变量
ARRAY_ONE=('one' 'two')
ARRAY_TWO=('three' 'four')
假设$opt
可以是ONE
或TWO
,具体取决于用户输入。我有一个变量ARRAY_THREE
,我想根据ARRAY_ONE
的值分配给ARRAY_TWO
或$opt
的内容。
以下代码段不起作用,因为它只将元素放在指定数组的第一个位置:
TEMP=ARRAY_$opt
ARRAY_THREE=${!TEMP}
echo $ARRAY_THREE # 'one'
答案 0 :(得分:4)
将您的代码更改为:
TEMP=ARRAY_$opt[@]
ARRAY_THREE=(${!TEMP})
echo ${ARRAY_THREE[@]}
three four
修改强>
答案 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 ;