2017-12-15 8 views
0

私は以下のコードスニペットを見てきましたが、正確にはの目的は何ですか? whileループ内の。私はこのパラメータのために複数のサイトやフォーラムを検索しましたが、正確な答えは得られませんでした。Kornスクリプトのパラメータ

ご入力いただきまして、ありがとうございます。 kshので

while [[ $1 = -? ]]; do 
    case $1 in 
    -a) a1=alligator ;; 
    -b) a2=bear ;; 
    -c) a3=cougar ;; 
    esac 
    shift 

答えて

2

、二重括弧内に、===オペレータはに一致パターンのためのものである:[[ string = pattern ]] [1]

これらは、シェルのパス名展開パターンです。 ?は任意の1文字に一致します。

だから、$1がハイフンに続いて任意の1文字に一致する場合は、テストします。つまり、最初の位置パラメータはオプション文字列のように見えますか?

[1] - 文字列の等価性チェックを実行するために、パターンに特殊なグロビング文字が含まれていないか、そのような文字が引用またはエスケープされています。


IMO、オプションの解析を行うための、より堅牢な方法は、getopts組み込みである:

while getopts :abc opt; do 
    case $opt in 
     a) a1=alligator ;; 
     b) a2=bear ;; 
     c) a3=cougar ;; 
     :) print -u2 "error: missing required argument for -$OPTARG" ;; 
     ?) print -u2 "unknown option: -$OPTARG" ;; 
    esac 
done 
shift $((OPTIND - 1)) 
+0

おかげでたくさんの先生!これは私の多くの助けとなりました。 – dev

関連する問題