File को Line by Line पढ़ना
In this page:
while IFS= read -r line; do
commands using "$line"
done < file_name
Standard while-read Idiom
done के बाद < file के साथ एक file को while read loop में redirect करना किसी subshell की ज़रूरत के बिना end-of-file तक हर iteration में एक line पढ़ता है। IFS= read -r whitespace को preserve करता है और backslash escaping को disable करता है।
उदाहरण: The Standard while-read Idiom
#!/bin/bash
printf "apple\nbanana\ncherry\n" > fruits.txt
while IFS= read -r line; do
echo "Fruit: $line"
done < fruits.txt
rm -f fruits.txt
Login to try C/C++/Java/PHP code in the editor
Piping से Variables कैसे खोते हैं
एक command को while read में pipe करना, जैसे cat file | while read line; do ...; done, loop को एक subshell में चलाता है क्योंकि यह pipe के right side पर है। उस loop के अंदर changed कोई भी variables loop खत्म होने पर गायब हो जाते हैं।
while loop में pipe नहीं बल्कि < file redirection उपयोग करें।उदाहरण: Why Piping Loses Variables
#!/bin/bash
printf "1\n2\n3\n" > numbers.txt
count=0
cat numbers.txt | while read -r n; do
count=$((count + 1))
done
echo "count after piped loop (lost): $count"
count=0
while read -r n; do
count=$((count + 1))
done < numbers.txt
echo "count after redirected loop (kept): $count"
rm -f numbers.txt
Login to try C/C++/Java/PHP code in the editor
Trailing Newline के बिना Last Line पढ़ना
अगर एक file की last line में कोई trailing newline न हो, plain read अब भी वह final line का text return करने में succeed होता है लेकिन एक non-zero status return करता है, जो loop body को skip होने का कारण बन सकता है। || [[ -n $line ]] जांचना इस edge case को handle करता है।
उदाहरण: Reading the Last Line Without a Trailing Newline
#!/bin/bash
printf "one\ntwo\nthree" > no_trailing_newline.txt
while IFS= read -r line || [[ -n "$line" ]]; do
echo "Got: $line"
done < no_trailing_newline.txt
rm -f no_trailing_newline.txt
Login to try C/C++/Java/PHP code in the editor
- एक
while readloop में pipe करना और फिर यह सोचना कि loop के अंदर set किए variables इसके बाद क्यों मौजूद नहीं हैं; एक piped loop एक subshell में चलता है। readसे पहलेIFS=भूल जाना, जो हर line से leading/trailing whitespace unexpectedly trim कर देता है।while readके बजायfor line in $(cat file)उपयोग करना;forversion whitespace पर split करता है और spaces वाली lines पर break हो जाता है।
while IFS= read -r line; do ... done < fileएक file को line by line पढ़ने का standard, safe idiom है।- File को
< fileसे redirect करना इसेdoneके बाद current shell में रखता है, इसमें pipe करने के विपरीत। IFS=हर line से leading/trailing whitespace strip होने से रोकता है।readend-of-file पर non-zero return करता है, जो naturallywhileloop को खत्म कर देता है।
Chapter Quiz — Complete all 13 topics to unlock
0/13 topics done
Complete these topics first: