2014-06-05 2 views
1

У меня есть этот маленький кусочек кода:переменной как часть имени массива

#!/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

ответ

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 "" 
+0

Спасибо, это очень полезно! – Alichino

Смежные вопросы