端末で大文字と小文字が区別されるのはなぜですか?


12

私がそうするとき- それのCD ..代わりにcd ..
私に言ってエラーを与える-

CD: command not found

Linuxコマンドに関して、ターミナルの大文字と小文字が区別されるのはなぜですか?つまり、「すべて大文字」または「すべて小文字」のいずれかの文字を使用してコマンドを実行できるはずです。

私はそれが何らかの理由によるものであることを知っていますが、私はただ興味があります。


9
この質問のタイトルを変更する必要があるように感じます。なぜ大文字と小文字が区別されるのですか?
小次郎

15
「つまり、「すべて大文字」または「すべて小文字」でコマンドを実行できるはずです。」本当に?どうして?
dmckee ---元モデレーター子猫

5
発行stty iuclc olcucあなたは大文字小文字を区別しないターミナルを;-)たように感じる場合
ステファンChazelas

1
CapsLock + c + d + CapsLockがc + dより悪い
UniversallyUniqueID

回答:


43

最終的に、これは40年以上前にUnixの作成者によって行われたarbitrary意的な選択でした。MS-DOSの作成者が10年後に行ったように、大文字と小文字を区別しないことを選択することもできましたが、それにも欠点があります。

* ix文化に深く組み込まれているため、今は変更できません。eppesuigに育て大文字と小文字が区別ファイルシステムの問題は、それの一部でしかありません。macOSシステム(Unixベース)は通常、大文字と小文字を区別しない(ただし、大文字と小文字を区別しない)ファイルシステムを持っているため、このようなシステムでは、シェルの外部のコマンドは実際に大文字と小文字を区別しません。ただし、組み込みのようなcd大文字と小文字は区別されます。

大文字と小文字を区別しないファイルシステムであっても、物事の歴史はあなたの望みに反するものです、フセイン。私が入力した場合ls、私のMac上で、私はリスト色付けディレクトリを取得します。LS代わりに入力した場合/bin/lsでも実行されますが、-Cフラグを追加するエイリアスでは大文字と小文字が区別されるため、リストは色付けされません。

それに慣れるのがベストです。可能であれば、それを好きになることを学びます。


1
実際、Windowsファイル名では大文字と小文字が区別されます。たとえばPOSIXサブシステムにあり、msdn.microsoft.com
en

3
現時点で入手可能ないくつかの共通端子は大文字のみにあったし、彼らはあなたがそれになりたい場合は文字の前にバックスラッシュを置く(回避策を実装する必要がありましたので、それは実際には驚きだ、本当にあなたがログインしたときにすべて大文字でユーザー名を入力した場合は有効-大文字in)ラインディシプリンドライバー。
Random832

8

これは「端末」の問題ではなく、ファイルシステムの機能です。シェルは(常に大文字と小文字を区別する)ファイルシステムでコマンドをどのように検索する必要がありますか?


また、2つ以上のコマンドが一致した場合はどうなりますか?
scai

1
あなたを少し助けるかもしれない唯一のオプションはbashと呼ばれるオプションですcdspellです:それはあなたがそれを間違って傾けたとしても正しいファイル名を見つけようとしますが、それはコマンド引数に対してのみ機能しています
エップスィグ

1
@HussainTamboliという名前のコマンドがあるかもしれませんcdCDcDそしてCdユニークな振る舞いを持つ各。
scai

6
これは実際にはファイルシステム機能でもターミナル機能でもありません。シェル機能です。シェルの組み込みは、大文字と小文字を区別しないファイルシステムで大文字と小文字を区別します。また、ほとんどのシェルはコマンドをハッシュするため、コマンドは実際にはファイルではなく、ハッシュから実際に取得されます。試してみてhash -p /bin/hostname HOSTNAME、今HOSTNAMEのコマンドです/bin/hostname
小次郎

2
また、ほとんどのシェルで大文字と小文字を区別しないように指定できることにも言及する必要があります。bashの場合、バインドできますset completion-ignore-case on
小次郎

6

私が使用し尊重している技術システムは、ほとんど例外なく大文字と小文字が区別されます。OS、プログラミング言語、またはその他のものです。

私が今考えることができる例外は、HTMLタグとSQLのいくつかの実装、およびAdaプログラミング言語です。

そのような場合でも、実際にはHTMLタグを小文字で、SQLクエリのセマンティクスを大文字で(およびパラメーターを大文字で)記述する傾向が強いと思います。(私が間違っている場合は修正してください。)Adaに関しては、たとえば小文字のプロシージャ名を入力するとEmacsモードで修正されますが、コンパイル時には問題になりません。したがって、大文字と小文字を区別しない場合でも、それは悪い考えだと人々は同意するようです。

