linux中命令选项的顺序重要吗?

bob*_*obo 16 linux ordering command-line

例如,当我输入:

gcc -O hello.c -c
Run Code Online (Sandbox Code Playgroud)

或者

gcc hello.c -c -O
Run Code Online (Sandbox Code Playgroud)

两人都没有抱怨。

命令选项的顺序重要吗?

小智 20

这取决于程序本身;操作系统并不决定顺序是否重要。

GCC 的选项集非常庞大,如果您可以按任意顺序提供任何选项,我无法以任何权威说;您必须阅读该选项的文档。也就是说,一般的经验法则是,如果您有两个或多个互斥的选项(例如-O1 -O2不同级别的优化),程序通常会采用较晚的选项而不是较早的选项。同样,这不是由 linux 强制执行的。

一个可以让您以任何顺序指定大多数选项的简单程序是ls. 可以使用ls -la,ls -al或完成列出当前目录中所有文件的详细信息ls -l -a。但是, ls -l1(即 'el' 'one')不会给出与 ls -1l ('one' 'l') 相同的输出。这些是相互排斥的选项,最后列出的优先于第一个给出。

还有一个奇怪的程序,它在参数到达时将选项应用于参数。因此,例如,您可能有一个假设命令blah -a 1 2 -b 3,其中-a适用于所有三个参数,但-b仅适用于3.

同样,这取决于相关的单个程序。如果您不确定,请阅读文档。


Jon*_*ler 6

在某些情况下,即使在 GCC 中,命令行选项的顺序也很重要。如果您使用静态库 (.a) 进行链接,那么如果您指定-llib1 -llib2并且其中有一个函数liblib2.a调用了liblib1.a未带入程序的函数,则链接将失败并显示未解析的符号。使用共享库,这不是问题。

一般来说,正如其他人所说,选项的顺序可能会也可能不会有所不同。但是,以下两个命令的输出是不同的 - 因此cat改变输出的参数顺序:

cat /etc/passwd /etc/group
cat /etc/group  /etc/passwd
Run Code Online (Sandbox Code Playgroud)

另请注意,在 Linux(特别是)上,GNUgetopt()倾向于重新排序命令行,以便在任何其他参数之前处理所有选项(以减号开头) - 除非您使用双破折号--标记结束参数,或者除非您设置环境变量 POSIXLY_CORRECT。