
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命令参数有三种风格。要注意的是,横杠是指键盘上的减号,有时称为“连字符”,它不是中文全角减号,也不是中文的“一”字。

1 原始Posix/Unix风格:单个减号 –
如“ls -a”、“ls -Alh”这样,就是原始的Unix风格命令行选项,是以连字符“-”开头的单个字符。
如果选项后面不带参数,则被称之为模式选项,模式选项是可以组合在一起使用的。例如,如果-a和-b是模式选项,那么-ab或-ba就都正确,而且会启用这两个选项。如果选项有参数,这些参数要紧接在选项后面(是否以空格分隔可选)。
例如:“ls -al”和“ls -la”是一样的效果。
Linux采用的就是这个风格。这种风格的参数,组合方便,但可读性太差。当然,由于目前操作系统,无论windows还是Unix,shell命令都不是准备给一般人用的,所以这个对一般人来说无关紧要。

2 GNU风格:两个连续的减号“–”
GNU风格则使用两个连续的减号连字符“–”后接选项关键字(注意,不是单个字符)。上面的“cat —number 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风格的,选项都是见名知义的词语,从可读方面来说效果更好。但缺点就是太长了,也不方便组合。

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命令几乎没有办法操作它。




收藏了,感谢分享