एक ध्वज, एक विकल्प और एक तर्क के बीच क्या अंतर है? [बन्द है]


14
  • ls -a(मैं -aएक विकल्प पर विचार करता हूं )

  • sudo -u username( -u= विकल्प, username= arg)

  • chmod 664 my-dir( 664= विकल्प, my-dir= arg)

मैं एक उदाहरण के बारे में नहीं सोच सकता हूं जो यह कह सकता है कि "यह एक ध्वज है", सिवाय इसके कि जब मैं dir लिस्टिंग को देख रहा हूं:

-r--------. 1 david david   3344 May 19 17:48 611056.pdf

इसमें मालिक के लिए "रीड फ्लैग" सेट है, लेकिन यह सब है। मुझे उस "रीड ऑप्शन" को कॉल करने से रोकने के लिए क्या है?

मैं मुख्य रूप से डॉकबुक एक्सएमएल में तकनीकी दस्तावेज लिखता हूं और संपादित करता हूं, और मैं अंतर की व्याख्या की तलाश कर रहा हूं, जो संगत और सटीक है। हालाँकि, मैं पहले से ही एक पैटर्न बना रहा हूँ:

  1. झंडे बुलियन होते हैं। जैसे,setenforce 0
  2. विकल्प यह निर्धारित करने में मदद करते हैं कि एक कमांड को कैसे व्यवहार करना चाहिए। कुछ वैकल्पिक हो सकते हैं।
  3. तर्क यह बताते हैं कि किस वस्तु को संचालित करना है।

मैं खुद को झंडे और विकल्पों को मिलाते हुए देख सकता था (कुछ विकल्पों में एक दर्जन संभव मूल्य हो सकते हैं, लेकिन बुलियन में केवल दो हैं)। उन्हें इस तरह बनाए रखने के लिए तर्क पर्याप्त रूप से भिन्न दिखाई देते हैं।


2
"मुझे कॉल करने से रोकने के लिए क्या है ..."? ऊँ कुछ नहीं। जिस तरह एक कुदाल को पेड़ कहने से कुछ नहीं होता।
मुरु

@ मुरू - यद्यपि एक अंग्रेजी शब्दकोश आपके दावे से असहमत होगा।
डार्कहार्ट

3
चीजों को और अधिक भ्रमित करने के लिए, मैं एक विकल्प भी कहूंगा जो आपके ls -aउदाहरण में पैरामीटर / तर्क को ध्वज नहीं लेता है । (मेरे लिए, एक ध्वज एक बूलियन चर है।)
उलरिच श्वार्ज

3
वे कुत्ते kennels रहे हैं ; उनमें से सभी तीस। :-)
स्कॉट

पैटर्न जो आप देखते हैं वह केवल इसलिए है क्योंकि आप उन चीजों को संकीर्ण कर देते हैं जिन्हें आप देखना चाहते हैं। एक तरह से एक टीएआर फ़ाइल बनाने के लिए नहीं (है कि मैं 30 से अधिक वर्षों के लिए उपयोग किया गया है) और जैसे यह निकालने है: tar c abc.txt > x.tar, में वहाँ cएक है समारोह । आप उस विकल्प को कॉल करने का प्रयास कर रहे हैं और यह पूरी तरह से अनुचित है।
एंथन

जवाबों:


17

"विकल्प", "तर्क" और "ध्वज" शब्दों की कोई सुसंगत परिभाषा नहीं हैं, और सॉफ्टवेयर विकास की दुनिया के भीतर कोई केंद्रीय प्राधिकरण नहीं है जो उनके उपयोग को लागू कर सके। यह बहुत शब्दावली के साथ होता है: "निर्देशिका" शब्द का उपयोग करने के 30+ वर्षों के बाद, मुझे अब "फ़ोल्डर" शब्द का उपयोग करने वाले लोगों से निपटना होगा जो माइक्रोसॉफ्ट के नए-भाषण से भ्रमित हो गए हैं।

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

उदाहरण के लिए, कमांड के बाद आप कमांड लाइन पर जो चीजें डालते हैं, उन्हें अक्सर कमांड में "तर्क" कहा जाता है, एक फ़ंक्शन कॉल के लिए तर्कों के साथ सादृश्य द्वारा , और यह शायद आंशिक रूप से है क्योंकि उन्हें सी मैनुअल में "तर्क" कहा जाता है ( इसलिए argcऔर argv)। argparseअजगर पुस्तकालय भी शब्द "तर्क" लागू करने के लिए मदद करता है। हालाँकि, मैंने उन्हें "पैरामीटर" कहा जा रहा है।

