我写了一个shell脚本来做某事。一切正常!我的代码的一部分是这样的,所以我可以传递选项和参数:
while getopts "a:b:c" opt
do
case $opt in
a) AA=$OPTARG ;;
b) BB=$OPTARG ;;
c) CC=$OPTARG ;;
esac
done
shift $(expr $OPTIND - 1)
但现在我想添加一个选项,比如d
,我不希望它使用任何参数,如下面的代码所示,但它以错误结束,抱怨{{1}似乎getopts不能这样做。
option requires an argument error -- d
那我该怎么办?如果我想要两种选项类型,一种可以接受论证,另一种不需要参数,通常的做法是什么?
答案 0 :(得分:15)
:
说明符中的getopts
不是分隔符。来自man getopts
:
如果一个字符后面跟一个冒号,那么该选项应该有一个参数,该参数应该用空格分隔。
因此,如果您想要一个不参数的选项,只需添加该字符即可。如果您希望它接受参数,请添加后跟:
的字符。
答案 1 :(得分:0)
如果您在d
"a:b:c:d"
之后有冒号,就会发生这种情况。
你的代码示例中没有它,它接受-d
没有参数就好了。
也许你在编写测试用例时将其取消了?发布的tag wiki第2步说“测试你的例子。确保它运行并仍然显示问题。不要刷掉它。”