कमांड प्रॉम्प्ट मापदंडों के लिए एक-डैश और दो-डैश के बीच क्या अंतर है?


65

मैं सोच रहा था कि ऐसा क्यों है कि कुछ कार्यक्रमों में उनके कमांड प्रॉम्प्ट मापदंडों के लिए दो डैश की आवश्यकता होती है जबकि कुछ (अधिकांश) को केवल एक डैश की आवश्यकता होती है ?

उदाहरण के लिए अधिकांश कार्यक्रम इस तरह दिखते हैं: relaxer -dtd toc.xml toc_gr.xml toc_jp.xml

जबकि कुछ कार्यक्रम इस तरह दिखते हैं: xmllint --valid toc.xml --noout

क्या कारण है कि कुछ को एक के बजाय दो डैश की आवश्यकता होती है? क्या यह हर किसी के लिए एक मानक (यानी एक एकल पानी का छींटा होगा) करने के लिए समझ में नहीं आता है ।


10
> क्या यह हर किसी के लिए एक मानक से चिपके रहने का मतलब नहीं है - हाँ। क्या सभी प्रोग्रामर मानकों से चिपके रहते हैं और निरंतरता बनाए रखते हैं? सं कई प्रोग्रामर के अंदर भी निरंतरता बनाए रखने नहीं कर सकते उनके कार्यक्रमों :) कहा जा रहा है, आम सहमति केवल एक अक्षर का विकल्प के लिए एक पानी का छींटा, और सभी है कि वास्तव में शब्द, जैसे हैं के लिए दो डैश उपयोग करने के लिए किया जाएगा -iबनाम --inputया -n --dry-run
slhck

1
@slhck Heys मदद के लिए धन्यवाद =) तो उस सम्मेलन से, क्या इसका मतलब यह है कि -dtdवास्तव में होना चाहिए था --dtd? प्रभावी रूप से जो मैं सोच रहा था कि डैश (और डबल-डैश) क्या संकेत देने की कोशिश कर रहा है?
पचेरियर

6
बोनस अंक के लिए: --long-optionsकिसी भी विशिष्ट संक्षिप्त नाम को स्वीकार करने के लिए ग्नू मानकों के अनुरूप कार्यक्रम । तो, विकल्पों के साथ एक कार्यक्रम के लिए --file-inऔर --file-out, आप उपयोग कर सकते हैं --file-o=fooया --file-i=foo, जिसके लिए कुछ टाइपिंग को बचा सकते हैं --very-long-optional-parameters
BRPocock

जीएनयू ऐसे X Window सिस्टम, साथ ही ImageMagick के साथ बंडल उन लोगों के रूप "लंबे समय" विकल्प है, जो मैं पसंद होता है, लेकिन कई पुराने उपयोगिताओं, के लिए दो डैश का उपयोग कर के अपने सम्मेलन के साथ आया था ( जैसे , convert, mogrify"लंबे समय") है केवल एक ही डैश का उपयोग कर विकल्प। उदाहरण के लिए xterm -fn 6x10 -geometry 80x24+30+200:। लघुरूप, का समर्थन कर रहे हैं बशर्ते कि वे अलग (कर रहे हैं जैसे , -gया -geomके लिए -geometry)। अन्य उदाहरणों के लिए X (7) देखें ।
TheDudeAbides

जवाबों:


18

बस करो ls --help और विकल्पों को देखो; यह आपके लिए स्पष्ट होना चाहिए।

इसका मापदंडों से कोई लेना-देना नहीं है। कई विकल्पों में एक छोटा रूप और एक लंबा रूप होता है, और कई में एक और दूसरा नहीं होता है।

और मापदंडों के संबंध में भी, यह बस इतना है कि लंबे समय में जब वे एक पैरामीटर लेते हैं तो ऐसा लगता है कि यह हमेशा एक बराबरी के साथ है। लेकिन जाहिर है कि छोटे लोग भी उतना ही पैरामीटर ले सकते हैं; बस वे एक बराबरी का उपयोग नहीं करते हैं।

यहाँ से एक उद्धरण है ls --help( man lsसमकक्ष जानकारी देता है)। गौर करें कि कुछ एक संक्षिप्त रूप (बिना एक लंबे फार्म का --author, --block-size), कुछ एक लंबे फार्म (बिना एक संक्षिप्त रूप है -c, -f, -g), और कुछ दोनों एक लंबे फार्म और एक संक्षिप्त रूप (है -A/ --almost-all, -b/ --escape)।

 -a, --all                  do not ignore entries starting with .
 -A, --almost-all           do not list implied . and ..
     --author               with -l, print the author of each file
 -b, --escape               print octal escapes for nongraphic characters
     --block-size=SIZE      use SIZE-byte blocks
 -B, --ignore-backups       do not list implied entries ending with ~
 -c                         with -lt: sort by, and show, ctime (time of last
                              modification of file status information)
                              with -l: show ctime and sort by name
                              otherwise: sort by ctime
 -C                         list entries by columns
     --color[=WHEN]         control whether color is used to distinguish file
                              types.  WHEN may be `never', `always', or `auto'

