BASH: как хранить переменные подоболочки в массиве?

У меня есть array1, array2 и функция.

Я пытаюсь в цикле for j=0 to ARRAY_SIZE получить данные из array2[j], передать их функции, а возвращаемый вывод сохранить их в array1[j].

Ниже приведена часть кода, над которой я работаю:

exec 3>&1
${ppart_block_fstype[$i]}=_ppart_block_fstype < <(
    for i in $(eval echo {0..$ARRAY_END})
    do
        if [[ ppart_block_alloc[$i] -eq "ALLOC" ]]
        then
            printf "%s\n" "${ppart_block_num[$i]}" >&3
        fi
    done)
exec 3>&-

_ppart_block_fstype — это функция, которую я определил ранее, и она вернет результат, который я сохраню в массиве ppart_block_fstype. Проблема вышеприведенной функции заключается в том, что она использует некоторые «тяжелые инструменты», поэтому на самом деле невозможно вызывать ее в каждом цикле цикла.

Это< /а>! была хорошей отправной точкой, но я застрял в том, как сделать $i видимым из подоболочки, и я также не уверен, правильно ли я вызываю < <( )*.


person mateusz.burger    schedule 04.10.2013    source источник
comment
Вы пытаетесь сохранить соответствующую запись в ppart_block_fstype для каждой записи в part_block_num? Одна из проблем заключается в том, что ваш цикл for может выдать менее ARRAY_END строк текста. Другое дело, что непонятно, что _ppart_block_fstype производит на выходе; предположительно, он записывает несколько строк вывода, по одной на строку ввода, но вам придется назначать каждую строку элементу ppart_block_fstype отдельно.   -  person chepner    schedule 04.10.2013
comment
Кстати, лучше использовать seq 0 $ARRAY_END или даже for (i = 0; i < $ARRAY_END; ++i), чем $(eval echo {0..$ARRAY_END}).   -  person Rubens    schedule 04.10.2013
comment
Я считаю (возможно, ошибочно), что ksh немного более снисходительно относится к области видимости переменных, но, как вы говорите, «как сделать $i видимым из подоболочки ...», я действительно не думаю, что это возможно. Просто для ясности: вы хотите, чтобы значение $i внутри цикла for из process substition использовалось как значение $i в индексе массива?   -  person shellter    schedule 04.10.2013
comment
@chepner Я знаю, что цикл может создавать менее ARRAY_END записей, это нормально, мой ppart_block_fstype предварительно инициализирован. _ppart_block_fstype принимает один аргумент в качестве входных данных и производит одну строку вывода через printf, этот вывод должен быть сохранен в ppart_block_fstype   -  person mateusz.burger    schedule 05.10.2013
comment
@shellter Вы хотите, чтобы значение $i внутри цикла for из подстановки процесса использовалось в качестве значения $i в индексе массива? Правильно   -  person mateusz.burger    schedule 05.10.2013
comment
@Rubens большое спасибо за вклад, очень ценный и очень полезный!   -  person mateusz.burger    schedule 05.10.2013