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)

但这似乎也不起作用。

有任何想法吗?

相关内容