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 -l
değişken format
ayarlanır. Bu nedenle, birden fazla -lllllllll
yazdığı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 -l
bayrak nedeniyle birden çok kez çalıştırılmalıdır . ls
birden çok -l
bayrakla 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_OPTIONS
zaten 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.
-l
bunun en iyi örneği olmayabilir, ancak umarım kavramın genel olarak nasıl uygulandığını görebilirsiniz. Çok daha iyi bir örnek, derleyicinin $CFLAGS
belirli 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 .
-l
adınızı koymak ls
kötü bir fikir gibi görünse de, aynı sorunun veya ls
gibi etkileşimli bir takma adda güzel seçeneklerle ortaya çıkması muhtemeldir . -p
--color=auto
ls
. ll
için bir takma ad olabilir ls -l
ve bu takma adı olan bir sistemde yazabilirim ll -lart
.
ls
bir bash
komut değil , başlattığınız ayrı bir yürütülebilir dosyadır bash
. Bununla birlikte, -l
eğ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 -ll
aynı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).
-vvv
IS ssh
.
aptitude moo
Kabuk takma adları, gibi komutlar ls
tekrarlanan 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=never
ya ls --color=auto
ya rm -i
.
Bu nedenle, bu komutlar sonraki bayrakların önceki komutları geçersiz kılmasına izin verecek şekilde tasarlanmıştır.
--inplace
ve --delay-updates
örneğin.) Bazı araçlar en son gelenleri alır; rm -if
muhtemelen iyi bir örnektir. Ama ls en -l seçeneğinde hiçbir çatışma dolayısıyla olduğunu ls -l
ve ls -ll
bir sorun değildir ve herhangi bir anlamlı şekilde yürütülmesini etkilemez. Bilgisayarlar zihin uyuşmazlığı konusunda iyidir.