Ответ 1
Я бы обычно писал:
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 присваивания, сделанные в цикле, будут доступны в основной оболочке после цикла, а в Bash - нет. Первая версия всегда задает переменную массива, поэтому она доступна для использования после цикла. )
Вы также можете использовать:
array+=( $line )
для добавления в массив.