Kiedy to robię - CD ..
zamiast cd ..
tego daje mi błąd mówiąc -
CD: command not found
Dlaczego w terminalach rozróżniana jest wielkość liter, jeśli chodzi o polecenia systemu Linux? Mam na myśli, że powinieneś być w stanie wykonać polecenie albo ze znakami „wszystkie wielkie litery” albo „wszystkie małe litery”.
Wiem, że to z jakiegoś powodu, ale jestem po prostu ciekawy.
shell
user-interface
Hussain Tamboli
źródło
źródło
stty iuclc olcuc
jeśli masz ochotę na terminal bez rozróżniania wielkości liter ;-)Odpowiedzi:
Ostatecznie był to arbitralny wybór dokonany przez twórców Uniksa ponad cztery dekady temu. Mogliby zdecydować się na to, aby rzeczy nie rozróżniały wielkości liter, tak jak zrobili to twórcy MS-DOS dziesięć lat później, ale ma to również swoje wady.
Jest zbyt głęboko osadzony w kulturze * ix, aby można go teraz zmienić. Wielkość liter system plików problem wychowany przez eppesuig jest tylko częścią. Systemy macOS - które są oparte na Uniksie - zazwyczaj mają systemy plików bez rozróżniania wielkości liter (ale z zachowaniem wielkości liter), więc w takich systemach polecenia zewnętrzne względem powłoki są w rzeczywistości traktowane bez rozróżniania wielkości liter. Ale wbudowane
cd
, takie jak , rozróżniają małe i wielkie litery.Nawet w przypadku systemu plików bez rozróżniania wielkości liter historia rzeczy spisuje się wbrew twoim życzeniom, Hussain. Gdy piszę
ls
na komputerze Mac, otrzymuję pokolorowaną listę katalogów. JeśliLS
zamiast tego piszę ,/bin/ls
nadal działa, ale wpis nie jest pokolorowany, ponieważ w aliasie dodającym-C
flagę rozróżniana jest wielkość liter.Najlepiej przyzwyczaj się do tego. Jeśli możesz, naucz się go lubić.
źródło
To nie jest problem z terminalem, to funkcja systemu plików. Jak powłoka powinna szukać poleceń w systemie plików (zawsze rozróżniającym wielkość liter)?
źródło
bash
opcja o nazwiecdspell
: próbuje znaleźć poprawną nazwę pliku, nawet jeśli źle go podałeś, ale działa tylko dla argumentów poleceń .cd
,CD
,cD
aCd
każdy z unikalnym zachowanie.hash -p /bin/hostname HOSTNAME
a terazHOSTNAME
jest polecenie dla/bin/hostname
.set completion-ignore-case on
.W systemach technicznych, których używam i które szanuję, rozróżniana jest niemal wyłącznie wielkość liter: system operacyjny, język programowania lub cokolwiek innego.
Wyjątkami, o których teraz mogłem pomyśleć, są tagi HTML i niektóre implementacje SQL oraz język programowania Ada.
Nawet w tych przypadkach myślę, że istnieją silne tendencje do pisania znaczników HTML małymi literami, a semantyka zapytań SQL dużymi literami (i wielkie litery parametrów). (Popraw mnie, jeśli się mylę.) Jeśli chodzi o Adę, tryb Emacsa poprawi cię, jeśli na przykład wpiszesz nazwę procedury małymi literami, chociaż nie będzie to miało znaczenia podczas kompilacji. Tak więc nawet w przypadku braku rozróżniania wielkości liter wydaje się, że ludzie zgadzają się, że to zły pomysł.
Powodem jest to, że zyskujesz znacznie większą moc ekspresji z rozróżnianiem wielkości liter. Nie tylko ilościowo -
CD
to jedno, aleCD
,Cd
,cD
, acd
cztery - ale, co ważniejsze, można wyrazić cel, nacisk itp użyciu małych oraz wielkich sensownie; podczas programowania zwiększysz czytelność.Intuicyjnie jasne jest, że nie czytasz
hi
i wHI
ten sam sposób!Ale, aby dać przykład świata komputerowego, w języku programowania Ada (z lat 80.) pierwszy wiersz bloku kodu procedury może wyglądać następująco:
jak widać, nazwy procedur i parametrów są pisane wielkimi literami, podobnie jak typy danych, wszystko inne jest pisane małymi literami. Zauważ też, że nazwa parametru „wielkie litery” mówi nam, że jest to akronim. Teraz porównaj to
Jest to możliwe, ponieważ Ada nie rozróżnia wielkich i małych liter (lub, mówiąc ściślej, kompilator zmieni to na sposób z mojego pierwszego przykładu, ale oczywiście nie zmieni twojego kodu). A może:
Ten jest nieco niedorzeczny, wiem; ale ktoś byłby na tyle głupi, żeby tak to napisać (no może nie). Chodzi o to, że system rozróżniania wielkości liter nie tylko zmusi ludzi do zachowania spójności, ale również im pomoże (czytelność) i wykorzysta go na swoją korzyść (powyższy przykład akronimu).
źródło
length
iLength
zwykle jest złym pomysłem :)DEFine PROCedure Hello
na przykład. Wystarczyło wpisać tylko wielkie litery, ale pełne słowo pojawiło się na listach programów. Dotyczyło toREMark
również i nie było denerwujące ...Nie jest to mniej lub bardziej dziwne niż to, że na początek mamy duże i małe litery alfabetu. Jeśli
/usr/bin
zajrzysz do środka, zauważysz (bardzo) kilka plików wykonywalnych wykorzystujących wielkie litery.Przestrzeń nazw, w której rozróżniana jest wielkość liter, jest nie tylko dwa razy większa niż przestrzeń niewrażliwa - różnica rośnie wykładniczo wraz z długością słowa. Na przykład, używając 26 znaków, istnieje 26 ^ 3 (17576) różnych możliwości w trzech literach; użycie 52 (2 * 26) znaków to 52 ^ 3 = 140608. Otwarta przestrzeń nazw to dobra rzecz;)
źródło
Pojęcie „wielka / mała” litera może być (i jest) rzeczą specyficzną dla ustawień regionalnych, która, podobnie jak każda inna komplikacja projektowa, powinna być przesunięta tak blisko punktu użycia, jak to możliwe na stosie aplikacji, nie może być częścią rdzeń.
Posiadanie środowiska uwzględniającego wielkość liter pozwala na zawinięcie go w środowisko bez rozróżniania wielkości liter, ale nie na odwrót.
źródło
To nie jest terminal, to system plików. Lub w przypadku
cd
(cd jest wbudowaną powłoką) powłoki, która rozróżnia małe i wielkie litery.Mogło to być możliwe (przynajmniej z ASCII), aby rozróżnić wielkość liter. Jest to trudniejsze w przypadku obecnie używanego Unicode (to, czy dwa znaki są takie same, może zależeć od lokalnego).
Co z tym zrobić
shopt -s nocaseglob
# to jest w moim~/.bashrc
shopt -s nocasematch
# to też będzie~/.bashrc
set completion-ignore-case on
# to jest w moim~/.inputrc
źródło
Jako punkt wyjścia powodem, dla którego zadano to pytanie, i jeśli znajdziesz dużo dyskusji na ten temat w Google, jest to, że rozróżnianie wielkości liter utrudnia „normalnym” ludziom naukę i używanie języka programowania lub wiersza poleceń berło.
Wrażliwość na wielkość liter ma swoje źródło w niskiej mocy komputerów w przeszłości. Aby rozróżnić wielkość liter, potrzebna była jedna dodatkowa operacja analizy przed przekazaniem polecenia do interpretera lub kompilatora przed jego wykonaniem, a wcześni projektanci nie byli przygotowani do marnowania mocy komputera dla wygody rozróżniania wielkości liter.
Uważam, że w powyższych komentarzach jest wiele niepoprawnych stwierdzeń. Po pierwsze, psychologowie powiedzą ci, że ludzie nie rozróżniają automatycznie słowa zapisanego wielkimi lub małymi literami, a nawet kombinacji obu pod względem znaczenia tego słowa. Case jest używany w normalnych językach ekspresyjnych, aby przekazać dodatkowe znaczenie. Na przykład użycie dużej litery rozpoczynającej słowo w zdaniu oznacza, że jest to prawdopodobnie rzeczownik właściwy. Wielkie litery są również używane do nadania struktury prozy. Na przykład duża litera służy do wskazania początku zdania. Ale „Słowo” i „słowo” są postrzegane przez ludzki umysł jako mające to samo znaczenie.
Twórcy DOS, ADA i Pascal, żeby wymienić tylko kilka, docenili, że rozróżnianie wielkości liter stanowi dodatkowe obciążenie dla początkującego. Później redaktorzy tekstowi w „Zintegrowanych środowiskach programistycznych” (IDE), rozpoznając słowo rezerwowe, mogli przekształcić to słowo tak, aby i tak było zgodne ze stylem; oraz wyświetlaj go w innym kolorze, aby wyróżnić słowo. Argument, że rozróżnianie wielkości liter sprawia, że kod jest bardziej czytelny, jest błędny. Nie „normalnym” ludziom. Po prostu dodaje niepotrzebną i czasem mylącą warstwę do już wymagającego zadania.
Java jest skrajnym przykładem bardzo słabego języka z punktu widzenia łatwości użytkowania przez początkującego. Wymusza ścisłą rozróżnianie wielkości liter, ale głupio pozwoli programiście mieć dwie funkcje, obie o tej samej nazwie, ale które tak naprawdę są różnymi funkcjami, ponieważ jeden ma inny zestaw argumentów niż drugi. Rzeczywiście, Java jest tak dużą aborcją języka, że kiedy uniwersytety przestawiły się z nauczania składni Pascala na studentów, biorąc udział w kursach nieinformatycznych, wskaźnik zdawalności spadł z około 70% do 40%.
Podsumowując, rozróżnianie wielkości liter pojawiło się z dwóch powodów. Jednym z nich był brak mocy komputera. Po drugie, ludzie, którzy trafiają do informatyki, często znajdują się w spektrum autystycznym i nie odnoszą się dobrze do potrzeb „normalnych” ludzi. W związku z tym osoby te nie mogą docenić faktu, że rozróżnianie wielkości liter jest zarówno niepotrzebne, jak i utrudnia naukę i używanie języka programowania.
źródło
Rozróżnianie wielkości liter to głupi pomysł, który powstał, ponieważ autorzy uniksowi nie rozumieli, że ASCII jest zaprojektowany tak, aby łatwo rozróżniać wielkość liter. Jeden po prostu ignoruje wiodące bity. Ascii to 7-bitowe kodowanie z wielką literą A o wartości bitowej dziesiętnej 65 1000001 i bitowej dziesiętnej 97 1100001. z literami alfabetycznymi. To wygenerowało różnego rodzaju pomysły, takie jak wszystkie klucze w parach klucz-wartość powinny być numeryczne, aby uniknąć, że Pantofle różnią się od pantofli. Baza danych Pick Multi-Value zrealizowała to od samego początku i nie rozróżnia wielkości liter.
źródło