像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
Run Code Online (Sandbox Code Playgroud)
显然,Unix 中的很多东西都需要区分大小写,因为Unix 就是这样。
但在这种情况下,没有潜在的歧义。这些参数只能是命令名称,不能是其他任何东西(可以吗?)。git
的错误消息表明是这种情况:
> git Status
git: 'Status' is not a git command. See 'git --help'.
Did you mean this?
status
Run Code Online (Sandbox Code Playgroud)
除了给初学者增加一点挫败感和符合 Unix 文化之外,还有什么理由区分大小写吗?
区分大小写是 POSIX 处理命令和参数的方式的一部分,它与含义无关。
Status 和 status 不同是一件非常好的事情,因为系统中的哪种基础的文件系统区分大小写(因为 POSIX 规则)。在整个系统中保持相同的行为通常是一种很好的做法。
例如,如果您的第二个参数可以是文件名或关键字,您是否可以认为该关键字是否可以接受区分大小写?如果命令有时接受区分大小写的参数,有时不接受,那将是一团糟。
在我看来,关于关键敏感性的最后一件重要的事情是,如果ls -L
您可能自己定义了它并且真的想用大写字母输入它,L
那么系统永远不应该尝试猜测并始终执行您输入的内容。