Mengapa terminal case-sensitive?


12

Ketika saya melakukannya - CD ..bukannya cd ..
itu memberi saya kesalahan mengatakan -

CD: command not found

Mengapa terminal case sensitif ketika datang ke perintah linux? Maksud saya Anda harus dapat menjalankan perintah baik dengan karakter "semua huruf besar" atau "semua huruf kecil".

Saya tahu itu karena beberapa alasan, tetapi saya hanya ingin tahu.


9
Saya hampir merasa pertanyaan ini harus ditulis ulang Mengapa hal-hal sensitif?
kojiro

15
"Maksudku, kamu harus bisa mengeksekusi perintah baik dengan karakter" semua huruf besar "atau" semua huruf kecil "." Betulkah? Mengapa?
dmckee --- ex-moderator kitten

5
Terbitkan a stty iuclc olcucjika Anda merasa memiliki terminal case yang tidak sensitif ;-)
Stéphane Chazelas

1
CapsLock + c + d + CapsLock lebih buruk daripada c + d
UniversallyUniqueID

Jawaban:


43

Pada akhirnya, itu adalah pilihan sewenang-wenang yang dibuat oleh pencipta Unix lebih dari empat dekade lalu sekarang. Mereka bisa memilih untuk membuat hal-hal yang tidak sensitif seperti yang dilakukan oleh pencipta MS-DOS satu dekade kemudian, tetapi itu juga memiliki kekurangannya.

Terlalu tertanam dalam budaya * ix untuk diubah sekarang. Masalah filesystem case sensitif yang dibawa oleh eppesuig hanya sebagian saja. sistem macOS - yang berbasis Unix - biasanya memiliki sistem file case-insensitive (tetapi case-preserving), jadi pada sistem seperti itu perintah-perintah eksternal ke shell pada kenyataannya diperlakukan case-insensitive. Tapi, builtin seperticd tetap case-sensitive.

Bahkan dengan sistem file case-insensitive, sejarah hal bersekongkol melawan keinginan Anda, Hussain. Jika saya mengetik lsdi Mac saya, saya mendapatkan daftar direktori berwarna. Jika saya mengetik LS, /bin/lstetap berjalan, tetapi cantuman tidak berwarna karena alias yang menambahkan -Cbendera peka huruf besar-kecil.

Yang terbaik, biasakan saja. Jika Anda bisa, belajarlah untuk menyukainya.


1
Sebenarnya nama file Windows bisa case-sensitive. Mereka berada dalam subsistem POSIX misalnya dan lihat msdn.microsoft.com/en-us/library/ee681827%28v=vs.85%29.aspx
fpmurphy

3
Ini sebenarnya mengejutkan karena beberapa terminal umum yang tersedia pada saat itu hanya dalam huruf besar dan mereka harus menerapkan solusi (meletakkan backslash sebelum surat jika Anda ingin benar - benar huruf besar - diaktifkan jika Anda mengetikkan nama pengguna Anda dalam huruf besar semua ketika Anda login di) dalam driver disiplin garis.
Random832

8

Ini bukan masalah "terminal", ini adalah fitur sistem file. Bagaimana seharusnya shell mencari perintah Anda pada sistem file (selalu case sensitive)?


Dan bagaimana jika dua atau lebih perintah cocok?
scai

1
Satu-satunya opsi yang dapat membantu Anda sedikit adalah bashopsi yang disebut cdspell: itu mencoba untuk menemukan nama file yang benar bahkan jika Anda salah mengetik, tetapi itu hanya berfungsi untuk argumen perintah .
eppesuig

1
@HussainTamboli Ada mungkin perintah bernama cd, CD, cDdan Cdmasing-masing dengan perilaku unik.
scai

6
Ini sebenarnya bukan fitur sistem file atau fitur terminal - ini fitur shell. Shell builtins akan peka terhadap huruf besar-kecil pada sistem file case sensitif. Juga, sebagian besar perintah hash shell, jadi perintah tidak pernah benar - benar file, mereka sebenarnya diambil dari hash. Coba hash -p /bin/hostname HOSTNAMEdan sekarang HOSTNAMEadalah perintah untuk /bin/hostname.
kojiro

