जवाबों:
संक्षिप्त उत्तर :
क्योंकि यह एक ध्वज के कई उपयोगों को अनदेखा करने के लिए प्रोग्राम किया गया है।
लंबा जवाब:
आप में देख सकते हैं स्रोत कोड की ls, वहाँ समारोह के साथ एक हिस्सा है getopt_long()और एक विशाल स्विच मामला:
1648 int c = getopt_long (argc, argv,
1649 "abcdfghiklmnopqrstuvw:xABCDFGHI:LNQRST:UXZ1",
1650 long_options, &oi);
....
1654 switch (c)
1655 {
....
1707 case 'l':
1708 format = long_format;
1709 break;
....
1964 }
फ़ंक्शन getopt_long()प्रोग्राम को दिए गए सभी पैरामटर्स पढ़ता है। मामले में अगर -lचर formatसेट है। इसलिए जब आप -lllllllllएक से अधिक बार टाइप करते हैं तो चर कई बार सेट होता है, लेकिन इससे कुछ भी नहीं बदलता है।
खैर, इससे एक बात बदल जाती है। इस विशाल स्विच केस स्टेटमेंट को कई बार, कई -lझंडे के कारण चलना चाहिए । lsकई -lझंडे के साथ पूरा करने की जरूरत है । लेकिन यह समय ध्यान देने योग्य नहीं है। =)
क्योंकि यह सही काम है। मान लीजिए कि आपके पास कुछ करने जैसी एक स्क्रिप्ट थी:
ls $LS_OPTIONS -l "$dir"
जहां यह संभव है कि $LS_OPTIONSपहले से ही शामिल है -l। यह इस कमांड के लिए एक त्रुटि उत्पन्न करने के लिए काउंटर-सहज और कष्टप्रद होगा और इसे बचने के लिए स्क्रिप्ट में अतिरिक्त तर्क की आवश्यकता होगी।
-lइसके लिए सबसे अच्छा उदाहरण नहीं हो सकता है, लेकिन उम्मीद है कि आप देख सकते हैं कि अवधारणा सामान्य रूप से कैसे लागू होती है। एक बेहतर उदाहरण संकलक विकल्प हैं $CFLAGSजो संकलक के किसी विशेष आह्वान में स्पष्ट विकल्पों की नकल कर सकते हैं।
lsविकल्पों के कुछ सेट के साथ कॉल करता है।
-lअपने lsउपनाम में डालना एक बुरे विचार की तरह लगता है, वही मुद्दा उन विकल्पों के साथ उत्पन्न होने की संभावना है जो कि या lsजैसे एक इंटरैक्टिव उपनाम में अच्छे हैं । -p--color=auto
ls। llके लिए एक उपनाम हो सकता है ls -l, और उस उपनाम के साथ एक प्रणाली पर, मैं टाइप कर सकता हूं ll -lart।
lsएक bashकमांड नहीं है , लेकिन एक अलग निष्पादन योग्य है जो आप से लॉन्च करने के लिए होता है bash। उस ने कहा, -lबस बूलियन ध्वज का एक प्रकार है, जो वर्तमान lsमें आउटपुट के लिए एक लंबी शैली प्रारूप का उपयोग करने का कारण बनता है। अधिकांश कार्यक्रम बस ऐसे झंडे के कई उपयोगों ( जैसे ls -llही हैं ls -l -l) की उपेक्षा करेंगे , हालांकि कुछ अपवाद हैं (उदाहरण के लिए, यदि -v'क्रिया' का अर्थ है, तो एक कार्यक्रम कई अर्थों की व्याख्या कर सकता है जिसका अर्थ है "और भी अधिक क्रिया हो")।
-vvvहै ssh।
aptitude moo
शेल अलायस बहुत कष्टप्रद होगा यदि कमांड जैसे lsदोहराया विकल्पों की अनुमति नहीं देता है।
मान लो तुम्हारे पास था
alias ls='ls --color=auto'
alias rm='rm -i'
फिर, परस्पर विरोधी झंडे की अनुमति नहीं थी, तो यह की तरह इस मुद्दे को आदेशों का एक त्रुटि होगा ls --color=neverया ls --color=autoया rm -i।
इसलिए, इन आदेशों को बाद के झंडों को पहले से ओवरराइड करने के लिए डिज़ाइन किया गया है।
--inplaceऔर --delay-updates, उदाहरण के लिए।) कुछ उपकरण बस ले जो कुछ भी पिछले आता है; rm -ifशायद वहाँ एक अच्छा उदाहरण है। लेकिन वहाँ ls के -l विकल्प में कोई विवाद है, इसलिए ls -lऔर ls -llएक समस्या नहीं है, और यह किसी भी महत्वपूर्ण ढंग से निष्पादन प्रभावित नहीं करता। कंप्यूटर मन-सुन्न पुनरावृत्ति में अच्छे हैं।