その理由は、大文字と小文字を区別することで表現力がはるかに高くなるからです。定量的だけでなく-CD 1である、しかしCDCdcD、およびcd4です-しかし、もっと重要なのは、あなたが大文字使用などの目的、重点を発現することができると賢明小文字。また、プログラミングの際に、読みやすさが向上します。

直感的に、あなたが読んhiでいないこととHI同じ方法であることは明らかです!

ただし、プログラミング言語Ada(1980年代)のコンピューター世界の例を挙げると、プロシージャコードブロックの最初の行は次のようになります。

procedure body P(SCB : in out Semaphore_Control_Block) is

ご覧のように、データ型と同様に、プロシージャ名とパラメータ名は大文字で、その他はすべて小文字です。また、「すべて大文字」のパラメーター名は、頭字語であることを示しています。さて、これと比較してください

procedure body p(scb : in out semaphore_control_block) is

Adaは大文字と小文字を区別しないため、これは可能です(正確には、コンパイラは最初の例のように変更しますが、もちろんコードは変更しません)。または、どのように:

PROCedure body P(Scb : IN Out semaphore_CONTROL_BLOCK) iS

それは少しばかげている、私は知っています。しかし、誰かがそれをそのように書くのに十分な愚かさを持っているでしょう(そうではないかもしれません)。ポイントは、大文字と小文字を区別するシステムは、人々に一貫性を持たせるだけでなく、それによって助けられ(読みやすさ)、それを有利に活用することです(上記の頭字語の例)。


2
PascalとDelphiも大文字と小文字を区別しません。また、例えば2つの変数を持つlengthとしてLength:)通常は悪い考えです
Ajasja

@Ajasja:AdaはPascalによく似ているので、それは興味深いです。さて、すべてを数えると、プログラミング言語が非常に多いため、そのような言語がたくさんあると思います。長さに関しては、もちろん-しかし、あなたはおそらくそのような場合を考えることができます:Max(人)とmax(実数のリストを取り、最大値を返す関数)はどうでしょうか?
エマニュエルベルク

最後の例については、QLのSuperBasicインタープリターがキーワードを正確にそのように大文字にしたことを知りたい場合がありますDEFine PROCedure Hello。大文字のビットを入力するだけで済みましたが、完全な単語がプログラムリストに表示されました。これは、に適用されるREMarkも、と...迷惑なことではなかった
ダビデは考えると

4

大文字と小文字のアルファベットが最初にあるという事実とほぼ同じです。覗くと/usr/bin、大文字を悪用する(ごく少数の)実行可能ファイルがあります。

大文字と小文字を区別する名前空間は、区別しない名前空間の2倍の大きさではありません。違いは語長とともに指数関数的に増加します。たとえば、26文字を使用すると、3文字に26 ^ 3(17576)の異なる可能性があります。52(2 * 26)文字を使用すると、52 ^ 3 = 140608になります。オープンな名前空間は良いことです;)


3はどこから入手しましたか?
ctrl-alt-delor

@ ctrl-alt-delorこれは単なる例です。「3文字には26 ^ 3(17576)異なる可能性があります」。
goldilocks

2

「上/下」ケースの概念はロケール固有のものである可能性があり(実際)、他の設計の複雑さはアプリケーションスタック内の可能な限り使用ポイントの近くにプッシュする必要があり、芯。

大文字と小文字を区別する環境を持つことで、大文字と小文字を区別しない環境にラップすることができますが、他の方法では回避できません。


1

それは端末ではなく、ファイルシステムです。またはcd、シェルの場合(cdは組み込みのシェルです)、大文字と小文字が区別されます。

(少なくともASCIIでは)大文字と小文字を区別しないようにすることが可能でした。これは、現在使用されているユニコードでは困難です(2つの文字が同じかどうか、ローカルに依存する場合があります)。

それについてどうするか

  • それと一緒に暮らす。
  • これらのシェルオプションを試してください。大文字と小文字を区別しないという問題をすべて導入することなく、妥協し、物事を容易にします。
    • shopt -s nocaseglob #これは私の中にあります ~/.bashrc
    • shopt -s nocasematch #これも ~/.bashrc
    • set completion-ignore-case on #これは私の中にあります ~/.inputrc

-2

出発点として、この質問が尋ねられた理由、そしてあなたが主題をグーグルにすればあなたがそれについて多くの議論を見つける理由は、大文字と小文字の区別が「普通の」人々がプログラミング言語またはコマンドラインを学び、使用するのを難しくすることであるインターフェース。

