1

下面的 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

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

在解析文件 pin.txt 之后,我正在为 i 的每次迭代创建多个数组 (array_$i)。
我可以看到创建的数组 array_block 、 array_group 、 array_range 以及正确存储在这些数组中的 pins.txt 的元素,但是由于这个错误,我无法打印每个数组的值。在循环外打印这 3 个数组的内容没有问题。但是我需要在循环中访问这些数组以便在我的脚本中进行进一步处理。有没有办法解决这个问题?

pin.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

谢谢

4

1 回答 1

0

您不能以这种方式创建动态变量名,您需要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循环更改为 a while,这是读取文件而不是使用的另一种方法cat(另外,请检查您的 #! 行)。

于 2012-10-19T11:28:42.887 回答