变量作为数组名称的一部分

时间:2014-06-05 08:58:17

标签: bash

我有一小段代码:

#!/bin/bash

item01=('item1' '1' '20')
item02=('item2' '4' '77')
item03=('item3' '17' '15')
zeroone=01
zerotwo=02


echo ""
declare -a array=()
array=${item$zeroone[@]}
echo ""
echo ${array[@]}
echo ""

显然这不起作用(糟糕的替代)。

有没有办法让它发挥作用?这样一个变量可以是数组名称的一部分吗?

而且,特别是要做这项工作:

array[0]=${item$zeroone[0]}

another_variable=${item$zeroone[0]}

THX

1 个答案:

答案 0 :(得分:2)

更好地使用关联数组:

declare -A item=([1, 0]='item1' [1, 1]='1' [1, 2]='20')
...

访问元素:

one=1
echo "${item[$one, 0]}"

循环:

for ((I = 0; I <= 2; ++I)); do
    echo "${item[$one, $i]}"
done

您也可以使用字符串而不是数字:

declare -A item=(["01", 0]='item1' ["01", 1]='1' ["01", 2]='20')

另一个答案:您实际上可以使用引用:

item01=('item1' '1' '20')
item02=('item2' '4' '77')
item03=('item3' '17' '15')
zeroone=01
zerotwo=02

echo ""
ref="item${zeroone}[@]"
declare -a array=("${!ref}")  ## Still produces 3 arguments as if "${item01[@]}" was called
echo ""
echo "${array[@]}"
echo ""