大文字と小文字の区別は、過去のコンピューターの低電力に起因しています。大文字と小文字を区別しないようにするには、コマンドがインタープリターまたはコンパイラーに実行される前に、構文解析操作を1つ追加する必要がありました。

上記のコメントには多くの誤った主張があると思います。第一に、心理学者は、人間が大文字または小文字で書かれた単語、または単語の意味に関してこの2つの組み合わせを自動的に区別しないことを教えてくれます。ケースは、追加の意味を伝えるために通常の表現言語で使用されます。たとえば、文中の単語を開始する大文字の使用は、おそらく正しい名詞であることを示しています。大文字は、散文構造を示すためにも使用されます。たとえば、大文字は文の始まりを示すために使用されます。しかし、「言葉」と「言葉」は、人間の心によって同じ意味であると見なされます。

DOSとADAおよびPascalの作成者は、いくつか例を挙げると、大文字と小文字の区別が初心者にとって追加の負担であることを高く評価していました。後に、 "Integrated Development Environments"(IDE)のテキストエディターは、予約語を認識して、とにかくスタイルと一致するようにその語を再キャストできました。さらに、単語を目立たせるために別の色で表示します。したがって、大文字と小文字を区別することでコードが読みやすくなるという議論は誤りです。それは「普通の」人々にはありません。既に要求の厳しいタスクに、不必要で時々混乱する層を追加するだけです。

Javaは、初心者による使いやすさの観点から、非常に貧弱な言語の極端な例です。厳密な大文字と小文字の区別を強制しますが、愚かなことに、プログラマは同じ名前の2つの関数を持つことができますが、実際には、一方が他方に対して異なる引数のセットを持っているために異なる関数です。確かに、Javaは言語の中断であり、大学がPascal構文を学生から非コンピューターサイエンスコースに移行したとき、合格率は約70%から40%に低下しました。

したがって、要約すると、大文字と小文字の区別は2つの理由で生じました。1つはコンピューターの能力不足でした。2つ目は、コンピューターサイエンスへの道を見つける人々は、しばしば自閉症の範囲にあり、「普通の」人々のニーズとはあまり関係がないということです。結果として、これらの人々は、大文字と小文字の区別が不要であり、プログラミング言語の学習と使用の障害であることを理解できません。


私はJavaのセクションを削除します、それは私見、意見ベースであり、ポイント(メソッドのオーバーロードは大文字と小文字の区別とはほとんど関係ありません)...メソッド/関数のオーバーロードはC ++などの他の言語でも見られるためですpl / sqlの名前は2つですが。あなたの心理学のパラグラフに関しては、情報源はいいと思います...最後に、最後のパラグラフは私見であり、意見に基づいており、攻撃的であり、削除すべきです。
-thecarpy

CおよびCから生成されたすべての言語がコンピューターサイエンスの原因に損害を与えた理由をよりよく理解するために、以下にアクセスしてください。linkedin.com/pulse/… この問題の核心、つまりカーネル:-)は、プログラマーは知識を広めることではなく、仕事を終わらせることを気にする性格のタイプであるということです。この投稿で言われたことに同意できない場合は、あなたの主張を実証するための議論を提出してください。意見はほとんど役に立たない。
ケビンラフレイ

大文字と小文字を区別すると学習が難しくなることに同意します。しかし、Unixのほとんどすべてが小文字であることに注意してください。主な例外は、環境変数が従来はすべて大文字であるということです。
ctrl-alt-delor

ケースは一貫して使用する必要があり、この回答で述べたように、環境変数と通常のシェル変数などの追加情報を伝えます。
ctrl-alt-delor

-2

大文字と小文字の区別は、ASCIIが大文字と小文字を区別しないように設計されていることをUnixのライターが理解していなかったために生まれた馬鹿げたアイデアです。先行ビットを単に無視します。Asciiは、ビット値10進数65 1000001の大文字Aとビット10進数97 1100001の大文字Aで、アルファベット順に続く7ビットのコーディングです。これにより、スリッパとスリッパが異なることを避けるために、キーと値のペアのすべてのキーが数値でなければならないなど、あらゆる種類のアイデアが生成されました。最初からこれを実現したMulti-Valueデータベースを選択し、大文字と小文字を区別しません。


2
「愚かな」はあなたの意見です。私が見ることができるこの答えには事実はほとんどありません。ああ、なぜASCIIに制限するのか。EBCDICもありました。
ロアイマ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.