रेमंड से बोली @jasonwryan से कुछ उपयोगी जानकारी है, लेकिन कहानी के बीच में शुरू होता है:
- ध्यान रखें कि यूनिक्स मल्टीिक्स के कम-गुंजाइश संस्करण के रूप में शुरू हुआ था, और यह कि इसके पूरे इतिहास में, यूनिक्स में अक्सर अन्य सिस्टमों पर देखी और उपयोग की जाने वाली सुविधाओं की नकल या अनुकूलन थे।
'-'
विकल्प चरित्र मॉलटिक्स में इस्तेमाल किया गया था। Bitsavers अपने उपयोगकर्ता आदेशों के लिए एक मैनुअल है ।
- अन्य प्रणालियों ने विभिन्न वर्णों का उपयोग किया, कुछ और अधिक कीस्ट्रोक-कुशल होने का दावा करते हैं (जैसे कि
'/'
TOPS और VMS के लिए उपयोग किया जाता है) और कुछ कम (जैसे कि '('
VM / SP CMS में उपयोग किया जाता है)।
- बहुविकल्पी विकल्प बहु-चरित्र थे, उदाहरण के लिए, अंडरस्कोर द्वारा अलग किए गए कीवर्ड।
- लंबे समय तक बहुविकल्पी विकल्पों में अक्सर एक छोटा, संक्षिप्त रूप होता था, जैसे
-print
बनाम -pr
(पृष्ठ 3-8)।
- यूनिक्स विकल्प एकल-वर्ण थे, और कई वर्षों के बाद,
getopt
पेश किया गया था। चूँकि यह मूल यूनिक्स का हिस्सा नहीं था, इसलिए उपयोगिताओं का उपयोग नहीं किया गया था getopt
और इसे छोड़ दिया गया था। लेकिन getopt
कार्यक्रमों को सुसंगत बनाने में मदद की।
दूसरी ओर, यूनिक्स विकल्प getopt
एकल-वर्ण का उपयोग कर रहे थे। अन्य सिस्टम, विशेष रूप से सभी बड़े वाले, कीवर्ड का उपयोग करते थे। कुछ (सभी नहीं) ने उन खोजशब्दों को संक्षिप्त करने की अनुमति दी , अर्थात, जब तक कि विकल्प असंदिग्ध नहीं था, सभी वर्ण प्रदान नहीं किए गए थे। अस्पष्टता के लिए उस परीक्षण में नुकसान होते हैं। उदाहरण के लिए:
- 1985 की शुरुआत में, मैं एक कार्यक्रम पर काम कर रहा था, जिसे प्रिमोस में पोर्ट किया जाना था । प्राइम के डेवलपर्स ने कई अन्य कंपनियों के साथ एक कमांड-भाषा की पेशकश करके प्रतिस्पर्धा की, जो (उन सभी में से प्रत्येक की नकल करने की कोशिश की), प्रत्येक से सबसे अधिक उपयोग की जाने वाली कमांड प्रदान करते हैं। बेशक, उन्होंने संक्षिप्त समर्थन किया (जैसा कि वीएमएस ने किया था)। ऑनलाइन मदद पढ़ने के बाद, मैंने टाइप किया
sta
, सोचने के लिए status
। यह संक्षिप्त नाम था start
, और शुरू करने के लिए कुछ भी नहीं दिया गया था , कमांड दुभाषिया ने मुझे बंद कर दिया।
- एक्स टूलकिट ( xterm द्वारा प्रयुक्त ) संक्षिप्त विकल्पों की अनुमति देता है। एक्सटर्म में इसे प्रभावी ढंग से उपयोग करने के लिए, इसे (दृश्य घंटी)
-v
ओवर -vb
( पसंद के लिए) के लिए कमांड मापदंडों को प्राथमिकता देना होगा । अस्पष्टता होने पर पसंदीदा टूल को निर्दिष्ट करने के लिए एक्स टूलकिट का कोई सीधा तरीका नहीं है।
अस्पष्टता के लिए इस क्षमता के कारण, कुछ डेवलपर्स संक्षिप्त अनुमति नहीं देना पसंद करते हैं। उदाहरण के लिए, लिंक्स संक्षिप्तीकरण की अनुमति के बिना बहु-वर्ण विकल्पों का उपयोग करता है।
सभी कार्यक्रमों का उपयोग नहीं किया गया getopt
: tar
और ps
नहीं किया। और न ही rcs
(या sccs
), जैसा कि आप देख सकते हैं जहां डैश वैकल्पिक था, और विकल्प मान वैकल्पिक थे।
इस सब को ध्यान में रखते हुए, GNU डेवलपर्स ने getopt
प्रत्येक छोटे विकल्प का एक लंबा संस्करण प्रदान करने के लिए विस्तार करके अन्य प्रणालियों में उपयोग किए जाने वाले कीवर्ड विकल्पों को अनुकूलित किया । उदाहरण के लिए, textutils 1.0 changelog कहते हैं
Tue May 8 03:41:42 1990 David J. MacKenzie (djm at abyss)
* tac.c: Use regular expressions as the record boundaries.
Give better error messages.
Reformat code and make it more readable.
(main): Use getopt_long to parse options.
फाइलुटिल में परिवर्तन पहले था:
Tue Oct 31 02:03:32 1989 David J. MacKenzie (djm at spiff)
* ls.c (decode_switches): Add long options, using getopt_long
instead of getopt.
और किसी को अभी भी एक मिल सकता है, लेकिन ऐसा लगता है कि फ़ाइल-हेडर जल्द से जल्द तारीख दिखाता है:
/* Getopt for GNU.
Copyright (C) 1987, 1989 Free Software Foundation, Inc.
जो (उदाहरण के लिए) एक्स टूलकिट (1987) के साथ समवर्ती है। अधिकांश यूनिक्स उपयोगिताओं जिनके साथ आप परिचित हैं (जैसे कि ls
, ps
) ने मौजूदा एकल-वर्ण विकल्पों का उपयोग किया, जिन्हें मैनुअल में आवधिक यात्राओं की आवश्यकता होती है। शुरू करते समय getopt_long
, GNU डेवलपर्स ने पहले नए विकल्प जोड़कर ऐसा नहीं किया ; वे मौजूदा विकल्पों को सारणीबद्ध करके और एक लंबे मिलान विकल्प प्रदान करके शुरू हुए।
क्योंकि वे एक मौजूदा प्रदर्शनों की सूची में जोड़ रहे थे , इसलिए (फिर से) मौजूदा विकल्पों के साथ संघर्ष की समस्या थी। इससे बचने के लिए, उन्होंने लंबे विकल्पों से पहले दो डैश का उपयोग करते हुए सिंटैक्स को बदल दिया।
ये कार्यक्रम getopt_long
इस तरह से सामान्य कारणों से उपयोग करना जारी रखते हैं :
- स्क्रिप्ट विकल्पों पर निर्भर करती हैं; डेवलपर्स स्क्रिप्ट्स को तोड़ने के लिए उत्सुक नहीं हैं
- एक लिखित कोडिंग मानक है (जो प्रभावी हो सकता है)
- कोई भी उपकरण के एक प्रतिस्पर्धा सेट के साथ नहीं आया है जो स्पष्ट रूप से असंगत है (दोनों बीएसडी और जीएनयू डेवलपर्स एक दूसरे से विकल्प नाम कॉपी करते हैं)
-
को तकनीकी रूप से हाइफन कहा जाता है । हम ज्यादातर मामलों में, डैश (-) और कभी-कभी एन डैश (-) का उल्लेख करने के लिए "डैश" शब्द का उपयोग करते हैं, लेकिन इनमें से कोई भी हाइफ़न (-) नहीं है।