类似于this,但是在bash中实现。
我有一个现有的bash脚本,使用内置的getopts来识别-s
(仅标志-无参数)。 我发现每次都要使用该选项,因此我希望将其设置为默认值,除非在命令行上指定了-s-
或+s
。 但是,虽然ksh getopts
可以处理+s
, 但我在bash getopts
手册中找不到这种能力。
我的当前解决方法是:
- 使用
s:
以便我可以通过$OPTARG
="-"
识别-s-
; 或者 - 替换
-s
为不同的选项,例如-d
(表示“不要”)。
然而,#1的问题在于如果我意外指定-s
,它会吞下下一个参数,而#2的问题在于它使用了与我已经记住的开关字母不同的字母。我希望有一种简单的方法来解析bash中的-s-
或+s
。
- util-linux getopt(1) 程序似乎也不支持
+s
。它可以处理可选参数,因此可能能够使用-s-
。然而,我以前没有使用过getopt(1)
,因此希望您能给出指引,以免自己踩坑。 - BashFAQ 035 建议“自行解析”。如果您已经编写了一个可以执行
+s
或-s-
的例程,我很想看看它。
我的当前参数解析循环非常基本:
while getopts "nthps" opt ; do
case "$opt" in
<other cases cut>
(s) saw_s="yes"
;;
esac
done
shift $((OPTIND-1))