4
हम ls --helpखिड़कियों पर कैसे करते हैं?
पचेरियर

1
@ स्पेसर lsविंडोज पर नहीं है। समतुल्य आज्ञा होगी dir /?। आप क्रॉस-प्लेटफ़ॉर्म सॉफ़्टवेयर का उपयोग कर रहे हैं जो सामान्य विंडोज सम्मेलनों का उल्लंघन करता है, मेरा जवाब देखें।
डैनियल बेक

@ स्पेसर इसमें नहीं बनाया गया है, लेकिन इसे डाउनलोड करें 3 पार्टी, Gnuwin32 आप इसे डाउनलोड करें (google gnuwin32)। gnuwin32 के भीतर प्रत्येक कमांड के साथ संकुल का एक गुच्छा है, कोरुटिल्स पैकेज डाउनलोड करें, जिसमें कई सामान्य कमांड हैं।
बार्लोप 20

आपके ls --helpउद्धरण में छोटे विकल्पों के बिना लंबे विकल्प हैं । देखें --authorऔर --block-size
दान

@ Pacerier के मूल टिप्पणी में सवाल का जवाब करने के लिए: सबसे आम तरीका आधुनिक विंडोज सिस्टम प्राप्त lsआदेश के माध्यम से है GIT । PATH में GIT बिन के साथ GIT बैश शेल या CMD विंडो होगी ls
yzorg

34

कोई व्यापक मानक नहीं है। जीएनयू कार्यक्रमों में कुछ स्थिरता है, लेकिन आपको प्रत्येक कार्यक्रम के प्रलेखन की जांच करने की आवश्यकता है।

विकिपीडिया का हवाला देते हुए , मेरा जोर दें:

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

आमतौर पर, हाइफ़न एक पूर्वनिर्धारित तर्क का संकेत देते हैं। मुझे लगता है कि इसका उपयोग उन्हें फ़ाइल नामों या अन्य लेबल से अलग करने के लिए किया जाता है जिन्हें आप तर्क के रूप में उपयोग कर सकते हैं। यह हमेशा मामला नहीं है, हालांकि (नीचे देखें)।


आपको अक्सर वही तर्क मिलेगा जो लघु और दीर्घ दोनों विकल्पों में उपलब्ध है, जैसे कि ls में

कुछ प्रोग्राम एक-चरित्र विकल्पों के लिए एक हाइफ़न का उपयोग करते हैं, और मल्टी-कैरेक्टर विकल्पों के लिए दो हाइफ़न, लेकिन सभी (जीएनयू findको ध्यान में नहीं आता है)। कुछ कार्यक्रमों में वैकल्पिक हाइफ़न होते हैं या उन्हें पूरी तरह से छोड़ देते हैं ( tarया बीएसडी psको ध्यान में रखते हैं)।

कभी-कभी लंबे विकल्पों ( --foo) के लिए तर्कों की आवश्यकता होती है, जबकि छोटे विकल्प ( -f) या (कम से कम एक विशिष्ट डिफ़ॉल्ट तर्क नहीं)।

लघु विकल्प (जैसे cut -d ' ') में तर्क हो सकते हैं, जबकि लंबे विकल्प (जैसे ls --all) जरूरी नहीं कि उनके पास हो।

एक कार्यक्रम के एक विशेष व्यवहार को निर्धारित करने के लिए, आपको कभी-कभी एक छोटे विकल्प का उपयोग करने की आवश्यकता होती है, दूसरों के लिए आपको एक लंबे विकल्प का उपयोग करने की आवश्यकता होती है, और कुछ के लिए आपके पास एक विकल्प होता है।

संबंधित नोट पर, कुछ प्रोग्राम एक विकल्प और इसके तर्क के बीच कोई व्हाट्सएप नहीं संभाल सकते हैं , जबकि अन्य नहीं कर सकते हैं।

जैसा कि मैंने शुरुआत में लिखा था, बस कोई सामान्य व्यवहार या मानक नहीं है। अक्सर आप तर्क पार्सिंग के लिए उपयोग की जाने वाली लाइब्रेरी के समान व्यवहार का पता लगा सकते हैं, लेकिन आप शायद इसे जानने के लिए स्रोतों को पढ़ना नहीं चाहते हैं।

