while getopts "hd:R:" arg; do
case $arg in
h)
echo "usage"
;;
d)
dir=$OPTARG
;;
R)
if [[ $OPTARG =~ ^[0-9]+$ ]];then
level=$OPTARG
else
level=1
fi
;;
\?)
echo "WRONG" >&2
;;
esac
done
-
level 指的是参数-R
, dir 指的是参数-d
-
当我输入./count.sh -R 1 -d test/
它工作正常
-
当我输入./count.sh -d test/ -R 1
它工作正常
-
但我想让它在我输入时起作用./count.sh -d test/ -R
or ./count.sh -R -d test/
这意味着我想要-R
具有默认值并使命令序列更加灵活。
此解决方法定义不带参数的“R”(无“:”),测试“-R”之后的任何参数(管理命令行上的最后一个选项)并测试现有参数是否以破折号开头。
# No : after R
while getopts "hd:R" arg; do
case $arg in
(...)
R)
# Check next positional parameter
eval nextopt=\${$OPTIND}
# existing or starting with dash?
if [[ -n $nextopt && $nextopt != -* ]] ; then
OPTIND=$((OPTIND + 1))
level=$nextopt
else
level=1
fi
;;
(...)
esac
done
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)