为什么使用多余的破折号 (-) 将选项标志传递给 tar?

Mil*_*der 44 tar utilities

要为目录创建 tar 文件,可以这样键入tar带有compress,verbosefile选项的命令:

$ tar -cvf my.tar my_directory/
Run Code Online (Sandbox Code Playgroud)

但它也可以这样做:

 $ tar cvf my.tar my_directory/
Run Code Online (Sandbox Code Playgroud)

也就是说,选项前没有破折号 (-)。为什么要向选项列表传递一个破折号 (-)?

Cha*_*tin 55

历史上在 UNIX 应用程序中使用的选项有几种不同的模式。几个旧的,比如tar,使用位置方案:

命令选项参数

例如 tar 使用

tar *something*f “操作的文件 *“操作的文件路径”*

在第一次尝试避免混淆时,tar和其他一些具有旧标志参数样式的程序允许用破折号分隔标志,但我们大多数老家伙只是忽略了这一点。

其他一些命令具有更复杂的命令行语法,例如dd(1)使用标志、等号、路径名、参数和梨树中的鹧鸪,所有这些都是疯狂的放弃。

在 BSD 和更高版本的 unix 中,这或多或少会收敛到标有“-”的单字符标志,但这开始出现一些问题:

  • 旗帜可能很难记住
  • 有时您实际上想使用带有“-”的名称
  • 尤其是对于 GNU 工具,可能的标志数量开始受到限制。因此 GNU 工具添加了 GNU 长选项,例如--output.

然后 Sun 认为额外的“-”是多余的,并开始使用带有单个“-”的长样式标志。

这就是现在的烂摊子。

  • *“和梨树上的鹧鸪”* 比我干的尝试要好。你赢了。 (12认同)
  • 很好的历史背景。 (3认同)
  • 我注意到很多 X 程序(例如,来自 Xorg 的 X)使用带有单个 `-` 的长样式标志。是孙的吗? (2认同)
  • @plhn 成语。一首传统的英国圣诞颂歌“圣诞节的十二天”列出了一大堆奢侈的礼物,以“梨树上的鹧鸪”结尾。这意味着一长串奢侈的清单。 (2认同)

Pau*_*lin 11

您可以以标准的 unix 方式提供 tar 选项tar -c -f foo -v -B file1 file2 file3,您需要破折号来区分选项和参数或命令行末尾的文件名。或者您可以将所有选项放在第一个参数中,在这种情况下,破折号是可选的。

然后是ps,如果您使用的是 SysV-ish 选项,则使用破折号,如果您使用 BSD-ish 选项,则将它们排除在外,只是为了使事情更加混乱。

让我们甚至不谈find