2
Oh, saya juga harus menyebutkan Anda dapat memberitahu sebagian besar shell tidak terlalu peka. Untuk bash, Anda dapat mengikat set completion-ignore-case on.
kojiro

6

Sistem teknis yang saya gunakan dan hormati hampir secara eksklusif case-sensitive: baik itu OS atau bahasa pemrograman atau apa pun.

Pengecualian yang dapat saya pikirkan saat ini adalah tag HTML dan beberapa implementasi SQL, dan bahasa pemrograman Ada.

Bahkan dalam kasus-kasus itu, saya pikir ada kecenderungan kuat untuk benar-benar menulis tag HTML dalam huruf kecil, dan semantik query SQL dalam huruf besar (dan parameter dikapitalisasi). (Koreksi saya jika saya salah.) Sedangkan untuk Ada, mode Emacs akan memperbaiki Anda jika Anda misalnya mengetik nama prosedur huruf kecil, meskipun itu tidak masalah saat dikompilasi. Jadi, bahkan ketika ada ketidakpekaan kasus, tampaknya orang setuju itu adalah ide yang buruk.

Alasannya adalah Anda mendapatkan kekuatan yang lebih ekspresif dengan kepekaan terhadap huruf besar-kecil. Tidak hanya secara kuantitatif - CDadalah satu, tapi CD, Cd, cD, dan cdempat - tetapi yang lebih penting, Anda dapat mengekspresikan tujuan, penekanan, dll menggunakan huruf besar dan huruf kecil bijaksana; juga, saat pemrograman, Anda akan meningkatkan keterbacaan.

Secara intuitif, jelas bahwa Anda tidak membaca hidan HIdengan cara yang sama!

Tapi, untuk memberi Anda contoh dunia komputer, dalam bahasa pemrograman Ada (dari tahun 1980-an), baris pertama dari blok kode prosedur bisa terlihat seperti ini:

procedure body P(SCB : in out Semaphore_Control_Block) is

seperti yang Anda lihat, nama prosedur dan parameter ditulis dengan huruf besar, seperti halnya tipe data, yang lainnya huruf kecil. Perhatikan juga bahwa nama parameter "semua huruf besar" memberi tahu kita bahwa itu adalah akronim. Sekarang, bandingkan ini

procedure body p(scb : in out semaphore_control_block) is

Ini dimungkinkan, karena Ada peka terhadap huruf besar-kecil (atau, tepatnya, kompiler akan mengubahnya seperti pada contoh pertama saya, tetapi tentu saja tidak akan mengubah kode Anda). Atau, bagaimana dengan:

PROCedure body P(Scb : IN Out semaphore_CONTROL_BLOCK) iS

Itu agak konyol, saya tahu; tetapi seseorang akan cukup bodoh untuk menulis seperti itu (yah, mungkin tidak). Intinya, sistem case sensitive tidak hanya akan memaksa orang untuk konsisten, mereka juga akan terbantu oleh hal itu (keterbacaan) dan menggunakannya untuk keuntungan mereka (contoh akronim di atas).


2
Pascal dan Delphi juga tidak sensitif huruf. Juga, misalnya memiliki dua variabel lengthdan Lengthbiasanya ide yang buruk :)
Ajasja

@ Ajasja: Itu menarik, karena Ada sangat mirip Pascal. Yah, saya kira jika Anda menghitung semuanya, akan ada banyak bahasa seperti itu, karena ada begitu banyak bahasa pemrograman. Adapun panjang, tentu saja - tetapi Anda mungkin bisa memikirkan beberapa kasus seperti itu: bagaimana dengan Max (seseorang), dan maks (fungsi yang mengambil daftar real, dan mengembalikan yang terbesar)?
Emanuel Berg

Mengenai contoh terakhir Anda, Anda mungkin tertarik untuk mengetahui bahwa juru bahasa QL SuperBasic menggunakan kata kunci dengan cara yang persis sama:, DEFine PROCedure Hellomisalnya. Anda hanya perlu mengetikkan bit kapital, tetapi kata lengkapnya muncul di daftar program. Ini berlaku REMarkjuga, dan tidak terlalu mengganggu ...
David Given

4

