Mapfile एक अनुक्रमित सरणी, के रूप में नहीं के रूप में पोर्टेबल में एक फ़ाइल से लाइनों को पढ़ने के लिए एक सुविधाजनक तरीका है पढ़ा लेकिन थोड़ा तेज। लूप के लिए उपयोग करके आप एक सबस्क्रिप्शन बनाने से बचते हैं।
#!/bin/bash
mapfile -t < file.txt
for line in "${MAPFILE[@]}"; do
echo $line
done
पाइपलाइनों का उपयोग करते समय ध्यान रखें, यह सब-लूप को एक सबशेल में डाल देगा। चर जैसे लूप के अंदर परिवर्तन स्क्रिप्ट के बाहरी भाग में नहीं फैलेंगे।
उदाहरण:
#!/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).