问题描述
while getopts "b:?1:?2:?g:r:n:t:?o:?" opt; do
这与以下有何不同:
while getopts "b:1:2:g:r:n:t:o:" opt; do
解决方法
这与以下有何不同:
第一个无效。它同样不同,因为 ?
很可能会被大多数 getopts
实现忽略,但是如果 getopts
决定在无效的 optstring
上出错,那会很好。来自posix getopts:
选择字符串
一个包含调用 getopts 的实用程序识别的选项字符的字符串。 [...]
字符
除了错误处理之外,没有其他提及 ?
。 getopt
是一个非常简单的实用程序,?
在解析错误时由 getopt
返回。
作者很可能打算做“可选选项参数” - getopt
不支持这样的功能(如果支持,我相信它会像在 GNU {{ 1}}).
查看bash sources getopt.c,::
使用简单的getopt
来扫描bash
中的选项。因为有 strchr
,所以它被解释为一个选项 - 区分错误和成功变得不可能(或不必要的困难),因为 optstring
会在出错时返回。
?