为什么`tar -xvfz`失败,但是`tar xvfz`工作?

tar -xvfz foo.tar.gz返回一个错误tar: z: Cannot open: No such file or directory

这是完全可以理解的 – f开关期望一个文件名,所以需要最后一个。

但是,省略连字符tar xvfz foot.tar.gz工作tar xvfz foot.tar.gz压缩tar xvfz foot.tar.gz压缩文件。

我已经在OS X 10.8和Ubuntu 12.04上testing过了。

任何想法为什么?

[编辑添加]

我总是使用tar -zxvf foo.tar.gz 然而,这个问题已经出现了,因为这个xkcd ,当有人坚持说tar xvfz会起作用时,我感到惊讶。

在这里输入图像描述

    tar有三种语法(根据这个 ):

    • 长选项(–file)
    • 短期选项(-f)
    • 旧选项(f)

    对于旧的选项语法,所有的字母必须遵循“tar”,并且必须全部落入一个没有空格的簇中。 信件的顺序并不重要,只要这些信件的论据在选项集合后遵循相同的顺序。

    这种编写tar选项的旧方法可以让有经验的用户感到惊讶。 例如,这两个命令:

      # tar cfz archive.tar.gz file # tar -cfz archive.tar.gz file 

    是完全不同的。 第一个示例使用'archive.tar.gz'作为选项'f'的值,并识别选项'z'。 然而,第二个例子使用'z'作为选项'f'的值 – 可能不是预期的。

    旧选项保留与旧版本的tar兼容。

    带“ – ”的命令相当于

     tar -czf archive.tar.gz file tar -cf archive.tar.gz -z file tar cf archive.tar.gz -z file 

    这就是你的例子没有“ – ”而不是“ – ”的原因。