POSIX 多值 option_argument 语法
POSIX multi-value option_argument syntax
我已阅读https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html。
我知道短 option_argument
可以看起来像 -kvalue
或 -k value
。
如果我们想为 option_argument
指定多个值,我们可以编写 -kvalue1 -kvalue2
、-k value1 -k value2
或两种语法的混合。
我的问题:
-k value1 value2
是否有效并等同于上面的内容?
此外,长时间 option_argument
s 呢?
--key value1 value2
一样吗?
-k value1 value2
通常等同于 -k value1 -- value2
,其中 value1
是 option_argument 到 -k
, value2
是一个 操作数 (一个程序参数,如 echo value2
或 ls value2
)。如果你通过操纵 optind/OPTIND
来实现它,你会遇到以下问题:
- 在
-k value1 value2 ... valueN input-file
中,您怎么知道 input-file
是输入文件而不是 -k input-file
?
-k -z
是否意味着 -k
有 0 个参数,后跟 -z
选项,或者 -z
被视为 option_argument? -k value1 value2 -z value4
呢?
此外,-k value1 -k value2
通常会将 value1
替换为 value2
,因此最好记录下 -k
的附加行为(如果已实施)。您应该避免使用 -(
和 -)
选项。在 Solaris 上,根据其 CLIP guidelines(向下滚动到 命令语法标准:指南 部分),(
和 )
字符分隔长选项名称,就像 ?(help)V(version)
会将 --help
识别为 -?
,将 --version
识别为 -V
。
至于长选项参数,POSIX 不支持它们,无论是 -old-style arg
、--gnu-style=arg
还是 --gnu-style arg
。根据 POSIX,optstring "-:k:"
不可移植,因为 -
不是字母数字;即使支持,您也需要处理在 --key value1
的情况下更改 optind/OPTIND
以将键值设置为 value1
因为 key
是 option_argument 用于 -
选项。
如果您只是编写一个实用程序而不是在您自己的选项解析器中实施 getopt
规则,另一种方法是依赖 getopt_long
,牢记 implementation differences;它被广泛使用,即使它没有被 POSIX 指定。您还可以使用单独的选项解析库(或 shell 函数或任何您将在您正在处理的语言中使用的函数)。
我已阅读https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html。
我知道短 option_argument
可以看起来像 -kvalue
或 -k value
。
如果我们想为 option_argument
指定多个值,我们可以编写 -kvalue1 -kvalue2
、-k value1 -k value2
或两种语法的混合。
我的问题:
-k value1 value2
是否有效并等同于上面的内容?
此外,长时间 option_argument
s 呢?
--key value1 value2
一样吗?
-k value1 value2
通常等同于 -k value1 -- value2
,其中 value1
是 option_argument 到 -k
, value2
是一个 操作数 (一个程序参数,如 echo value2
或 ls value2
)。如果你通过操纵 optind/OPTIND
来实现它,你会遇到以下问题:
- 在
-k value1 value2 ... valueN input-file
中,您怎么知道input-file
是输入文件而不是-k input-file
? -k -z
是否意味着-k
有 0 个参数,后跟-z
选项,或者-z
被视为 option_argument?-k value1 value2 -z value4
呢?
此外,-k value1 -k value2
通常会将 value1
替换为 value2
,因此最好记录下 -k
的附加行为(如果已实施)。您应该避免使用 -(
和 -)
选项。在 Solaris 上,根据其 CLIP guidelines(向下滚动到 命令语法标准:指南 部分),(
和 )
字符分隔长选项名称,就像 ?(help)V(version)
会将 --help
识别为 -?
,将 --version
识别为 -V
。
至于长选项参数,POSIX 不支持它们,无论是 -old-style arg
、--gnu-style=arg
还是 --gnu-style arg
。根据 POSIX,optstring "-:k:"
不可移植,因为 -
不是字母数字;即使支持,您也需要处理在 --key value1
的情况下更改 optind/OPTIND
以将键值设置为 value1
因为 key
是 option_argument 用于 -
选项。
如果您只是编写一个实用程序而不是在您自己的选项解析器中实施 getopt
规则,另一种方法是依赖 getopt_long
,牢记 implementation differences;它被广泛使用,即使它没有被 POSIX 指定。您还可以使用单独的选项解析库(或 shell 函数或任何您将在您正在处理的语言中使用的函数)。