Mapfile là một cách thuận tiện để đọc các dòng từ tệp vào một mảng được lập chỉ mục, không dễ mang theo như đọc nhưng nhanh hơn một chút. Bằng cách sử dụng vòng lặp for, bạn tránh tạo ra một subshell.
#!/bin/bash
mapfile -t < file.txt
for line in "${MAPFILE[@]}"; do
echo $line
done
Hãy ghi nhớ khi sử dụng các đường ống, nó sẽ đặt vòng lặp while trong một khung con. Các thay đổi bên trong vòng lặp while như các biến sẽ không lan truyền đến phần bên ngoài của tập lệnh.
Thí dụ:
#!/bin/bash
a=0
printf %s\\n {0..5} | while read; do
((a++))
done
echo $a # 'a' will always be 0.
(Giải pháp tốt hơn):
#!/bin/bash
b=0
while read; do
((b++))
done < <(printf %s\\n {0..5})
echo $b # 'b' equal to 6 (works as expected).