आप वास्तव में एक प्रोग्राम के तर्क वाक्य को दूसरे से नहीं जोड़ सकते।


यदि आप विंडोज पर भी विचार करते हैं, तो यह और भी खराब हो जाता है: जबकि विंडोज कमांड लाइन पारंपरिक रूप से /fविकल्पों के लिए कम से कम (ज्यादातर समय, एकल वर्ण) कॉल का उपयोग करती है, :विकल्प और उनके मूल्य के बीच विभाजक के रूप में ( यहाँ देखें जैसे ); क्रॉस-प्लेटफ़ॉर्म उपयोगिताओं व्यापक हैं (जैसे कि आप जिन लोगों का उल्लेख करते हैं) और तर्कों के लिए अधिक सामान्य हाइफ़न सिंटैक्स साथ लाएं, ऊपर वर्णित सभी विसंगतियों के साथ।


2
यह ध्यान दिया जाना चाहिए कि जीएनयू मानक पुस्तकालय एक-माइनस-वन-लेटर, दो-माइनस-मल्टी-लेटर विकल्पों की मैपिंग की कार्यक्षमता प्रदान करते हैं, इसलिए सभी नए जीएनयू प्रोग्राम और सामान्य रूप से अधिकांश नए फ्री सॉफ्टवेयर इस नोटेशन का उपयोग करते हैं (जैसे - f, -f foo, --file, --file foo, --file = foo, --fil = foo, --fi = foo); जैसे throwbacks tar, ps, findऔर उनके कमांड लाइन सिंटेक्स इस तरह था POSIX द्वारा निर्धारित करने से पहले इस मानक पूरी तरह से gelled था। Gnu / Linux सिस्टम पर, यह एक यथोचित सुरक्षित शर्त है जो कम से कम --helpहमेशा (लगभग) समर्थित होगी, साथ ही साथ man <command>याinfo <command>
BRPocock

क्या जीएनयू मानक कहता है कि आपके पास लंबे फॉर्म के बिना छोटा फॉर्म नहीं होना चाहिए और शॉर्ट फॉर्म के बिना लंबा नहीं होना चाहिए?
बार्लोप 11

+1 सबसे अधिक पूर्ण उत्तर होने के लिए, जिसमें GNU का उल्लेख शामिल है findजो लंबे विकल्पों के लिए "GNU सम्मेलन" का पालन नहीं करता है (संभवतः POSIX अनुपालन के कारणों के लिए, जैसा कि @BRPocock ने बताया है)। अगर मैं, डॉस / विंडोज कमांड लाइन "स्विचेस" का उल्लेख कर सकता हूं, तो मैं फिर से +1 करूंगा, क्योंकि ओपी के प्रश्न को किसी तरह "विंडोज़" टैग किया गया था, और उस सम्मेलन को पूर्णता के लिए उल्लेख किया जाना चाहिए।
TheDudeAbides

7

यह एक सम्मेलन * निक्स से आ रहा है। जब वे पूर्ण रूप में लिखे जाते हैं, तब डबल हाइफ़न पूर्व विकल्प चुनते हैं , जबकि लघु रूप में लिखे जाने पर एकल हाइफ़न विकल्प होते हैं । उदाहरण के लिए ls --all --l, को छोटा किया जा सकता है ls -al। जैसा कि देखा जाता है, सभी विकल्पों में उनके एकल अक्षर समतुल्य नहीं होते हैं, हालांकि अधिक उपयोग किए जाने वाले आमतौर पर करते हैं।

क्या विकल्प लेता है तर्क वास्तव में फर्क नहीं करता है - यह या तो उन्हें ले सकता है, या उन्हें नहीं ले सकता है, भले ही आप विकल्प दर्ज करें।

एक समय के उपयोग के लिए उन्हें लिखते समय, यह वास्तव में मायने नहीं रखता है, लेकिन जब .alias फाइलों में उदाहरण के लिए कमांड लिखते हैं, तो यह पूर्ण-रूप का उपयोग करने के लिए प्रथागत है। विशुद्ध रूप से अगले व्यक्ति के लिए पढ़ने की आसानी के लिए।


अरे मदद के लिए धन्यवाद, Btw वहाँ एक कारण आप * निक्स के रूप में यूनिक्स टाइप है?
पचेरियर

2
@ स्पेसर - यूनिक्स एक व्यापार नाम है। * निक्स टाइप करके मैं वास्तव में सभी यूनिक्स और समान प्रणालियों को संदर्भित करता हूं, जो सभी व्यावहारिक उद्देश्यों के लिए समान हैं। लेकिन ज्यादातर, यह एक आदत है ...
Rook

