Mapfileเป็นวิธีที่สะดวกในการอ่านบรรทัดจากไฟล์ไปยังอาร์เรย์ที่จัดทำดัชนีไม่ใช่แบบพกพาเหมือนกับอ่านแต่เร็วกว่าเล็กน้อย โดยใช้สำหรับลูปคุณหลีกเลี่ยงการสร้างเชลล์ย่อย
#!/bin/bash
mapfile -t < file.txt
for line in "${MAPFILE[@]}"; do
echo $line
done
โปรดทราบว่าเมื่อใช้ท่อจะใส่ห่วง while ลงใน subshell การเปลี่ยนแปลงในขณะที่ลูปเช่นตัวแปรจะไม่แพร่กระจายไปยังส่วนนอกของสคริปต์
ตัวอย่าง:
#!/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).