Unix 子命令名称应该区分大小写吗?

jtp*_*yda 3 user-interface

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 文化之外,还有什么理由区分大小写吗?

Kiw*_*iwy 8

区分大小写是 POSIX 处理命令和参数的方式的一部分,它与含义无关。

Status 和 status 不同是一件非常好的事情,因为系统中的哪种基础的文件系统区分大小写(因为 POSIX 规则)。在整个系统中保持相同的行为通常是一种很好的做法。

例如,如果您的第二个参数可以是文件名或关键字,您是否可以认为该关键字是否可以接受区分大小写?如果命令有时接受区分大小写的参数,有时不接受,那将是一团糟。

在我看来,关于关键敏感性的最后一件重要的事情是,如果ls -L您可能自己定义了它并且真的想用大写字母输入它,L那么系统永远不应该尝试猜测并始终执行您输入的内容。


gol*_*cks 8

有什么理由区分大小写吗?

它留下了一个更大的命名空间。例如,混帐的更高版本,可以实现大写变化上的命令名称,或者允许用户自己定义宏/别名,如外壳,在那里你可以定义自己的MVCP等不必重新定义mvcp等等。


ter*_*don 5

从另一个角度来看。计算机不知道语言或字母,它看到的是数字,然后映射到字符。而我(字母I)和| (管道)可能看起来与您非常相似,它们与计算机完全不同。

为了说明,请看下表。您将看到大写字母的代码和相应的小写字母之间没有对应关系。它们不连续,它们由完全不同的代码表示(表来源):

                                     在此处输入图片说明

换句话说,虽然aA对您来说似乎是一回事,但对计算机而言却并非如此。