【问题标题】:KSH Error : '$' unexpectedKSH 错误:“$”意外
【发布时间】:2012-10-09 21:29:05
【问题描述】:

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

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

在解析文件 pins.txt 之后,我正在为 i 的每次迭代创建多个数组 (array_$i)。
我可以看到创建的数组 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

谢谢

【问题讨论】:

    标签: arrays ksh


    【解决方案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(另外,请检查您的#! 行)。

    【讨论】:

    • @user1758782:如果您对我的回答感到满意,可以接受吗?
    猜你喜欢
    • 2014-04-05
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多