
特定のbashインデックスに値を割り当てるのに問題がありますが、明らかにこれはループを使用してインデックス変数を設定した場合にのみ発生しますwhile read
。
このコードをテストの例として使用してください。
#!/bin/bash
read -d '' TESTINPUT << 'EOF'
1,100
2,200
8,300
EOF
declare -A ARRAY
echo "$TESTINPUT"| while read _l; do
i=$(cut -d, -f1 <<< $_l)
j=$(expr $i + 0)
value=$(cut -d, -f2 <<< $_l)
ARRAY[$j]=$value
done
for i in {4..6}; do
ARRAY[$i]=$i
done
for i in {1..10}; do
echo "$i ${ARRAY[$i]}"
done
出力を見ると、whileループの場合は配列変数が設定されていませんが、forループではスコープの{4..6}
使用に問題がないようです。
$ ./test_array.sh
1
2
3
4 4
5 5
6 6
7
8
9
10
また、次のようにインデックス変数を整数に変換しようとしました。
j=$(expr $i + 0)
しかし、それも動作しないようです。
どんなアイデアがありますか?