当使用 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 上。