problema bash atribuindo a um índice de matriz em um loop

Eu posso fazer isso funcionar em ksh, mas não em bash, o que realmente me deixa louca. Espero que seja algo óbvio que estou negligenciando.

Eu preciso executar um comando externo onde cada linha da saída será armazenada em um índice de matriz.

Este exemplo simplificado parece que está definindo a matriz no loop corretamente, no entanto, após o loop ter concluído essas atribuições de matriz sumiram? É como se o loop fosse tratado completamente como um shell externo?

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[@]}

Saída

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

Então, enquanto no loop, nós atribuímos array [i] e o eco o verifica. Mas depois do loop estou de volta em array [0] contendo "olá" sem outros elementos.

Mesmos resultados em todas as bash 3, 4 e diferentes plataformas.

questionAnswers(1)

yourAnswerToTheQuestion