बैश कुछ गैर-मानक तरीके से व्यवहार करता है जब यह आता है -
।
POSIX कहता है:
दिशानिर्देश 10:
पहला --
तर्क जो विकल्प-तर्क नहीं है, उसे विकल्प के अंत का संकेत देने वाले परिसीमन के रूप में स्वीकार किया जाना चाहिए। किसी भी निम्न तर्क को ऑपरेंड के रूप में माना जाना चाहिए, भले ही वे -
चरित्र से शुरू हों ।
[...]
दिशानिर्देश 13:
उपयोगिताओं के लिए जो पढ़ने या लिखने के लिए खोली जाने वाली फ़ाइलों का प्रतिनिधित्व करने के लिए ऑपरेंड का उपयोग करते हैं, -
ऑपरेंड का उपयोग केवल मानक इनपुट (या मानक आउटपुट का मतलब है जब यह संदर्भ से स्पष्ट है कि आउटपुट फ़ाइल निर्दिष्ट किया जा रहा है) या ए फ़ाइल नाम -
।
तथा
जहाँ इन दिशानिर्देशों के अनुरूप POSIX.1-2017 के शेल और यूटिलिटीज़ वॉल्यूम में वर्णित एक उपयोगिता को स्वीकार करने, या स्वीकार नहीं करने के लिए आवश्यक है, -
मानक इनपुट या आउटपुट का मतलब ऑपरेंड , यह उपयोग OPERANDS अनुभाग में समझाया गया है। अन्यथा, यदि ऐसी उपयोगिता फ़ाइलों का प्रतिनिधित्व करने के लिए ऑपरेंड का उपयोग करती है, तो यह कार्यान्वयन-परिभाषित है कि क्या ऑपरेंड -
मानक इनपुट (या मानक आउटपुट) के लिए खड़ा है, या नाम वाली फ़ाइल के लिए -
।
लेकिन फिर man 1 bash
पढ़ता है:
एक --
विकल्प के अंत का संकेत देता है और आगे के विकल्प प्रसंस्करण को निष्क्रिय कर देता है। तर्कों और तर्कों के बाद किसी भी तर्क --
को माना जाता है। के एक तर्क के -
बराबर है --
।
तो बैश के लिए -
न तो मानक इनपुट और न ही एक फ़ाइल है, इसलिए कुछ हद तक गैर-मानक है।
अब आपका विशेष मामला:
curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -
मुझे संदेह है कि इस कमांड के लेखक को इस मामले में एहसास नहीं हो सकता -
है --
। मुझे संदेह है कि लेखक यह सुनिश्चित करना चाहता था कि bash
इसके मानक इनपुट से पढ़ा जाएगा, उन्होंने -
दिशानिर्देश 13 के अनुसार काम करने की उम्मीद की ।
लेकिन यहां तक कि अगर यह दिशानिर्देश के अनुसार काम करता है, -
तो यहां अनावश्यक होगा क्योंकि bash
पता चलता है कि इसका मानक इनपुट एक पाइप है और तदनुसार (जब तक -c
कि आदि नहीं दिया जाता है) कार्य करता है।
फिर भी -
दिशानिर्देश के अनुसार काम नहीं करता है, यह काम करता है --
। अभी भी --
यहाँ अनावश्यक है क्योंकि इसके बाद कोई तर्क नहीं हैं।
मेरी राय में अंतिम -
कुछ भी नहीं बदलता है। इसके बिना कमांड काम करेगा।
यह देखने के लिए कि कैसे --
और -
सामान्य रूप से उपयोगी हो सकता है, नीचे दिए गए उदाहरण का अध्ययन करें।
cat
मेरे Kubuntu में दोनों के दिशा-निर्देशों का अनुसरण करता है और मैं की उपयोगिता का प्रदर्शन करने के लिए उपयोग करेंगे -
और --
।
एक फ़ाइल नाम foo
मौजूद है। यह फाइल प्रिंट करेगा:
cat foo
एक फ़ाइल नाम --help
मौजूद है। यह फाइल प्रिंट नहीं करेगा:
cat --help
लेकिन यह नाम की फाइल को प्रिंट करेगा --help
:
cat -- --help
यह --help
मानक इनपुट से जो कुछ भी आता है उसके नाम वाली फ़ाइल को संक्षिप्त करेगा :
cat -- --help -
ऐसा लगता है कि आपको वास्तव में ज़रूरत नहीं है --
, क्योंकि आप हमेशा पास कर सकते हैं, ./--help
जिसे सुनिश्चित करने के लिए एक फ़ाइल के रूप में व्याख्या की जाएगी। लेकिन गौर कीजिए
cat "$file"
जब आप पहले से नहीं जानते हैं कि चर की सामग्री क्या है। आप ./
इसके लिए पहले से तैयारी नहीं कर सकते , क्योंकि यह एक निरपेक्ष मार्ग हो सकता है और ./
इसे तोड़ देगा। दूसरी ओर यह एक फ़ाइल हो सकती है जिसका नाम --help
(क्योंकि क्यों नहीं?)। इस मामले --
में बहुत उपयोगी है; यह एक बहुत मजबूत आदेश है:
cat -- "$file"