"विकल्प" शब्द "वैकल्पिक" से लिया गया है, जिसका अर्थ है कि उन्हें छोड़ दिया जा सकता है। getoptसी पुस्तकालय इस शब्द का एक प्रयोग है। लेकिन "विकल्पों" के लिए मिसाल है कि वास्तव में वैकल्पिक नहीं हैं: उदाहरण के लिए, argparse मैनुअल बताता है कि कोई "आवश्यक विकल्प" बना सकता है (हालांकि यह भी कहता है कि यह "आमतौर पर बुरा रूप माना जाता है")। विकल्प अक्सर एक ही (से पहले कर रहे हैं -) या डबल ( --, लंबे समय से विकल्प) पानी का छींटा, लेकिन वहाँ अच्छी तरह से ज्ञात आदेशों की आवश्यकता होती है या विकल्पों के लिए पानी का छींटा उपयोगिता को लागू नहीं करते हैं (जैसे, tar, ps, और dd)। एक विकल्प अपने आप में एक तर्क (जैसे, -w80और --color=always), या कभी-कभार कई तर्क ले सकता है।

"झंडे" मेरे अनुभव में हैं, विकल्प के समान, लेकिन आमतौर पर खुद तर्क नहीं लेते हैं और अनिवार्य रूप से बूलियन ऑन-ऑफ स्विच का प्रतिनिधित्व करते हैं।

एक व्यापक नोट पर, चूंकि प्रत्येक प्रोग्रामर के पास चीजों को और नामकरण करने के कुछ मानक तरीके को आज़माने और देखने का विकल्प होता है, लेकिन बहुत अतिरिक्त लागत के बिना पहिया को फिर से मजबूत कर सकते हैं, नामकरण कभी भी सुसंगत नहीं होने वाला है। और एक बार जब आप अपने कोड का दस्तावेजीकरण कर लेते हैं, और यह स्पष्ट हो जाता है कि आपने उदाहरणों को देकर इन शब्दों को क्या नया अर्थ दिया है, तो वे नाम और अर्थ बस चिपक सकते हैं यदि आपके कोड से उन्हें लेने वाले पर्याप्त लोग हैं।


7

एक ध्वज एक प्रकार का विकल्प है, बूलियन प्रकार का एक विकल्प है, और डिफ़ॉल्ट रूप से हमेशा गलत होता है (जैसे --verbose, --quiet, --all, --long, आदि)।

एक विकल्प फ़ंक्शन को बताता है कि कैसे कार्य करना है (जैसे -a, -l, --verbose, --output, -name, -c, आदि), एक तर्क यह बताता है कि फ़ंक्शन को क्या कार्य करना है / से (जैसे *, file1,) होस्टनाम, डेटाबेस)।


तो आपकी परिभाषा में, में git pull git://bla/bla, pullएक तर्क है जो बताता है कि gitकिस पर काम करना है।
एंथन

1
@Anthon नहीं, वहाँ ऑपरेटर (स्विच / झंडे / पैरामीटर), तर्क और आदेश हैंpullएक आदेश है। एक कमांड के अनुप्रयोग के नाम के एक्सटेंशन के रूप में सोच सकता है: git पुल <...> नामक एप्लिकेशन के बराबर है git-pull। जब एप्लिकेशन में कमांड्स होते हैं, तो प्रत्येक कमांड एप्लिकेशन को पूरी तरह से कुछ अलग करता है।
जिग्गी क्रुएल्टीफ्री ज़ेतिगेस्टर

Git लोग इसे एक कमांड कह सकते हैं, लेकिन यह हमेशा ऐसा नहीं होता है tar, जैसे इसे कहा जाता है , cबनाने के लिए उपयोग करने को फ़ंक्शन कहा जाता है । और यह वास्तव में समस्या है: शब्दों का कोई मानकीकरण नहीं है, भले ही ऐसा लगता है कि आपको लगता है कि आपके उत्तर से है
एंथन

किसी ध्वज को डिफ़ॉल्ट रूप से गलत नहीं होना चाहिए। कमांड लाइन पर ध्वज प्रदान करने से बस इसकी डिफ़ॉल्ट स्थिति (ऑन -> ऑफ, या ऑफ ->) से उलट हो जाती है। कुछ लोग कहते हैं कि इसे एक झंडे से अलग करने के लिए टॉगल किया जाता है। दूसरों को लगता है कि भेद महत्वहीन है।
कैस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.