"<और 3" और "किया <file11 3 <file22" का क्या अर्थ है


16

मेरे पास निम्न स्क्रिप्ट है:

while read lineA && read lineB <&3
do
    echo "$lineA"
    echo "$lineB"
    echo
done < file11 3< file22

यह कोड ठीक काम कर रहा है। लेकिन मैं ये नहीं समझता:

  • <&3
  • done < file11 3< file22

1
क्या आप हमें समझा सकते हैं कि स्क्रिप्ट क्या है? (आप कहते हैं कि यह ठीक काम कर रहा है)
मैथ्यू

जवाबों:


22

स्क्रिप्ट दो फ़ाइलों से तार के जोड़े को पढ़ती है। प्रत्येक यात्रा में, यह एक स्ट्रिंग से पढ़ता file11में lineA, और से file22में lineB। यह तब तक ऐसा करता है जब तक कि यह किसी भी फ़ाइल के अंत का सामना नहीं करता है। लूप का शरीर दो तारों और एक रिक्त रेखा को आउटपुट करता है।

<file11इसका मतलब है "कनेक्ट / से मानक इनपुट अनुप्रेषित file11, जहां" इस आदेश "है इस आदेश में" whileपाश। यह भी लिखा जा सकता था 0<file11

मानक इनपुट फ़ाइल डिस्क्रिप्टर नंबर 0. फ़ाइल डिस्क्रिप्टर 1 और 2 मानक आउटपुट और मानक त्रुटि धाराओं के लिए आरक्षित हैं।

3<file22इसका मतलब है "कनेक्ट फ़ाइल वर्णनकर्ता से 3 file22इस आदेश के लिए"। संख्या 3 अगली "मुक्त" फ़ाइल डिस्क्रिप्टर संख्या के रूप में होती है, लेकिन कोड 4 या 5 या 0, 1 और 2 के अलावा किसी भी छोटे पूर्णांक का उपयोग कर सकता था (प्रयोग करने योग्य फ़ाइल डिस्क्रिप्टर संख्या की सीमा इस बात पर निर्भर करती है कि शेल क्या है) उपयोग किया जा रहा है, लेकिन 9 तक की संख्या काम करने की गारंटी है)।

लूप में, read lineAमानक इनपुट से एक स्ट्रिंग को डिफ़ॉल्ट रूप से पढ़ा जाएगा, अर्थात फ़ाइल से file11(मानक इनपुट लूप से विरासत में मिला है)। यह भी लिखा जा सकता था read lineA <&0

इसके साथ read lineB <&3, readकमांड फ़ाइल डिस्क्रिप्टर 3 से पढ़ता है, अर्थात file22मानक इनपुट से (फाइल डिस्क्रिप्टर 3 लूप में उपलब्ध है, ठीक उसी तरह जैसे मानक इनपुट से है)।

संक्षेप में, यह मानक इनपुट स्ट्रीम और एक "अतिरिक्त" फ़ाइल डिस्क्रिप्टर (नंबर 3) का उपयोग दो फाइलों "एक साथ" (बदले में प्रत्येक फ़ाइल से एक स्ट्रिंग) से पढ़ने के लिए करता है। आमतौर पर, एक के पास केवल एक इनपुट स्ट्रीम तक पहुंच होती है , लेकिन यह एक दूसरी इनपुट स्ट्रीम बनाने और इसे file22फ़ाइल से कनेक्ट करने से स्पष्ट रूप से रोक देता है ।

सम्बंधित:


मैं "लाइन" के बजाय "स्ट्रिंग" शब्द का उपयोग करता हूं। दो फ़ाइलों से पढ़ी गई चीजों में फ़्लैंकिंग व्हाट्सएप छीन ली जाएगी, और कुछ निश्चित रूप से भागने के दृश्यों की विशेष रूप से व्याख्या की जाएगी।

का उपयोग कर एक पंक्ति पढ़ने के लिए read, का उपयोग करें

IFS= read -r varname

सम्बंधित:


अच्छा उत्तर! मुझे समझ में नहीं आता है कि फ़ाइल डिस्क्रिप्टर 3 का उपयोग कैसे किया जा सकता है। इसका मतलब यह है की तुलना में 3<file22एक की तरह है fopenजहां FIDवापस नहीं किए गए लेकिन पूर्व निर्दिष्ट?
ए। डोंडा

2
@ ए डोंडा आप वर्णन कर रहे हैं fdopen()। हाँ।
Kusalananda
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.