git
、hg
和等命令apt-get
都有子命令(有更好的名称吗?),并且它们都区分大小写:
hg log # not hg Log
git status # not git Status
sudo apt-get install nano # not sudo apt-get Install nano
显然Unix中很多东西都需要区分大小写,因为Unix 就是这样。
但在这种情况下,不存在潜在的歧义。这些参数只能是命令名称,不能是其他任何东西(可以吗?)。git
的错误消息表明情况是这样的:
> git Status
git: 'Status' is not a git command. See 'git --help'.
Did you mean this?
status
除了给初学者增加一点挫败感和符合 Unix 文化之外,还有什么理由区分大小写吗?
答案1
有什么理由区分大小写吗?
它留下了一个更大的名称空间可用的。例如,更高版本的 git 可以实现命令名称的大写变体,或者允许用户定义宏/别名,就像 shell 一样,您可以在其中定义自己的MV
,CP
等,而不必重新定义mv
,cp
等。
答案2
区分大小写是 POSIX 处理命令和参数的方式的一部分,与含义无关。
Status 和 status 不一样是一件非常好的事情,因为系统中的基础文件系统是区分大小写的(因为 POSIX 规则)。在整个系统中保持相同的行为通常是一个很好的做法。
例如,如果您的第二个参数可以是文件名或关键字,您是否认为该关键字区分大小写是可以接受的?如果命令有时接受区分大小写的参数,有时不接受,那就太混乱了。
在我看来,关于按键敏感性的最后一个重要的事情是,如果ls -L
您自己定义了类型,并且确实想用大写字母来输入它L
,那么系统永远不应该尝试猜测并始终执行您输入的内容。
答案3
从另一个角度来看。计算机不了解语言或字母,它看到的是数字,然后映射为字符。而我(这封信I
)和| (管道)可能看起来与您非常相似,但它们与计算机完全不同。
为了说明这一点,请看下表。您将看到大写字母的代码与相应的小写字母的代码之间没有对应关系。它们不是连续的,它们由完全不同的代码表示(表来源):
换句话说,虽然a
和A
对您来说似乎是同一件事,但对计算机来说却并非如此。