如何指定-? GNU getopt 选项

如何指定-? GNU getopt 选项

当使用 GNU 命令解析命令行参数时getopt,我如何(如果可能)识别-?为另一个选项?有没有办法在 opstring 中转义它?

答案1

GNU获取选择命令使用 GNU获取选择()库函数来解析参数和选项。

手册页 getopt(3)状态:

如果 getopt() 无法识别选项字符,它将向 stderr 打印一条错误消息,将该字符存储在 中optopt,然后返回?。调用程序可以通过将 opterr 设置为 0 来防止出现错误消息。

因此?用于表示“未知选项”并且不能用作选项值。 (不可能区分该选项-?和未知选项。)

答案2

即使你可以认识到作为选项字符串,使用问号字符作为实参是一个非常糟糕的主意,因为大多数 shell 都使用它作为其 glob 语法的一部分(表示在匹配中可以选择使用或不使用它之前的字符) )。传递垃圾?对于用户来说会很困难,因为他们必须转义它。

如果您正在创建某种帮助选项,通常的语法是查找 和 的短选项和长-h选项--help

答案3

要达到使用问号的效果帮助,尝试简单地检查未知选项是否确实是问号字符。

例如,每当未知选项不是问号时,我想打印出一条消息“未知选项”。接下来我总是打电话给我的用法功能。

\?) if [ "$OPTARG" != "?" ] ; then echo "Unknown option \"$OPTARG\"" ; fi
        usage

一般来说,我会同意并使用h帮助选项和u选项usage,但我已经使用了这些选项host并且user我喜欢这样。

附言。我在用着巴什在 Solaris 10 上。

相关内容