Bash配列のインデックス割り当て中の予期しない動作

Bash配列のインデックス割り当て中の予期しない動作

特定の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)

しかし、それも動作しないようです。

どんなアイデアがありますか?

ベストアンサー1

おすすめ記事