Ini tidak lebih atau kurang aneh daripada fakta bahwa kita memiliki alfabet huruf besar dan kecil untuk memulai. Jika Anda melihat /usr/bin, Anda akan melihat (sangat) beberapa executable mengeksploitasi kapitalisasi.

Sebuah namespace sensitif huruf tidak hanya dua kali lebih besar dari yang tidak sensitif - perbedaannya tumbuh secara eksponensial dengan panjang kata. Misalnya, menggunakan 26 karakter, ada 26 ^ 3 (17576) kemungkinan berbeda dalam tiga huruf; menggunakan 52 (2 * 26) karakter ada 52 ^ 3 = 140608. Namespace terbuka adalah hal yang baik;)


Dari mana Anda mendapatkan 3 dari?
ctrl-alt-delor

@ ctrl-alt-delor Ini hanya sebuah contoh: "ada 26 ^ 3 (17576) kemungkinan berbeda dalam tiga huruf ".
goldilocks

2

Konsep kasus "atas / bawah" dapat (dan memang) merupakan hal spesifik lokal, yang, karena setiap komplikasi desain lainnya harus didorong sedekat mungkin dengan titik penggunaan dalam tumpukan aplikasi, bukan menjadi bagian dari inti.

Memiliki lingkungan case sensitif memungkinkan untuk membungkusnya ke dalam lingkungan case sensitif, tetapi tidak sebaliknya.


1

Ini bukan terminal, ini adalah sistem file. Atau dalam kasus cd(cd adalah shell built in) shell, yang case sensitif.

Itu bisa saja dimungkinkan (setidaknya dengan ASCII), untuk membuat case-sensitive. Ini lebih sulit dengan unicode yang sekarang digunakan (apakah dua karakter sama, mungkin tergantung pada lokal).

Apa yang harus dilakukan tentang hal itu

  • Jalani saja.
  • Coba opsi shell ini. Mereka memberikan kompromi, dan membuat segalanya lebih mudah, tanpa memperkenalkan semua masalah ketidakpekaan kasus.
    • shopt -s nocaseglob #Ini ada di saya ~/.bashrc
    • shopt -s nocasematch #Ini juga akan masuk ~/.bashrc
    • set completion-ignore-case on #Ini ada di saya ~/.inputrc

-2

Sebagai titik awal, alasan pertanyaan ini diajukan, dan alasan Anda akan menemukan banyak diskusi tentang hal itu jika Anda Google subjeknya, adalah bahwa sensitivitas huruf membuat lebih sulit bagi orang "normal" untuk belajar dan menggunakan bahasa pemrograman atau baris perintah antarmuka.

Sensitivitas kasus berawal pada rendahnya daya komputer di masa lalu. Untuk membuat case case insensitive diperlukan satu operasi parsing tambahan sebelum perintah diumpankan ke interpreter atau ke compiler sebelum eksekusi dan designer awal tidak siap untuk menyia-nyiakan daya komputer untuk kenyamanan sensitivitas case.

Saya percaya ada sejumlah pernyataan yang salah dalam komentar yang dibuat di atas. Pertama, psikolog akan memberi tahu Anda bahwa manusia tidak secara otomatis membedakan antara kata yang ditulis dengan huruf besar atau kecil atau bahkan kombinasi keduanya dalam arti kata tersebut. Kasus digunakan dalam bahasa ekspresif normal untuk menyampaikan makna tambahan. Misalnya, penggunaan huruf kapital yang memulai kata dalam kalimat, menunjukkan kemungkinan besar kata benda yang tepat. Huruf kapital juga digunakan untuk memberikan struktur prosa. Misalnya, huruf kapital, digunakan untuk menunjukkan awal kalimat. Tetapi "Kata" dan "kata" dipandang oleh pikiran manusia sebagai makna yang sama.

Pencipta DOS dan ADA dan Pascal, untuk beberapa nama, menghargai bahwa sensitivitas case adalah beban tambahan pada pemula. Kemudian, editor teks dalam "Lingkungan Pengembangan Terpadu" (IDE), yang mengenali kata cadangan, dapat menyusun kembali kata itu sedemikian rupa sehingga konsisten dengan gaya; ditambah menampilkannya dalam warna yang berbeda untuk membuat kata menonjol. Jadi argumen yang membuat sensitivitas case untuk kode lebih mudah dibaca adalah keliru. Itu tidak untuk orang "normal". Ini hanya menambah lapisan yang tidak perlu dan kadang membingungkan untuk tugas yang sudah menuntut.

