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

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

ファイル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

ありがとう

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ループからに変更しましたwhile。これは、使用するのではなくファイルを読み取る別の方法ですcat(また、#!行を確認してください)。

于 2012-10-19T11:28:42.887 に答える