docase1(){
case "$1" in
-a )
echo "case a" ;;
-b )
echo "case b" ;;
-* )
echo "wrong input" ;;
esac
}
-*
문자 대신 -+문자를 일치시킬 수 있는 결론을 얻을 수 있습니다 .
docase1 -g
wrong input
docase1 -gg
wrong input
docase1 g
docase1 gg
docase1 g
명령 과 docase1 gg
아무것도 출력으로 얻지 못한다 는 사실은 -*가 g
nor 와 일치할 수 없음을 의미합니다 gg
.
docase2(){
OPTS=$(getopt -o ab -- "$@");
if [ $? != 0 ] ; then
echo "wrong" ;
fi;
eval set -- "$OPTS";
while true; do
case "$1" in
-a )
echo "case a" ;
shift ;;
-b )
echo "case b";
shift ;;
-* )
echo "wrong input";
break;;
esac
done
}
docase2에서 문자를 일치시킬 수 있는 이유는 무엇 -*
입니까?
docase2 g
wrong input
docase2 gg
wrong input
동일한 표현이 왜 -*
다른 효과를 가져오는가?
-*
docase1에서는 일치할 수 없고 g
docase2 에서는 일치할 수 있습니까 gg
?-*
답변1
그러나 그것은 일치하도록 요구되는 것이 아닙니다. 문제는 그 문제와 관련이 없으며 그 문제 와 관련된 case
모든 것입니다 .getopt
set
비록 당신의사례블록은 여전히 동일한 것을 확인하므로 $1
더 이상 거기에서 명령줄 매개변수만 가져오지 않습니다. 이전 set
명령교체됨원래 매개변수와 출력getopt일반적으로 다음과 같은 프로그램입니다 -- "g"
.
해당 추가 --
매개변수는 다음에 의해 삽입됩니다.getopt옵션이 이 시점에서 중지되고 옵션이 아닌 인수가 시작됨을 나타냅니다. 그게 전부의 목적이야getopt어쨌든 – 다양한 종류의 명령줄 인수를 정렬하고 분리합니다.
다음 줄을 추가하면 다음과 같이 명확해집니다.
while true; do
+ echo "arg 1 is '$1'"
case "$1" in