निम्नलिखित एक फाइल को लाइन द्वारा तर्क लाइन के रूप में पढ़ता है:
while IFS= read -r line; do
echo "Text read from file: $line"
done < my_filename.txt
यह एक लूप में एक फ़ाइल से लाइनों को पढ़ने के लिए मानक रूप है । स्पष्टीकरण:
IFS=
(या IFS=''
) व्हाट्सएप को लीड / ट्रेल करने से रोकता है।
-r
बैकस्लैश की व्याख्या करने से बचता है।
या आप इसे bash फ़ाइल सहायक स्क्रिप्ट, उदाहरण सामग्री में रख सकते हैं:
#!/bin/bash
while IFS= read -r line; do
echo "Text read from file: $line"
done < "$1"
यदि उपर्युक्त फ़ाइल नाम के साथ स्क्रिप्ट में सहेजा जाता है readfile
, तो इसे निम्नानुसार चलाया जा सकता है:
chmod +x readfile
./readfile filename.txt
यदि फ़ाइल मानक POSIX पाठ फ़ाइल नहीं है (= एक newline वर्ण द्वारा समाप्त नहीं किया गया है), तो लूप को आंशिक लाइनों को पीछे हटाने के लिए संशोधित किया जा सकता है:
while IFS= read -r line || [[ -n "$line" ]]; do
echo "Text read from file: $line"
done < "$1"
यहां, || [[ -n $line ]]
अंतिम पंक्ति को नजरअंदाज करने से रोकता है अगर यह एक के साथ समाप्त नहीं होता है \n
(क्योंकि read
यह एनओएफएफ के मुकाबले एक गैर-शून्य निकास कोड देता है)।
यदि लूप के अंदर के कमांड भी मानक इनपुट से पढ़ते हैं, तो जिस फाइल डिस्क्रिप्टर का उपयोग किया जाता है, read
उसे किसी और चीज ( मानक फाइल डिस्क्रिप्टर से बचने ) के लिए जप किया जा सकता है , जैसे:
while IFS= read -r -u3 line; do
echo "Text read from file: $line"
done 3< "$1"
(गैर-बैश गोले को नहीं जान सकते read -u3
; read <&3
इसके बजाय उपयोग करें ।)