Java adalah contoh ekstrim dari bahasa yang sangat buruk dari sudut pandang kemudahan penggunaan oleh pemula. Ini menegakkan sensitivitas case ketat tetapi, bodohnya, akan memungkinkan programmer untuk memiliki dua fungsi, keduanya dengan nama yang sama, tetapi yang sebenarnya fungsi yang berbeda berdasarkan fakta satu memiliki serangkaian argumen yang berbeda dengan yang lain. Memang, Jawa adalah aborsi bahasa sehingga ketika universitas beralih dari pengajaran sintaksis Pascal ke siswa, yang mengambil kursus sains non-komputer, tingkat kelulusannya turun dari sekitar 70% menjadi 40%.

Jadi, secara ringkas, sensitivitas kasus muncul karena dua alasan. Salah satunya adalah kurangnya daya komputer. Yang kedua adalah bahwa orang-orang yang menemukan jalan mereka ke dalam ilmu komputer sering berada pada spektrum autistik dan tidak berhubungan baik dengan kebutuhan orang-orang "normal". Sebagai akibatnya, orang-orang ini tidak dapat menghargai bahwa sensitivitas kasus tidak diperlukan dan juga merupakan hambatan untuk belajar dan menggunakan bahasa pemrograman.


Saya akan menghapus bagian di Jawa karena itu, imho, berbasis opini dan selain itu (metode overloading tidak ada hubungannya dengan sensitivitas case) ... ... metode / fungsi overloading ditemukan dalam bahasa lain juga, seperti C ++ dan pl / sql untuk nama tetapi dua. Adapun paragraf psikologi Anda, saya pikir sumber akan bagus ... Akhirnya, paragraf terakhir adalah, imho, juga berbasis opini dan ofensif dan harus dihapus.
thecarpy

Untuk memberi Anda pemahaman yang lebih baik tentang mengapa C dan semua bahasa yang telah dihasilkan darinya telah merusak penyebab ilmu komputer, silakan kunjungi; linkedin.com/pulse/... Inti dari masalah ini, atau harus saya katakan kernel :-), adalah bahwa programmer adalah tipe kepribadian yang tidak peduli tentang penyebaran pengetahuan tetapi tentang menyelesaikan pekerjaan. Jika Anda tidak setuju dengan apa yang telah dikatakan dalam posting ini maka silakan ajukan argumen untuk membuktikan posisi Anda. Pendapat dihitung sedikit.
Kevin Loughrey

Saya setuju bahwa sensitivitas huruf membuat belajar lebih sulit. Tetapi perhatikan bahwa hampir semua yang ada di Unix adalah huruf kecil, jadi tetap seperti itu. Pengecualian utama adalah variabel lingkungan adalah semua ibukota secara konvensional.
ctrl-alt-delor

Kasing harus digunakan secara konsisten , dan seperti yang dikatakan dalam jawaban ini untuk menyampaikan informasi tambahan misalnya variabel lingkungan vs variabel shell normal.
ctrl-alt-delor

-2

Sensitivitas kasus adalah ide konyol yang muncul karena penulis Unix tidak mengerti bahwa ASCII dirancang untuk mudah peka terhadap huruf besar-kecil. Satu hanya mengabaikan bit terkemuka. Ascii adalah pengkodean 7 bit dengan modal A pada nilai bit desimal 65 1000001 dan pada bit desimal 97 1100001. dengan huruf-huruf berikut secara alfabet. Ini menghasilkan segala macam ide seperti semua kunci dalam pasangan nilai kunci harus numerik untuk menghindari Sandal yang berbeda dengan sandal. Pilih database Multi-Nilai yang menyadari hal ini sejak awal dan tidak peka huruf besar-kecil.


2
"Konyol" adalah pendapat Anda. Ada sangat sedikit faktual dalam jawaban ini yang bisa saya lihat. Oh, dan mengapa membatasi diri Anda pada ASCII. Ada EBCDIC juga.
roaima
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.