当我这样做时- CD ..
而不是cd ..
给我错误提示-
CD: command not found
为什么涉及linux命令时终端区分大小写?我的意思是您应该能够使用“全部大写”或“全部小写”字符执行命令。
我知道这是由于某种原因,但是我很好奇。
stty iuclc olcuc
,如果你觉得有一个区分大小写的终端;-)
当我这样做时- CD ..
而不是cd ..
给我错误提示-
CD: command not found
为什么涉及linux命令时终端区分大小写?我的意思是您应该能够使用“全部大写”或“全部小写”字符执行命令。
我知道这是由于某种原因,但是我很好奇。
stty iuclc olcuc
,如果你觉得有一个区分大小写的终端;-)
Answers:
最终,这是Unix的创建者在四十年前做出的任意选择。他们本可以选择使事情不区分大小写,就像十年后的MS-DOS的创建者所做的那样,但这也有其缺点。
它已经深深地嵌入到* ix文化中,现在无法更改。eppesuig提出的区分大小写的文件系统问题只是其中的一部分。macOS系统(基于Unix)通常具有不区分大小写(但不区分大小写)的文件系统,因此在此类系统上,外壳程序外部的命令实际上不区分大小写。但是,类似的内置函数cd
仍然区分大小写。
即使使用大小写不敏感的文件系统,物联网的历史也会违反您的意愿,侯赛因。如果ls
在Mac上键入内容,则会显示彩色目录列表。如果我改键入LS
,它/bin/ls
仍然可以运行,但是列表没有着色,因为添加该-C
标志的别名区分大小写。
最好只是习惯它。如果可以的话,学会喜欢它。
这不是“终端”问题,它是文件系统功能。Shell如何在(始终区分大小写)文件系统上查找命令?
bash
选项cdspell
:即使您输入了错误的名称,它也会尝试找到正确的文件名,但它仅适用于命令参数。
cd
,CD
,cD
和Cd
每一个独特的行为。
hash -p /bin/hostname HOSTNAME
,现在HOSTNAME
是的命令/bin/hostname
。
set completion-ignore-case on
。
我使用和尊重的技术系统几乎都是区分大小写的:操作系统,编程语言或其他。
我现在想到的例外是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
如您所见,过程和参数名称均为大写字母,数据类型也为大写字母,其他所有内容均为小写。另请注意,“所有大写”参数名称告诉我们它是首字母缩写词。现在,比较一下
procedure body p(scb : in out semaphore_control_block) is
这是可能的,因为Ada不区分大小写(或者,确切地说,编译器会将其更改为我的第一个示例中的方式,但当然不会更改您的代码)。或者,如何:
PROCedure body P(Scb : IN Out semaphore_CONTROL_BLOCK) iS
我知道那有点荒谬。但是有人会愚蠢到可以这样写(嗯,也许不是)。关键是,一个区分大小写的系统不仅会迫使人们保持一致,而且还将帮助他们(可读性)并利用它来发挥自己的优势(上述缩写示例)。
length
,并Length
通常是一个坏主意:)
DEFine PROCedure Hello
例如。您只需要键入大写的位,但是完整的单词就会出现在程序列表中。这也适用REMark
,也并不令人讨厌……
我们以大写和小写字母开头,这一事实丝毫不奇怪。如果您查看/usr/bin
,您会发现很少有可执行文件利用大写字母。
区分大小写的名称空间不仅是不区分大小写的名称空间的两倍-差异随着字长的增加而呈指数增长。例如,使用26个字符,三个字母有26 ^ 3(17576)种不同的可能性;使用52(2 * 26)个字符有52 ^ 3 = 140608。开放的名称空间是一件好事;)
它不是终端,而是文件系统。或者cd
(对于cd是内置的shell),则区分大小写。
可能(至少使用ASCII)不区分大小写。使用现在使用的unicode很难(两个字符是否相同,可能取决于本地字符)。
shopt -s nocaseglob
#这是我的 ~/.bashrc
shopt -s nocasematch
#这也将在 ~/.bashrc
set completion-ignore-case on
#这是我的 ~/.inputrc
首先,提出这个问题的原因以及如果您选择Google的主题,就会发现很多讨论的原因,是因为区分大小写使“普通”人更难学习和使用编程语言或命令行接口。
区分大小写起源于过去计算机的低功耗。为了使大小写不区分大小写,需要在执行命令之前将其进行另外的解析操作,然后再将其提供给解释器或编译器,并且早期设计者没有准备为了区分大小写而浪费计算机的功能。
我认为上述评论中存在许多错误的主张。首先,心理学家会告诉您,人们不会自动区分以大写或小写字母书写的单词,甚至不会根据单词的含义来区分两者。正常表达语言中使用case来传达其他含义。例如,使用大写字母在句子中的单词开头表示该单词很可能是专有名词。大写字母也用于提供散文结构。例如,大写字母用于指示句子的开头。但是,“单词”和“单词”在人类脑海中被认为是相同的意思。
DOS以及ADA和Pascal的创建者不胜枚举,他们认为区分大小写是初学者的另一个负担。后来,“集成开发环境”(IDE)中的文本编辑器识别出一个保留字,可以重铸该字,使其无论如何与样式保持一致。加上以其他颜色显示,以使单词脱颖而出。因此,区分大小写使代码更具可读性的说法是错误的。不是针对“正常”人。它只是在已经很苛刻的任务上增加了不必要的,有时是令人困惑的层。
从初学者易于使用的角度来看,Java是非常糟糕的语言的极端示例。它具有严格的大小写敏感性,但愚蠢的是,它允许程序员拥有两个具有相同名称的函数,但由于一个函数的参数集不同,实际上它们实际上是不同的函数。确实,Java是对语言的一种堕胎,当大学从讲授Pascal语法的学生转到学习非计算机科学课程的学生时,通过率从大约70%下降到40%。
因此,总而言之,区分大小写是出于两个原因。一是缺乏计算机功能。第二个原因是,进入计算机科学领域的人们经常处于自闭症谱系中,与“正常”人群的需求关系不大。结果,这些人不能意识到区分大小写既不必要,又不利于学习和使用编程语言。
区分大小写是一个愚蠢的主意,因为Unix编写者不了解ASCII旨在区分大小写。人们只是忽略了前导位。Ascii是7位编码,大写A的十进制值为65 1000001,十进制的97 1100001为字母,其后跟字母。这样就产生了各种各样的想法,例如键值对中的所有键都应该是数字的,以避免拖鞋不同于拖鞋。Pick Multi-Value数据库从一开始就意识到了这一点,并且不区分大小写。