
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
も にも一致しないことを意味します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 ではand は
-*
一致できませんが、docase2 では一致できますか?g
gg
-*
答え1
しかし、それは一致を求められているものではありません。問題はそれとはまったく関係がなく、それ以前のcase
すべてです。getopt
set
あなたの場合ブロックは依然として同じをチェックします$1
が、そこからコマンドラインパラメータだけを取得することはもうありません。以前のset
コマンド交換された元のパラメータと出力を取得プログラムは、一般的に次のようになります-- "g"
。
その追加--
パラメータは、取得この時点でオプションが終了し、オプション以外の引数が始まることを示すためです。これが取得とにかく、さまざまな種類のコマンドライン引数を分類して分離します。
この行を追加すると、次のことが明確になります。
while true; do
+ echo "arg 1 is '$1'"
case "$1" in