while getopts "hd:R:" arg; do
case $arg in
h)
echo "usgae"
;;
d)
dir=$OPTARG
;;
R)
if [[ $OPTARG =~ ^[0-9]+$ ]];then
level=$OPTARG
else
level=1
fi
;;
\?)
echo "WRONG" >&2
;;
esac
done
-R
的参数,dir指的是-d
的参数./count.sh -R 1 -d test/
时,它正确工作./count.sh -d test/ -R 1
时,它正确工作./count.sh -d test/ -R
或./count.sh -R -d test/
这意味着我希望
-R
具有默认值,并且命令顺序可以更灵活。 最佳答案
getopts
并不真正支持此功能。但是编写自己的替代品并不难。
while true; do
case $1 in
-R) level=1
shift
case $1 in
*[!0-9]* | "") ;;
*) level=$1; shift ;;
esac ;;
# ... Other options ...
-*) echo "$0: Unrecognized option $1" >&2
exit 2;;
*) break ;;
esac
done