Я бы нормально написал:
while read line
do
array=( ${array[@]} $line )
echo ${array[@]}
done <<EOM
test1
test2
test3
test4
EOM
Или, еще более вероятно:
cat <<EOF |
test1
test2
test3
test4
EOF
while read line
do
array=( ${array[@]} $line )
echo ${array[@]}
done
(Обратите внимание, что версия с конвейером не обязательно подходит для Bash. Оболочка Bourne будет запускать цикл while
в текущей оболочке, но Bash запускает его в подоболочке - по крайней мере по умолчанию. В Bourne shell, назначения, сделанные в цикле, будут доступны в основной оболочке после цикла, в Bash их нет. Первая версия всегда устанавливает переменную массива, поэтому она доступна для использования после цикла.)
Вы также можете использовать:
array+=( $line )
для добавления в массив.