2016-04-08 5 views
16

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

+0

ये शर्तें शैल-विशिष्ट नहीं हैं: किसी भी प्रकार के किसी भी खोल के बिना 'execv'-style syscall को तर्क के रूप में दिए गए शाब्दिक' argv' सरणी में किसी प्रोग्राम के निष्पादन समय में तर्क पारित किए जा सकते हैं। –

उत्तर

33

कमांडतर्क नामक तारों की एक सरणी में विभाजित है। तर्क 0 (सामान्यतः) कमांड नाम, तर्क 1, कमांड के बाद पहला तत्व है, और इसी तरह।

$ ls -la /tmp /var/tmp 
arg0 = ls 
arg1 = -la 
arg2 = /tmp 
arg3 = /var/tmp 

एक विकल्प की तर्क एक दस्तावेज प्रकार एक आदेश, उदा के व्यवहार को संशोधित है -l आमतौर पर "लंबा", -v वर्बोज़ का अर्थ है। -lvदो विकल्प एकल तर्क में संयुक्त विकल्प हैं। --verbose जैसे लंबे विकल्प भी हैं। जैसा कि उनके नाम से पता चलता है, विकल्प आमतौर पर वैकल्पिक होते हैं। हालांकि विरोधाभासी "अनिवार्य विकल्प" के साथ कुछ आदेश हैं।

$ ls -la /tmp /var/tmp 
option1= -l 
option2= -a 

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

$ ls -la /tmp /var/tmp 
parameter1= /tmp 
parameter2= /var/tmp 

$ ls -l -- -a 
option1 = -l 
parameter1 = -a 

अंत में, subcommands, यह भी कार्य/(निम्न स्तर) के रूप में जाना आदेश है, जो "metacommands" है कि अधिक अलग-अलग आदेशों एम्बेड करते हैं, busybox की तरह, git, apt-get, openssl के साथ किया जाता है, और पसंद। उनके साथ, आपके पास उप-आदेश से पहले वैश्विक विकल्प हो सकते हैं, और सबकॉमैंड का पालन करने वाले उप-आदेश विशिष्ट विकल्प हो सकते हैं। पैरामीटर के विपरीत, संभावित उपसमूहों की सूची कमांड में हार्डकोड की जाती है। उदाहरण के लिए:

$ busybox ls -l 
command   = busybox 
subcommand   = ls 
subcommand option1 = -l 

$ git --git-dir=a.git --work-tree=b -C c status -s 
command   = git 
command option1 = --git-dir=a.git 
command option2 = --work-tree=b 
command option3 = -C 
subcommand   = status 
subcommand option1 = -s 

ध्यान दें कि test, tar, dd और find की तरह कुछ आदेश से लोगों को पहले बताए और अधिक जटिल तर्क पार्स वाक्य रचना है और कुछ या उनके तर्कों के रूप में expressions, operands, keys और इसी तरह के पार्स के सभी हो सकता है कमांड विशिष्ट घटकों।

+4

उत्कृष्ट उत्तर –

+0

@jlliagre क्या "हार्डकोडेड वेरिएबल" पैरामीटर के रूप में भी जाना जाता है? जैसे फ़ाइल के लिए कुछ पथ, जिसे आप तर्क के रूप में पास नहीं करते हैं, लेकिन 'VARNAME = "VALUE" सिंटैक्स का उपयोग करके बैश स्क्रिप्ट के अंदर बनाते हैं। यदि नहीं (यानी VARNAME पैरामीटर नहीं है), तो पैरामीटर विस्तार की अवधारणा हार्डकोडेड चर पर भी लागू क्यों होती है? – user1534664

+1

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

5

man एक विशिष्ट यूनिक्स कमांड के लिए पृष्ठ अक्सर argument, option और parameter का उपयोग करता है। निम्नतम स्तर पर, हमारे पास argument है और सबकुछ एक तर्क है, जिसमें (फाइल सिस्टम पावर) कमांड भी शामिल है।

एक शैल स्क्रिप्ट में आप विशेष चर $0 .. $n का उपयोग करके तर्कों तक पहुंचते हैं। अन्य भाषाओं में उन तक पहुंचने के समान तरीके हैं (आमतौर पर argv जैसे नाम वाले सरणी के माध्यम से)।

यदि आप चाहें तो विकल्प के रूप में तर्कों का अर्थ लिया जा सकता है। यह कैसे किया जाता है कार्यान्वयन-विशिष्ट है। आप या तो एक खोल की जांच के लिए अपना खुद का रोल कर सकते हैं (जैसे bash) स्क्रिप्ट getopts या getopt आदेश प्रदान कर सकते हैं।

ये आम तौर पर एक बहस एक हाइफन (-) और कुछ विकल्प अपने पैरामीटर के रूप में आगे बढ़ने से तर्क का उपयोग कर सकते के साथ शुरुआत के रूप में एक विकल्प परिभाषित करते हैं। अधिक सक्षम पार्सर्स (उदा। getopt) मिश्रण शॉर्ट-फॉर्म (-h) और लंबे प्रारूप (--help) विकल्पों का समर्थन करते हैं।

आमतौर पर, अधिकतर विकल्प शून्य या एक पैरामीटर लेते हैं। ऐसे पैरामीटर को कभी-कभी मान कहा जाता है।

समर्थित विकल्प प्रोग्राम कोड में कोड किए गए हैं (उदाहरण के लिए getopts के शेल स्क्रिप्ट के भीतर आमंत्रण में)। विकल्प के बाद किसी भी शेष तर्क का उपभोग किया जाता है, जिसे आमतौर पर स्थितित्मक पैरामीटर कहा जाता है जब उन्हें दिया गया क्रम महत्वपूर्ण होता है (यह उन विकल्पों के विपरीत है जो आमतौर पर किसी भी क्रम में दिए जा सकते हैं)।

फिर, स्क्रिप्ट परिभाषित करता है कि स्थितित्मक पैरामीटर यह कैसे खपत करते हैं और उनका उपयोग करते हैं।

तो एक ठेठ आदेश

$ ls -I README -l foo 'bar car' baz 

सात तर्क हैं: /usr/bin/ls, -I, README, -l, foo, bar car, और baz$0 के रूप में सुलभ $6 के माध्यम से। -l और -Iविकल्पों के रूप में व्याख्या कर रहे हैं, बाद एक पैरामीटर (या मूल्य) README की हो रही है। स्थितित्मक पैरामीटर (foo, bar car और baz) क्या हैं।

विकल्प पार्स उन खपत को हटाने (उदाहरण, shift या set का प्रयोग करके) ताकि केवल स्थितीय मापदंडों बनी रहती है और के रूप में $1 .. $n उसके बाद से सुलभ हैं द्वारा तर्क सूची बदल सकता है।

संबंधित मुद्दे