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

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

要为目录创建 tar 文件,可以键入tar带有compressverbose和选项的命令:file

$ tar -cvf my.tar my_directory/

但它也可以这样做:

 $ tar cvf my.tar my_directory/

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

答案1

UNIX 应用程序历史上使用过多种不同的选项模式。几个老的,比如柏油,使用位置方案:

命令选项参数

例如 tar 使用

焦油*东西*f“操作过的文件”*“要操作的文件路径”*

为了避免混乱,我们首先尝试了柏油和其他一些具有旧标志参数风格的程序允许用破折号分隔标志,但我们大多数老家伙只是忽略了这一点。

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

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

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

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

这就是为什么它变成了现在的混乱局面。

答案2

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

然后是ps,如果您使用 SysV-ish 选项,则使用破折号;如果您使用 BSD-ish 选项,则将其省略,只是为了让事情变得更加混乱。

我们甚至不谈find

答案3

使用破折号是为了消除选项参数名称和值之间的歧义。我想这更像是一个标准约定。

答案4

使用前导减号/破折号 (-),您需要保持选项的准确顺序。如果没有减号,您的选项顺序可以改变。

例如:

# tar -xvf yourfile.tar
# tar vxf yourfile.tar

相关内容