实用程序的操作数是否应该始终出现在实用程序的所有选项之后?

实用程序的操作数是否应该始终出现在实用程序的所有选项之后?

POSIX 说

utility_name[-a][-b][-c option_argument]
    [-d|-e][-f[option_argument]][operand...]

...最后一个选项和选项参数后面的参数被命名为“操作数”。

这是否意味着根据 POSIX 标准,实用程序的操作数应始终出现在实用程序的所有选项之后?

为什么有些命令或实用程序如果不遵循规则运行就会出错,而另一些则不会?例如:

  1. 在 的联机帮助页中ls

    SYNOPSIS
           ls [OPTION]... [FILE]...
    

    它显示[FILE]...出现在之后[OPTION]...

    但似乎操作数可以出现在选项之前。例如, ls . -a工作原理与ls -a .

  2. 对于 bash 的builtin read,如果我在操作数后面指定选项,则会出错:

    $ read tt -u 5 5 < /tmp/tt
    bash: read: `-u': not a valid identifier 
    $ read -u 5  tt 5</tmp/tt 
    $ echo $tt 
    1 2 3 4 5
    

答案1

是的,如果您希望您的程序更加可移植。

允许选项出现在参数中的任何位置是GNU 特定的

在任何情况下,您始终可以使用--来表示选项结束,后面的任何内容--都将被视为操作数。

答案2

回答一下标题的问题:

操作数应该出现在选项之后吗?

是的。

他们总是这样吗?

不。

程序如何处理选项和操作数(通常:参数)完全取决于实用程序的开发人员。一些开发人员遵循一些通用规则,其他开发人员遵循其他通用规则。两个最常见的通用规则是 GNU 规则和 POSIX 规则。

相关内容