Linux命令行的参数风格:Posix风格、GNU风格和BSD风格

内容分享1个月前发布 DunLing
0 2 0

Linux命令行的参数风格:Posix风格、GNU风格和BSD风格

Linux命令的格式一般是:command -选项:参数。严格来说“-”后面的是“选项”,如果“选项”需要参数的话,再加上个冒号“:”,然后才是参数。但是,我们习惯上把命令后面没有“参数”的“选项”也统称参数。(如果真的需要参数了,才会区分哪个是“选项”,哪个是参数。)

最初,我没有在意这个问题。如果命令后面需要选项的话,我就在选项前加一个横杠,格式是这样的:“command -选项:参数”,并且认为除了“--help”或“--version”外,几乎都是这样的。列如:“ls -liah”,再列如:”tar -zxvf obs-studio-26.0.2.tar.gz”。

后来发现,“tar zxvf obs-studio-26.0.2.tar.gz”命令行选项前不带横杠“-”也一样执行,但“ls liah”命令行参数明不带横杠“-”,却提示“找不到文件liah”。

$ cat -n wait.sh
1 echo press any key to continue
2 read TEMP #等待你的输入
3 echo ok..
$ cat –number wait.sh
1 echo press any key to continue
2 read TEMP #等待你的输入
3 echo ok..

如上面shell命令所示,cat命令的参数”-n”,等价于“–number”。

问题就出来了,Linux命令参数,为什么有的不需要横杠,有的需要一个横杠,有的又需要两个横杠呢?于是网上查询学习了一下,才知道Linux命令参数有三种风格。要注意的是,横杠是指键盘上的减号,有时称为“连字符”,它不是中文全角减号,也不是中文的“一”字。

Linux命令行的参数风格:Posix风格、GNU风格和BSD风格

1 原始Posix/Unix风格:单个减号 –

如“ls -a”、“ls -Alh”这样,就是原始的Unix风格命令行选项,是以连字符“-”开头的单个字符

如果选项后面不带参数,则被称之为模式选项,模式选项是可以组合在一起使用的。例如,如果-a和-b是模式选项,那么-ab或-ba就都正确,而且会启用这两个选项。如果选项有参数,这些参数要紧接在选项后面(是否以空格分隔可选)。

例如:“ls -al”和“ls -la”是一样的效果。

Linux采用的就是这个风格。这种风格的参数,组合方便,但可读性太差。当然,由于目前操作系统,无论windows还是Unix,shell命令都不是准备给一般人用的,所以这个对一般人来说无关紧要。

Linux命令行的参数风格:Posix风格、GNU风格和BSD风格

2 GNU风格:两个连续的减号“–”

GNU风格则使用两个连续的减号连字符“–”后接选项关键字(注意,不是单个字符)。上面的“catnumber wait.sh”就是这种。

这种风格是由于有好多程序过于复杂,导致单个字符不够用了而发展起来的一种治标不治本的方法。较原始的Unix风格更容易让人理解,但作为我们这种非英语为母语的同胞们也常常输入错误或记不住。GNU风格的选项不用空格分隔就不能组合使用。选项参数既可以用空格分隔也可以使用单个等号“=”来分隔。

$ cat -nE wait.sh 解释:Unix风格的单个“-”可以组合选项

1echo press any key to continue$

2read TEMP #等待你的输入$

3echo ok..$

$ cat –number show-ends wait.sh 解释:–number选项等同于-n

cat: show-ends: 没有那个文件或目录

1echo press any key to continue

2read TEMP #等待你的输入

3echo ok..

$ cat –number –show-ends wait.sh 解释:–show-ends选项等同于E

1echo press any key to continue$

2read TEMP #等待你的输入$

3echo ok..$

$ cat –numbershow-ends wait.sh 解释:GNU风格的“–”选项直接无法组合

cat:未识别的选项 ‘–numbershow-ends’

请尝试执行 “cat –help” 来获取更多信息。

$ cat –number show-ends wait.sh 解释:GNU风格的“–”选项可用空格组合

cat: show-ends: 没有那个文件或目录

1echo press any key to continue

2read TEMP #等待你的输入

3echo ok..

$ cat –number=show-ends wait.sh 解释:GNU风格的“–”选项,在Linux上不能用=组合

cat:选项 ‘–number’ 不允许有参数

请尝试执行 “cat –help” 来获取更多信息。

实则GNU风格的,选项都是见名知义的词语,从可读方面来说效果更好。但缺点就是太长了,也不方便组合。

Linux命令行的参数风格:Posix风格、GNU风格和BSD风格

3 BSD风格,不带“-”使用

列如上面所说的““tar zxvf obs-studio-26.0.2.tar.gz””,选项“-zxvf”与“zxvf”,执行效果一样。

再列如“ps -aux”与“ps aux”,也是一样的效果。但是,这种类型的选项,在Linux上使用不多。

总结如下:

(1)基本上所有的Linux命令都支持第一种单个减号“-”的Unix风格。在Ubuntu中,这种用法最普及。

(2)第二种GNU风格双减号“–”的未必每个命令都支持,在Ubuntu中,有部分命令的部分选项有带双减号“–”的全名选项。

例如在Ubuntu中,“tar”命令中的Unix风格单减号“-”选项,几乎都有对应的双减号“–”的全名选项。但在“ls”命令中,有着大量的单减号“-”选项找不到对应的双减号“–”全名选项。

(3)无减号“-”的BSD风格,在Ubuntu中支持的比较少。

最后要提一下,文件名最好不要以“-”或“–”开头。如果一个文件名字叫“-out.txt”,你会发现“ls -out.txt”命令出错,“cat -out.txt”也出错。除了用图形化界面去打开外,shell命令几乎没有办法操作它。​

Linux命令行的参数风格:Posix风格、GNU风格和BSD风格

© 版权声明

相关文章

2 条评论

您必须登录才能参与评论!
立即登录
  • 头像
    一念初见 读者

    收藏了,感谢分享

    无记录