जवाबों:
संक्षिप्त उत्तर :
क्योंकि यह एक ध्वज के कई उपयोगों को अनदेखा करने के लिए प्रोग्राम किया गया है।
लंबा जवाब:
आप में देख सकते हैं स्रोत कोड की 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
एक समस्या नहीं है, और यह किसी भी महत्वपूर्ण ढंग से निष्पादन प्रभावित नहीं करता। कंप्यूटर मन-सुन्न पुनरावृत्ति में अच्छे हैं।