2
@ स्पेसर * निक्स लिनक्स या यूनिक्स को संदर्भित कर सकता है। मुझे इस बात पर पूरा यकीन नहीं है कि 'कॉस कुछ समय पहले मैंने इसे देखा था, लेकिन तकनीकी रूप से, अगर मुझे याद है, तो बीएसडी यूनिक्स परिवार से है। लिनक्स तकनीकी रूप से नहीं है .. और न ही FreeBSD है। लेकिन यह कहते हुए कि निक्स में यूनिक्स / बीएसडी, और इसके जैसे कुछ भी शामिल होगा, जैसे कि लिनक्स और फ्रीबीएसड।
बार्लोप 20

2
शॉर्टहैंड कमांड संयोजन का उल्लेख करने के लिए +1। यही कारण है कि दो शैलियों का वास्तविक कारण है ।
रयान_एस

3

ये पारंपरिक यूनिक्स सिंटेक्स हैं,

जब एक साधारण विकल्प (उदाहरण: -v ) और दो हाइफ़न ("-") जब एक तर्क होता है, तो एक प्रोग्राम तर्क में एक हाइफ़न ("-") लिया जाता है, जब विकल्प तर्क लेता है (जैसे: --file toxxml या --file = toxxml )

कार्यक्रम की कार्यक्षमता पर कोई प्रभाव नहीं।


3
इसके अलावा, एकल डैश के बाद एकल अक्षर विकल्पों के साथ कई मामलों में, आप पत्रों को एक साथ समूहित कर सकते हैं। उदाहरण के लिए, "ls -al" "ls -a -l" के समान है। इस तरह डबल-डैश विकल्पों को संयोजित नहीं किया जा सकता है। एकल-अक्षर विकल्प एक पुराना मानक है, लेकिन इन दिनों कई आदेश दोनों प्रकार के होंगे। जैसे "ls --all" "ls -a" के समान है।
रैंडी ऑरिसन

3
दरअसल, एक और सुधार। सिंगल-डैश सिंगल-लेटर विकल्प एक पैरामीटर ले सकते हैं, लेकिन यह आमतौर पर एक समान चिह्न के साथ जुड़ा नहीं होता है। उदाहरण के लिए, "टेल-एन 50" एक फाइल की अंतिम 50 लाइनों को दिखाता है, जो "टेल --लाइन्स = 50" के बराबर है।
रैंडी ऑरिसन

इस सम्मेलन से, क्या इसका मतलब यह है कि --noout(ऊपर के प्रश्न में) वास्तव में लिखा जाना चाहिए -nooutक्योंकि इसमें तर्क नहीं हैं ?
पचेरियर

1
मापदंडों के बारे में इस उत्तर में जो कहा गया है वह पूरी तरह से गलत है। पहला वाक्य स्पष्ट है। अंतिम वाक्य स्पष्ट है। और बीच में जो पैरा सवाल का जवाब देना चाहिए, वह पूरी तरह से गलत है।
बारलोप

@RandyOrison जब एक भी अक्षर मैंने कभी भी एक बराबर चिह्न नहीं देखा है .. और अपनी बात पर विस्तार देने के लिए, वे अक्सर पैरामीटर लेते हैं .. wget -w 10 सिर -n 3 कट -b 2 और पिंग को देखो -? !! भार पैरामीटर लेते हैं। यह उत्तर भयानक है
बार्लोप

3

सिंगल डैश को गेटटॉप द्वारा कार्यान्वित किया जाता है और यह पॉज़िक्स स्टैंडर्ड फंक्शन है, गेटटॉप_लॉन्ग में डबल डैश है और ग्नू स्टैंडर्ड है।

परंपरागत रूप से, एक एकल डैश इस तरह एकल वर्ण विकल्प प्रदान करता है:

-ए या -वी आदि लेकिन जरूरत सिर्फ उसी तक सीमित नहीं है। जैसे- जीसीसी के लिए सभी गेल कंपाइलर कमांड के लिए सभी संकलक चेतावनी को चालू करते हैं।

डबल डैश तर्क अधिक क्रियाशील होते हैं और अक्सर एक आपूर्ति पैरामीटर लेते हैं जैसे - मैक्स-काउंट = एनयूएम। हालाँकि, --version नहीं के बराबर होता है।

सामान्यतया, इस बात के कोई नियम या परिभाषित मानक नहीं हैं कि कैसे कार्यक्रम तर्क को निर्दिष्ट किया जाए, बस परंपराओं का एक गुच्छा। हालाँकि, यदि getopt और getopt_long कमांड लाइन पार्सिंग फ़ंक्शन का उपयोग किया जाता है, तो मापदंडों को आम तौर पर मानक का पालन करना चाहिए क्योंकि लाइब्रेरी फ़ंक्शन इसे करने का एक निश्चित तरीका लागू करते हैं।

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