2012-10-19 149 views
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 

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

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

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 

感谢

回答

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循环改为while,这是读取文件的,而不是使用cat(也,检查你的#线!)的替代方法。

+0

谢谢cdarke,eval帮助。 – user1758782

+0

@ user1758782:如果您对我的回答满意,那么您能否接受它? – cdarke