whileएक इंटरसिटिंग सिंटैक्स है। आप do ... whileलूप से पहले कई कमांड डाल सकते हैं , और प्रश्न में मामले को अपनी विशेष आवश्यकताओं के आधार पर इस सुविधा को टालना पड़ सकता है: क्या आप सबसे लंबी फ़ाइल के अंत में पढ़ते हैं, या केवल सबसे छोटी अवधि के अंत तक।
उदाहरण के लिए, read || readबस काम नहीं करता (प्रश्न की आवश्यकताओं के अनुसार), जब पहली फ़ाइल का एक रीड होता है true, तब समाप्त हो जाता है , जब तक कि पहली फ़ाइल को शुरू से अंत तक पढ़ा नहीं गया है, तब तक दूसरी फ़ाइल के रीड को छोड़ दिया जाता है ... फिर, क्योंकि स्थिति अभी भी है true, जबकि लूप जारी है और शुरू से अंत तक दूसरी फ़ाइल पढ़ता है।
read && readयदि आप केवल सबसे छोटी फ़ाइल के रूप में पढ़ना चाहते हैं, तो समवर्ती (समकालिक) फ़ाइलों को पढ़ेंगे। हालाँकि, यदि आप दोनों फ़ाइलों को पढ़ना चाहते हैं eof, तो आपको while'sसिंटैक्स आवश्यकताओं के साथ काम करने की आवश्यकता है, अर्थात। आदेश से तुरंत पहलेdo while एक गैर शून्य वापसी कोड के उत्पादन पाश जबकि लूप से बाहर तोड़ने के लिए।
यहाँ एक उदाहरण है कि दोनों फ़ाइलों को ईओफ़ में कैसे पढ़ा जाए
while IFS= read -r line3 <&3 || ((eof3=1))
IFS= read -r line4 <&4 || ((eof4=1))
!((eof3 & eof4))
do
echo "$line3, $line4"
done 3<file3 4<file4
(आप पढ़ने से पहले eof3 और eof4 का परीक्षण करना चाह सकते हैं, लेकिन सामान्य विचार है, विशेष रूप से अंतिम सच / झूठी स्थिति में।
||मेरे लिए काम नहीं करता है। यह प्रक्रिया file1 तो करें 2 , लेकिन यह साथ सिंक्रनाइज़ फ़ाइलों को रखना होता है&&, जो बाहर निकल जाता है , जबकि पहले पर पाश EOF । - GNU बैश 4.1.5