Mapfile - це зручний спосіб зчитування рядків з файлу в індексований масив, не настільки портативний, як читання, але трохи швидше. Використовуючи для циклу, ви уникаєте створення підшару.
#!/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).