bash kłopoty z przypisaniem do indeksu tablicy w pętli

Mogę to zrobić w ksh, ale nie w bashu, co naprawdę doprowadza mnie do szału. Mam nadzieję, że to coś oczywistego.

Muszę uruchomić polecenie zewnętrzne, w którym każdy wiersz wyjścia będzie przechowywany w indeksie tablicy.

Ten uproszczony przykład wygląda tak, jakby poprawnie ustawiał tablicę w pętli, ale po zakończeniu pętli przypisania tablic zniknęły? To tak, jakby pętla była traktowana całkowicie jako zewnętrzna powłoka?

junk.txt

this is a
test to see
if this works ok

testa.sh

#!/bin/bash

declare -i i=0
declare -a array

echo "Simple Test:"
array[0]="hello"
echo "array[0] = ${array[0]}"

echo -e "\nLoop through junk.txt:"
cat junk.txt | while read line
do
    array[i]="$line"
    echo "array[$i] = ${array[i]}"
    let i++
done

echo -e "\nResults:"
echo "       array[0] = ${array[0]}"
echo " Total in array = ${#array[*]}"
echo "The whole array:"
echo ${array[@]}

Wydajność

Simple Test:
array[0] = hello

Loop through junk.txt:
array[0] = this is a
array[1] = test to see
array[2] = if this works ok

Results:
      array[0] = hello
Total in array = 1
The whole array:
hello

Tak więc w pętli przypisujemy tablicę [i], a echo ją weryfikuje. Ale po pętli wracam do tablicy [0] zawierającej „cześć” bez żadnych innych elementów.

Takie same wyniki w bash 3, 4 i różnych platformach.

questionAnswers(1)

yourAnswerToTheQuestion