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)

하지만 그것도 작동하지 않는 것 같습니다.

어떤 아이디어가 있나요?

관련 정보