शेल डैश पर सिंगल डैश और डबल डैश फ्लैग में क्या अंतर है?


70

मैं शेल में काम करने के लिए नया हूं और इन आदेशों का उपयोग मनमाना लगता है। क्या कोई कारण है कि एक झंडे में एक एकल डैश है और दूसरे में डबल डैश हो सकता है?


इसे POSIX मानक द्वारा शासित माना जाता है: iam.ubc.ca/guides/javatut99/essential/attributes/_posix.html
cjc

यह लिंक अब 404 @cjc है :( संभवतः अधिक विश्वसनीय लिंक en.wikipedia.org/wiki/POSIX
बर्नहार्ड होफमैन

जवाबों:


110

एक एकल हाइफ़न का अनुसरण कई एकल-वर्ण के झंडे द्वारा किया जा सकता है। एक डबल हाइफ़न एक एकल, मल्टीचैकर विकल्प का उपसर्ग करता है।

इस उदाहरण पर विचार करें:

tar -czf

इस उदाहरण में, -czfतीन एकल चरित्र झंडे निर्दिष्ट करता है: c, z, और f

अब एक और उदाहरण पर विचार करें:

tar --exclude

इस मामले में, --excludeनामित एक एकल, मल्टीचैकर विकल्प निर्दिष्ट करता है exclude। डबल हाइफन कमांड लाइन तर्क स्पष्ट रूप से दिखाता, सुनिश्चित करना है कि tarयह के रूप में व्याख्या excludeके बजाय का एक संयोजन e, x, c, l, u, d, और e


1
@kylex, नहीं, चूंकि केवल "c" नाम का कोई लंबा विकल्प नहीं है और - का अर्थ है एक लंबा विकल्प, एक भी वर्ण विकल्प का अनुसरण नहीं करता है।
Psusi

13
कभी-कभी लंबी कमांड भी एकल-धराशायी हो सकती है। उदाहरण के लिए 'cdrecord' सभी एकल-धराशायी कमांड (-eject -dao ...) का उपयोग करता है। यह सब कार्यक्रम पर निर्भर करता है, लेकिन उनमें से अधिकांश (!) का उपयोग करते हैं - एकल के लिए और - एकाधिक-चरित्र (लंबे) आदेशों के लिए
मुलज़

8
@ मुल्ज़, हाँ, cdrecord काफी नासमझ चीजें करता है।
Psusi

10
यह भी ध्यान में रखा जाता है - आमतौर पर इसका उपयोग विकल्पों के अंत को दर्शाता है। अधिक जानकारी के लिए यहाँ देखें: unix.stackexchange.com/questions/11376/…
19

3
@killjoy, क्योंकि अज्ञानता या पसंद के माध्यम से, उन कार्यक्रमों के लेखकों ने पाठ्यक्रम के सम्मेलन का पालन नहीं किया। जैसा cdrecordकि उपरोक्त टिप्पणियों में वर्षों पहले बताया गया है।
Psusi

17

यह सब कार्यक्रम पर निर्भर करता है। आमतौर पर "-" का उपयोग 'लघु' विकल्प (एक-अक्षर, -एच) के लिए किया जाता है, और "-" का उपयोग "लंबे" (एर) विकल्प (--एचएलपी) के लिए किया जाता है।

छोटे विकल्पों को आमतौर पर जोड़ा जा सकता है (इसलिए "-एच-ए" "-हा" के समान है)

यूनिक्स जैसी प्रणालियों में, ASCII हाइफ़न-माइनस आमतौर पर विकल्पों को निर्दिष्ट करने के लिए उपयोग किया जाता है। चरित्र आमतौर पर एक या एक से अधिक पत्रों के बाद होता है। एक तर्क जो बिना किसी अक्षर के अपने आप में एक एकल हाइफ़न-माइनस है, आमतौर पर निर्दिष्ट करता है कि एक प्रोग्राम को मानक इनपुट से आने वाले डेटा को संभालना चाहिए या मानक आउटपुट पर डेटा भेजना चाहिए। दो हाइफ़न-माइनस वर्ण (-) का उपयोग "लंबे विकल्प" को निर्दिष्ट करने के लिए कुछ कार्यक्रमों पर किया जाता है जहां अधिक वर्णनात्मक विकल्प नामों का उपयोग किया जाता है। यह जीएनयू सॉफ्टवेयर की एक सामान्य विशेषता है।

स्रोत


2
तो क्यों यह jv -version और ant -version है, फिर?
मारजॉय

7

यह वास्तव में एक सम्मेलन है। हालाँकि, यह प्रोग्राम को दिए गए विकल्पों के बारे में अधिक कुशलता से जानने के लिए पार्सर्स की सहायता कर सकता है। इसके अलावा, वहाँ स्वच्छ उपयोगिताएँ हैं जो इन कमांडों को पार्स करने में मदद कर सकती हैं, जैसे कि getopt(3)या getopt_long(3)किसी प्रोग्राम के तर्कों को पार्स करने में मदद करने के लिए गैर-मानक ।

यह अच्छा है, क्योंकि हमारे पास कई छोटे विकल्प संयुक्त हो सकते हैं, जैसा कि अन्य उत्तर कहते हैं, जैसे tar -xzf myfile.tar.gz

अगर वहाँ एक "लिसा" के लिए तर्क था ls, तो संभवतः टाइप करने के लिए एक अलग अर्थ ls -lisaहोगा ls --lisa। पूर्व कर रहे हैं l, i, s, और aपैरामीटर, नहीं शब्द।

वास्तव में, आप लिख सकते हैं ls -l -i -s -a, जिसका अर्थ बिल्कुल वैसा ही है ls -lisa, लेकिन यह कार्यक्रम पर निर्भर करेगा।

ऐसे कार्यक्रम भी हैं जो इस सम्मेलन का पालन नहीं करते हैं। सबसे विशेष रूप से मेरी दृष्टि के लिए, ddऔर gcc


3

सिंगल डैश के साथ छोटे विकल्प बनाम डबल डैश के साथ लंबे विकल्प

छोटे विकल्पों को एक तर्क में जोड़ा जा सकता है;

for example: ls -lrt #instead of ls -l -r -t

यदि हम एकल डैश के साथ लंबे विकल्प की अनुमति देते हैं, तो यह अस्पष्टता का कारण बनता है। इसे हल करने के लिए हम लंबे विकल्पों के लिए डबल डैश का उपयोग करते हैं।

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