Yanıtlar:
Kısa cevap :
Çünkü bir bayrağın birden fazla kullanımını göz ardı etmek için programlanmıştır.
Uzun cevap:
İçinde görebileceğiniz gibi kaynak kodu arasında ls, işlevi ile bir parçası olduğunu getopt_long()ve büyük bir anahtar durumunda:
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 }
Fonksiyon getopt_long(), programa verilen tüm parametreleri okur. Durumda ise -ldeğişken formatayarlanır. Bu nedenle, birden fazla -lllllllllyazdığınızda, bu değişken birden çok kez ayarlanır, ancak bu hiçbir şeyi değiştirmez.
Bir şeyi değiştiriyor. Bu büyük anahtar durum ifadesi, birden çok -lbayrak nedeniyle birden çok kez çalıştırılmalıdır . lsbirden çok -lbayrakla tamamlanması gerekiyor . Ancak bu kez bahsetmeye değmez. =)
Çünkü yapılacak doğru şey bu. Diyelim ki bir komut dosyası kullandınız:
ls $LS_OPTIONS -l "$dir"
$LS_OPTIONSzaten içerdiği olası -l. Bu komutun bir hata üretmesi karşı sezgisel ve sinir bozucu olurdu ve bundan kaçınmak için kodda ekstra mantık gerektirir.
-lbunun en iyi örneği olmayabilir, ancak umarım kavramın genel olarak nasıl uygulandığını görebilirsiniz. Çok daha iyi bir örnek, derleyicinin $CFLAGSbelirli bir çağrısında açık seçenekleri çoğaltabilecek derleyici seçenekleridir .
ls, bazı seçeneklerle çağıran bir takma ad tanımladıysanız da olabilir .
-ladınızı koymak lskötü bir fikir gibi görünse de, aynı sorunun veya lsgibi etkileşimli bir takma adda güzel seçeneklerle ortaya çıkması muhtemeldir . -p--color=auto
ls. lliçin bir takma ad olabilir ls -lve bu takma adı olan bir sistemde yazabilirim ll -lart.
lsbir bashkomut değil , başlattığınız ayrı bir yürütülebilir dosyadır bash. Bununla birlikte, -leğer mevcutsa lsçıktı için uzun bir stil formatına neden olan sadece bir Boolean bayrağı türüdür . Çoğu program basitçe bu tür bayrakların birden fazla kullanımını görmezden gelir ( ls -llaynıdır ls -l -l), ancak bazı istisnalar olsa da (örnek olarak, -v'ayrıntılı' anlamına gelirse , bir program birden fazla kullanımı "daha ayrıntılı" olarak yorumlayabilir).
-vvvIS ssh.
aptitude moo
Kabuk takma adları, gibi komutlar lstekrarlanan seçeneklere izin vermezse oldukça can sıkıcı olurdu .
Varsayalım
alias ls='ls --color=auto'
alias rm='rm -i'
Çelişkili bayrakları izin verilmedi Sonra, bu bir benzeri sorunu komutlarına hata olurdu ls --color=neverya ls --color=autoya rm -i.
Bu nedenle, bu komutlar sonraki bayrakların önceki komutları geçersiz kılmasına izin verecek şekilde tasarlanmıştır.
--inplaceve --delay-updatesörneğin.) Bazı araçlar en son gelenleri alır; rm -ifmuhtemelen iyi bir örnektir. Ama ls en -l seçeneğinde hiçbir çatışma dolayısıyla olduğunu ls -lve ls -llbir sorun değildir ve herhangi bir anlamlı şekilde yürütülmesini etkilemez. Bilgisayarlar zihin uyuşmazlığı konusunda iyidir.