为什么终端区分大小写?

Hus*_*oli 14 shell user-interface

当我这样做 -CD ..而不是cd ..
它给我错误说 -

CD: command not found
Run Code Online (Sandbox Code Playgroud)

为什么在涉及 linux 命令时终端区分大小写?我的意思是您应该能够使用“全部大写”或“全部小写”字符执行命令。

我知道这是由于某种原因,但我只是好奇。

War*_*ung 43

最终,这是 Unix 的创造者在 40 多年前做出的任意选择。他们本可以像十年后 MS-DOS 的创建者那样选择不区分大小写,但这也有其缺点。

它深深植根于 *ix 文化中,现在无法改变。eppesuig 提出区分大小写的文件系统问题只是其中的一部分。基于 Unix 的macOS 系统通常具有不区分大小写(但保留大小写)的文件系统,因此在 shell 外部的此类系统命令实际上是不区分大小写的。但是,cd这样的内置函数仍然区分大小写。

即使使用不区分大小写的文件系统,事物的历史也会违背你的意愿,侯赛因。如果我ls在 Mac 上打字,我会得到一个彩色的目录列表。如果我LS改为键入,/bin/ls仍会运行,但列表不会着色,因为添加-C标志的别名区分大小写。

最好习惯了。如果可以,请学会喜欢它。

  • 这实际上令人惊讶,因为当时可用的一些常见终端仅使用大写字母,并且他们必须实施一种解决方法(如果您希望它是大写字母,请在字母前加一个反斜杠 - 如果您在登录时输入的用户名全部大写,则启用in) 行纪律驱动程序。 (4认同)

小智 9

这不是“终端”问题,而是文件系统功能。shell 应该如何在(总是区分大小写的)文件系统上查找您的命令?

  • 它不是真正的文件系统功能或终端功能——它是一个外壳功能。在不区分大小写的文件系统上,Shell 内置函数将区分大小写。此外,大多数 shell 散列命令,因此命令永远不会*真正* 文件,它们实际上是从散列中提取的。尝试`hash -p /bin/hostname HOSTNAME`,现在`HOSTNAME` 是`/bin/hostname` 的命令。 (8认同)
  • 哦,我还应该提到您可以告诉大多数 shell 不区分大小写。对于 bash,您可以绑定 `set completion-ignore-case on`。 (2认同)

Ema*_*erg 6

我使用和尊重的技术系统几乎完全区分大小写:无论是操作系统还是编程语言或其他任何东西。

我现在能想到的例外是 HTML 标签和 SQL 的一些实现,以及 Ada 编程语言。

即使在这些情况下,我认为实际编写小写 HTML 标记和大写 SQL 查询语义(并且参数大写)的强烈倾向。(如果我错了,请纠正我。)对于 Ada,例如,如果您键入小写的过程名称,Emacs 模式将纠正您,尽管这在编译时无关紧要。因此,即使不区分大小写,人们似乎也同意这是一个坏主意。

原因是您可以通过区分大小写获得更多的表达能力。不仅在数量上 -CD是一,而且CD, Cd, cD, 和cd是四 - 但更重要的是,您可以明智地使用大写和小写来表达目的,重点等;此外,在编程时,您将增强可读性。

直观地说,很显然,你不读hi,并HI以同样的方式!

但是,举一个计算机世界的例子,在编程语言 Ada(来自 1980 年代)中,过程代码块的第一行可能如下所示:

procedure body P(SCB : in out Semaphore_Control_Block) is
Run Code Online (Sandbox Code Playgroud)

如您所见,过程和参数名称都大写,数据类型也是如此,其他所有内容都是小写的。另请注意,“全部大写”参数名称告诉我们它是首字母缩写词。现在,将其与

procedure body p(scb : in out semaphore_control_block) is
Run Code Online (Sandbox Code Playgroud)

这是可能的,因为 Ada 不区分大小写(或者,确切地说,编译器会将其更改为我第一个示例中的方式,但当然不会更改您的代码)。或者,怎么样:

PROCedure body P(Scb : IN Out semaphore_CONTROL_BLOCK) iS
Run Code Online (Sandbox Code Playgroud)

我知道这有点荒谬;但是有人会愚蠢到这样写(好吧,也许不是)。重点是,区分大小写的系统不仅会迫使人们保持一致,他们还会从中受益(可读性)并将其用于自己的优势(上面的首字母缩略词示例)。

  • Pascal 和 Delphi 也不区分大小写。此外,例如有两个变量 `length` 和 `Length` 通常是一个坏主意:) (2认同)