3 पॉइंट द्वारा GN⁺ 2023-11-24 | 1 टिप्पणियां | WhatsApp पर शेयर करें

Unix सिस्टम की दिलचस्प binary files

  • Unix सिस्टम में ऐसी binary files मौजूद हैं जिनके नाम एकल प्रतीक होते हैं.
  • /bin/[ कमांड चलाने पर [ नाम का प्रोग्राम देखा जा सकता है.
  • [ और test एक ही binary file की ओर संकेत करते हैं, और दोनों कमांड वास्तव में एक ही कार्य करते हैं.

test प्रोग्राम और [ का उपयोग

  • test प्रोग्राम का उपयोग shell में expressions का मूल्यांकन करने के लिए किया जाता है.
  • इसका उपयोग string comparison, number comparison, file conditions की जाँच आदि के लिए होता है.
  • test arguments लेकर expression का मूल्यांकन करता है, और सत्य होने पर 0 तथा असत्य होने पर 1 लौटाता है.

दोनों कमांड के मौजूद होने का कारण

  • test और [ दोनों कमांड क्यों मौजूद हैं, यह स्पष्ट नहीं है, लेकिन अनुमान है कि यह readability बढ़ाने के लिए है.
  • [ कमांड का उपयोग करने पर test की तुलना में conditions को अधिक साफ़ तरीके से व्यक्त किया जा सकता है.
  • [ का उपयोग करते समय कमांड का अंतिम argument ] से समाप्त होना चाहिए.

built-in commands और external binary files का अंतर

  • test और [ shell scripts में अक्सर उपयोग होते हैं, इसलिए अधिकांश shells में इन्हें built-in command के रूप में लागू किया गया है.
  • built-in command और external binary file का उपयोग करने पर अलग व्यवहार दिख सकता है, और shell के अनुसार भी अंतर हो सकता है.

[[ का उपयोग और अंतर

  • [[ एक Bash extension है जो [ के उपयोग का विकल्प देता है.
  • [[ built-in command होने के कारण expression के भीतर भाषा के मूल नियमों को बदल सकता है.
  • [[ string comparison के समय glob patterns को literal की तरह मान सकता है, जिससे अलग परिणाम मिल सकते हैं.

shell script लिखते समय चयन

  • portable shell scripts लिखते समय [ का उपयोग करना बेहतर है.
  • अगर आप Bash-विशेष script लिख रहे हैं, तो [[ अधिक सुविधाएँ प्रदान करता है.

shell expressions और test expressions का संयोजन

  • shell के पास !, &&, || operators के माध्यम से अपने expressions होते हैं.
  • test expressions और shell expressions को एक ही कमांड में जोड़ा जा सकता है.

GN⁺ की राय

इस लेख का सबसे महत्वपूर्ण बिंदु यह है कि Unix सिस्टम में [ और test एक ही कार्य करने वाले दो अलग कमांड के रूप में मौजूद हैं, और अनुमान है कि ऐसा shell scripts की readability और efficiency बढ़ाने के लिए किया गया है. यह जानकारी शुरुआती software engineers के लिए shell scripts लिखते या समझते समय उपयोगी हो सकती है, और shell scripts के काम करने के तरीके तथा अलग-अलग shells के बीच के अंतर को समझने में मदद करती है. यह लेख इसलिए दिलचस्प है क्योंकि यह दिखाता है कि shell scripting के बुनियादी tools को कितने अलग रूपों में इस्तेमाल किया जा सकता है, और shell programming की जटिलता तथा लचीलापन अच्छी तरह उजागर करता है.

1 टिप्पणियां

 
GN⁺ 2023-11-24
Hacker News राय
  • मूल लेखक का धन्यवाद संदेश और शीर्षक संशोधन का सुझाव

    मूल लेखक ने लिखा कि लेख को लोकप्रियता मिलने पर वे आभारी हैं, और शीर्षक में वर्ष जोड़ने तथा "test" शब्द को बड़े अक्षरों में न लिखने का सुझाव दिया। कारण यह है कि "test" वास्तव में एक कमांड को दर्शाता है.

  • Bourne shell के "test" कमांड का इतिहास और व्यक्तिगत पसंद

    बताया गया कि Bourne shell उस दौर में बनाया गया था जब IDE नहीं होते थे, इसलिए बिना कोष्ठकों या square brackets के "test" कमांड का उपयोग किया गया। व्यक्तिगत रूप से उन्होंने square bracket फ़ॉर्म की तुलना में "test" फ़ॉर्म को पसंद करने की बात कही.

  • if ब्लॉक का उपयोग किए बिना conditional statement का उदाहरण

    if ब्लॉक के बिना conditional statement को सरल तरीके से लिखने का तरीका दिखाया गया, और debug output को शर्त के अनुसार stderr पर प्रिंट करने का उदाहरण दिया गया.

  • if ब्लॉक और सामान्य कमांड को मिलाकर उपयोग करने का तरीका

    यह दिखाया गया कि if ब्लॉक सामान्य कमांड को test कर सकता है, उदाहरण के लिए grep कमांड का उपयोग करके log search करने का मामला दिया गया.

  • test कमांड में logical operation के उपयोग पर विचार

    test कमांड के भीतर logical operation का उपयोग करना चाहिए या अलग conditional statement का, इस पर विचार व्यक्त किया गया। यदि performance समस्या न हो तो दोनों पक्षों के लिए उचित कारण हो सकते हैं.

  • "test" कमांड के उपयोग के फायदे और "man test" की सुविधा

    कहा गया कि कुछ सालों से वे square brackets का उपयोग न करके "test" कमांड का उपयोग करने की वकालत कर रहे हैं। इससे यह बात स्पष्ट होती है कि "test" एक साधारण कमांड है, और "man bash" में खोजने की तुलना में "man test" का उपयोग अधिक सुविधाजनक है.

  • [ और test के single-argument behavior पर सावधानी

    चेतावनी दी गई कि जब यह जाँचना हो कि variable खाली नहीं है, तो variable को quotes में न रखने पर अप्रत्याशित परिणाम मिल सकते हैं। variable को quotes में रखना ज़रूरी बताया गया.

  • Linux और NetBSD में /bin/[ और /bin/test का अंतर

    यह साझा किया गया कि Linux में /bin/[ और /bin/test अलग हैं, लेकिन NetBSD में दोनों एक ही हैं.

  • test/[/[[ पर गहराई से चर्चा और shell की अजीब बातों पर ब्लॉग लिंक साझा

    test, [, [[ को और गहराई से समझने में मदद करने वाले दस्तावेज़ और shell की विभिन्न विशेषताओं को समझाने वाले ब्लॉग लिंक साझा किए गए.

  • यह इंगित किया गया कि [[ सिर्फ bash के लिए है, और यदि bash का उपयोग निश्चित है तो [[ इस्तेमाल करने की सलाह

    उल्लेख किया गया कि [[ bash-विशेष कमांड है, और जब bash का उपयोग हो रहा हो तो [[ का उपयोग करना बेहतर है.

  • इस बात पर भ्रम कि [ bash scripting language का हिस्सा नहीं है

    यह समझने में भ्रम होने की बात कही गई कि [ bash scripting language का हिस्सा नहीं बल्कि सिर्फ एक साधारण प्रोग्राम है, और इस बारे में स्पष्टीकरण माँगा गया.

  • shell पर तीखी राय और [ के उपयोग का विरोध

    यह मजबूत राय व्यक्त की गई कि [ का उपयोग नहीं करना चाहिए और केवल "test" का उपयोग करना चाहिए। इस बात पर ज़ोर दिया गया कि [ भाषा के syntax जैसा दिखता है, लेकिन वास्तव में वह एक प्रोग्राम है, और string evaluation के लिए case statement का उपयोग करना चाहिए.