2012-02-08 3 views
0

Я пишу скрипт bash, где мне нужно создавать массивы внутри цикла for и называть каждый массив, используя строку, содержащуюся в счетчике (элемент массива), каждую итерацию.Bash - Создание массивов с использованием счетчика циклов

Вот код:

myArray=(joe bob dave mark) 


for i in "${myArray[@]}" 
do 
    "$k_array"=(`cat fileUsedToPopulate.txt`) 
done 

# echo to test if one of the arrays has been created and populated 

for j in "${joe_array[@]}" 
do 
    echo $j 
done 

Желаемый результат 4 массивы, joe_array bob_array и т.д., каждый заполняется с файлом.

Однако я не нашел в любом случае, чтобы избежать $ k, так что он присоединяется к имени массива при его объявлении/заполнении.

Здесь ошибка я получаю:

строка 30: ошибка синтаксиса около неожиданной лексемы `cat fileUsedToPopulate.txt ' линии 30: "$k_array"=( кошачьих $ DIR/$ braDir/oem.txt`)'

Спасибо за любая помощь предоставляется.

ответ

2

Использования Eval присвоить переменный, имя которого зависит от другого переменного:

val=$(cat fileUsedToPopulate.txt) 
for k in "${myArray[@]}" 
do 
    eval "${k}_array"="\"${val}\"" 
done 

Обратите внимание, что вам нужны вложенные двойные кавычки (с надлежащим экранированием), если содержимое файла содержит пробел или другой разделитель. В противном случае оболочка будет интерпретировать ее часть как команду для выполнения. Кроме того, вам нужны скобки вокруг имени переменной в $k или оболочка будет искать имена переменных k_array.

+0

yep, я получаю это ;-). Хорошего дня. – shellter

+0

Спасибо, ты тоже! –

+0

Благодарим вас за ответ. Замечание о используемом файле, это пример кода, в моем реальном скрипте файл, используемый для заполнения массивов, отличается для каждой итерации. Существует путь, указывающий на текстовый файл, который также зависит от $ k. Я пытался использовать код eval, но он не ускользнул от первого, и цикл не завершился должным образом. –

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