带连字符或不带连字符的命令选项

带连字符或不带连字符的命令选项

为什么有些命令(在 Linux 用户中)运行时带有连字符,而另一些命令则不然?

例如,ls -lrm -r对比ps axtar xvf

我看是有历史原因的,但是意思是一样的,为什么不统一呢?

答案1

为此,您需要追溯到 *nix 的历史,当时您有多种风格的 unice。ps尤其是毛茸茸的,因为如果您使用-(POSIX/Unix 风格)或不使用(BSD),它有完全不同的选项。Unix 战争是一个有用的维基百科页面,可以开始阅读它。

编辑:Unix 的历史您可能也会感兴趣。

答案2

不带破折号的命令行选项(如 eg 所示tarddps旧式命令行标志,由于太多应用程序依赖于它们,因此无法删除。

OpenBSD 手册tar将旧式选项称为“遗留”选项,但我很确定我见过名称“打包选项”或“装箱选项”(或类似的东西)来描述这种旧语法。

dd继承了它的非破折号选项作业控制语言 (JCL)在 IBM 大型机上。

其中一些实用程序还接受虚线选项,并且POSIX 规范ps根本没有提到旧式选项。 规格dd列出“操作数”而不是“选项”,并且tar根本没有被 POSIX 标准化(标准归档器pax)。

另请注意,较新的实用程序还使用非破折号选项(或更确切地说,操作数)来确定要采取的操作。您将在例如等中找到这些内容git commit -plxc exec

这其实和 的“动作”颇为相似tar。从原始tar手册在 Unix 版本 7 中:

tar 在磁带上保存和恢复文件。它的动作是由 key 参数控制的。是 key 一串最多包含一个的字符功能字母以及可能有一个或多个功能修饰符

psUnix Release 3 中的原始实现虚线选项(请注意,此处的手册部分是 8 而不是 1,即管理实用程序部分)。在下一个版本中,它失去了他们


注意:我在全文中混合了“选项”和“操作数”的术语。从技术上讲,“选项”是一个破折号的单个字母或字符,例如-a,而“操作数”是非选项。不过,两者都是命令行参数。

相关内容