请问:case语句是否能够匹配多个选项吗?

我编写了一段代码,主要实现从输入的命令行中提取出相关参数的功能,使用了case进行判断,源代码如下 xshift.sh:

#!/bin/sh
while [ $# -ne 0 ]
do
case "$1" in
-[m]?*) # separate flags from value
flag=`expr "$1" : '\(..\)'` #put the first two characters to the flag
arg=`expr "$1" : '..\(.*\)'` #put the other characters to the variable arg
echo $1
echo $flag
echo $arg
shift
set shiftdummy "$flag" "$arg" "$@"
echo "i am in the -[m]?*)"
;;
-m) shift
echo $1
echo "i am in the -m)"
MFLAGS="${MFLAGS}$1"
;;
-*)
;;
*)
;;
esac
shift
done

当我输入指令 ./xshift.sh -mb abc 后,输出的结果如下显示:
-mb
-m
b
i am in the -[m]?*)
b
i am in the -m)


问题出现在:我在case中进行了判断,想实现跳转到其中一个分支中去。可结果却发现,两个分支都进入了。请问这个应该怎么解释?是不是我的代码哪里有问题?