Ошибка KSH: непредвиденный $

Ниже скрипт KSH приводит к ошибке «Синтаксическая ошибка в строке 4: '$' неожиданно».

!#/bin/ksh
for i in `cat pins.list`
do
        set -A array_${i} `grep -i "$i " pins.txt | awk '{print $2}'`
        echo "Elements of array_${i} are ${array_${i}[@]}"
done

#=================================

Я создаю несколько массивов (array_ $ i) для каждой итерации i после анализа файла pins.txt.
Я могу видеть созданные массивы array_block, array_group, array_range и элементы pins.txt, правильно сохраненные в этих массивах , но я не могу распечатать значения каждого из этих массивов из-за этой ошибки. Печать содержимого этих трех массивов вне цикла не вызывает проблем. Но мне нужно получить доступ к этим массивам внутри цикла для дальнейшей обработки в моем скрипте. Есть ли способ решить эту проблему?

Содержимое pins.list и pins.txt следующее:

pins.list (Arrays)
==================
block
group
range


pins.txt
===========

range     444
group     46
range     32
block     96
group     99
range     123
block     56
range     22

Спасибо


person user1758782    schedule 19.10.2012    source источник


Ответы (1)


Вы не можете создать имя динамической переменной таким образом, вам нужно eval. Например:

while read i
do
    eval "set -A array_${i} \$(grep -i $i pins.txt | awk '{print $2}')"
    eval "echo \"Elements of array_${i} are \${array_${i}[@]}\" "
done < pins.list

Я перешел с цикла for на цикл while, это альтернативный метод чтения файла вместо использования cat (также проверьте строку #!).

person cdarke    schedule 19.10.2012
comment
@ user1758782: Если вас устраивает мой ответ, не могли бы вы принять его, пожалуйста? - person cdarke; 19.10.2012