Bash:将数组动态分配给新变量
我有两个数组,我想根据用户输入动态分配给变量Bash:将数组动态分配给新变量,bash,Bash,我有两个数组,我想根据用户输入动态分配给变量 ARRAY_ONE=('one' 'two') ARRAY_TWO=('three' 'four') 假设$opt可以是ONE或TWO,具体取决于用户输入。我有一个变量ARRAY\u THREE,我想分配给ARRAY\u ONE或ARRAY\u TWO的内容,具体取决于$opt的值 以下代码段不起作用,因为它只接受指定数组第一个位置的元素: TEMP=ARRAY_$opt ARRAY_THREE=${!TEMP} echo $ARRAY_THREE
ARRAY_ONE=('one' 'two')
ARRAY_TWO=('three' 'four')
假设$opt
可以是ONE
或TWO
,具体取决于用户输入。我有一个变量ARRAY\u THREE
,我想分配给ARRAY\u ONE
或ARRAY\u TWO
的内容,具体取决于$opt
的值
以下代码段不起作用,因为它只接受指定数组第一个位置的元素:
TEMP=ARRAY_$opt
ARRAY_THREE=${!TEMP}
echo $ARRAY_THREE # 'one'
将代码更改为:
TEMP=ARRAY_$opt[@]
ARRAY_THREE=(${!TEMP})
echo ${ARRAY_THREE[@]}
输出:
编辑:
现场演示:这是我的解决方案,它不使用临时变量:
#!/bin/bash
foo_1=(fff ddd) ;
foo_2=(ggg ccc) ;
for i in 1 2 ;
do
eval mine=( \${foo_$i[@]} ) ;
echo ${mine[@]} ;
done ;
@佩雷尔:请检查链接的演示。@佩雷尔:编辑演示以添加
echo${ARRAY\u THREE[0]}
和echo${ARRAY\u THREE[1]}
效果很好。谢谢
three four
#!/bin/bash
foo_1=(fff ddd) ;
foo_2=(ggg ccc) ;
for i in 1 2 ;
do
eval mine=( \${foo_$i[@]} ) ;
echo ${mine[@]} ;
done ;