为什么有些命令(在 Linux 用户中)运行时带有连字符,而另一些命令则不然?
例如,ls -l
或rm -r
对比ps ax
或tar xvf
?
我看是有历史原因的,但是意思是一样的,为什么不统一呢?
答案1
答案2
不带破折号的命令行选项(如 eg 所示tar
)dd
是ps
旧式命令行标志,由于太多应用程序依赖于它们,因此无法删除。
OpenBSD 手册tar
将旧式选项称为“遗留”选项,但我很确定我见过名称“打包选项”或“装箱选项”(或类似的东西)来描述这种旧语法。
dd
继承了它的非破折号选项作业控制语言 (JCL)在 IBM 大型机上。
其中一些实用程序还接受虚线选项,并且POSIX 规范ps
根本没有提到旧式选项。 规格dd
列出“操作数”而不是“选项”,并且tar
根本没有被 POSIX 标准化(标准归档器是pax
)。
另请注意,较新的实用程序还使用非破折号选项(或更确切地说,操作数)来确定要采取的操作。您将在例如等中找到这些内容git commit -p
。lxc exec
这其实和 的“动作”颇为相似tar
。从原始tar
手册在 Unix 版本 7 中:
tar
在磁带上保存和恢复文件。它的动作是由key
参数控制的。是key
一串最多包含一个的字符功能字母以及可能有一个或多个功能修饰符。
ps
Unix Release 3 中的原始实现有虚线选项(请注意,此处的手册部分是 8 而不是 1,即管理实用程序部分)。在下一个版本中,它失去了他们。
注意:我在全文中混合了“选项”和“操作数”的术语。从技术上讲,“选项”是一个破折号的单个字母或字符,例如-a
,而“操作数”是非选项。不过,两者都是命令行参数。