Mapfile - это удобный способ чтения строк из файла в индексированный массив, не такой переносимый, как чтение, но немного быстрее. Используя цикл for, вы избегаете создания подоболочки.
#!/bin/bash
mapfile -t < file.txt
for line in "${MAPFILE[@]}"; do
echo $line
done
Имейте в виду, что при использовании конвейеров он будет помещать цикл while в подоболочку. Изменения внутри переменных типа цикла while не будут распространяться на внешнюю часть скрипта.
Пример:
#!/bin/bash
a=0
printf %s\\n {0..5} | while read; do
((a++))
done
echo $a # 'a' will always be 0.
(Лучшее решение):
#!/bin/bash
b=0
while read; do
((b++))
done < <(printf %s\\n {0..5})
echo $b # 'b' equal to 6 (works as expected).