我想使用getopts,但是默认情况下不起作用。
我尝试过的代码是:
while getopts "sdp" arg; do
case "$arg" in
s)
echo "1"
;;
p)
echo "2"
;;
d)
echo "3"
;;
*)
echo "default"
;;
esac
当我运行该过程时:./myTask
我没有收到任何输出
答案 0 :(得分:2)
它按预期工作。
默认情况下不是处理没有参数的情况,而是提供无效参数的情况:
$ ./myTest -X
./myTest: illegal option -- X
default
在这种情况下,通常您会写一条使用情况消息。
答案 1 :(得分:0)
这是case
语句的默认值,但是它意味着getopts
上下文中的特定内容:您定义了一个选项,但没有子句可以处理。
例如,如果运行./myTask -z
,则会在此处的另一个答案中看到@that_other_guy声明的“默认”输出。
如果您要输出表明未提供任何选项的内容:
然后在while getopts
块之后但在shift $(($OPTIND - 1))
行之前,执行此操作(对if
块进行所需的处理:
if ((OPTIND == 1))
then
echo "No options specified"
fi
请注意,这并不表示未指定任何自变量(例如,您的问题中的./myTask
)。要执行此操作,请在shift
行的之后中添加以下内容:
if (($# == 0))
then
echo "No positional arguments specified"
fi
请在我的答案here中查看getopts
函数的参考实现。