博客主页:https://tomcat.blog.csdn.net
博主昵称:农民工老王
主要领域:Java、Linux、K8S
期待大家的关注💖点赞👍收藏⭐留言💬
最近在工作中遇到有同事问我一个问题:tar -zxf 和 tar zxf 有什么区别,他们的作用是一样的吗,参数前到底是否需要加连字符-?
先说答案:tar -zxf 和 tar zxf 是不同参数风格的Linux命令,前者是Unix/Posix风格,后者BSD 风格。他们的作用是一样的,参数是否加连字符-都可以。
上面这个问题就牵涉到一个被很多人忽略的知识点——Linux命令的选项风格(也有程序员称之为参数风格)。本文在此讨论一下。
常见的Linux命令行风格有三种,即 Unix/Posix、BSD、GNU,除此之外还有一些难以被归类的风格。
Unix/Posix风格
也叫短选项风格,是最原始的风格,选项是以连字符-开头的单个字符,注意是一个字符,而不是一个单词。
如果选项后面不带参数,则被称之为模式选项。模式选项是可以组合在一起使用的。例如:如果-a和-l是模式选项,那么-al或-la就都正确。
如果选项需要带参数,则称之为参数选项。这些参数要紧接在这个选项后面,通常用空格隔开。
最初的Unix风格是在缓慢的ASR-33电传打字机上演变而来的,这使得简洁成为一种美德,因此是单字母选项。按住shift键需要额外的精力,因此偏爱小写,并使用-,而不是可能更合乎逻辑的+来启用选项。
GNU风格
也叫做长选项风格,选项使用两个连字符--开头的单词,如:ls --all。
如果选项需要带参数,则使用空格或者=将参数和选项分开。如:ls --sort time,ls --sort=time。
这种风格的出现是因为仅仅26个字母,即使算上大小写也只有52个,不够一些复杂的GNU程序使用。另外一点是相比于单字符的Unix/Posix风格,GNU风格更容易理解,因为出现的不再是缩写的字母。
BSD 风格
和POSIX/UNIX风格相比,其选项使用单个字符,且不带任何前缀。如ps a。如果是多个不带参数的选项,也可以组合在一起,如ps aux。
如果选项需要带参数,也同POSIX/UNIX风格一样,选项参数紧跟在这个选项后面,可以使用空格分开,也可以不用空格。如ps U root、ps Uroot的作用是一样的。
其他
上面三种风格是最常见的,绝大多数程序的命令是属于上述中的一种,甚至可以同时接受这三种风格的命令行,如ps ,tar,但除此之外,还有小部分命令的参数风格,不属于上面的任何一种。
比如java -version,像这样命令行,其选项通常以单个连字符-开头,后跟一个单词或字符来表示选项。有的程序员称之为X toolkit风格。其实这种概括并不是很准确,我通过查阅资料得知:X toolkit风格的命令行是指,在X窗口系统中使用X toolkit库进行解析和处理的命令行参数和选项的风格。
它首先过滤并处理某些设置显示效果的选项,如-display 和 -geometry,并将剩余的命令行参数传递给应用程序进行解析和处理。可见,X toolkit风格的重点是有一个过滤的流程。
万事万物都有例外,总有的软件供应商喜欢特立独行,像java - version这样风格的命令行,目前并无一个被大多数程序员认可的分类名称,你可以叫它X toolkit风格,也可以像我这样,直接称呼它为Java风格,谁让我对Java语言更熟悉呢。
如需转载,请注明本文的出处:农民工老王的CSDN博客https://blog.csdn.net/monarch91 。