2012-03-06 11 views
1

私は奇妙な結果を得ている以外は引数の処理を処理するbashの組み込みのgetoptsを使用して私の手を試しています。ここに私のテストスクリプトがあります。Bashのgetopts最後の引数を削除する

#!/bin/sh 

HOST= 
OWNER= 
GROUP= 

while getopts "h:o:g" OPTION; 
    do 
    case $OPTION in 
    h) 
     HOST=$OPTARG 
     ;; 
    o) 
     OWNER=$OPTARG 
     ;; 
    g) 
     GROUP=$OPTARG 
     ;; 
    esac 
done 

echo "$HOST - $OWNER:$GROUP" 

ただし、これを使用してスクリプトを実行すると、

./test.sh -h test.host.com -o skittles -g whatever 

私の最後の引数は、決して引き込まれたり、落ちたりしません。エコーからの私の結果は次のとおりです。

test.host.com - skittles: 
         ^where's my group value? O.o 

これを引き起こす原因は誰にも分かりますか?

ありがとうございました。

答えて

5

-gには引数がありますが、オプション宣言では、-gに関連する「:」はありません。

あなたはこの必要があります:

h:o:g: 
+0

ありがとうおおき!私はコロンが各オプションを成功させなければならないことに気づいていませんでした。私がそれを逃した理由は、私が試したこの例のせいだ。 http://rsalveti.wordpress.com/2007/04/03/bash-parsing-arguments-with-getopts/ – Skittles

+0

これは明らかに[bash getopt man page](http://ss64.com/bash)で述べられています。 /getopts.html): "文字の後にコロンが続く場合、そのオプションには引数が必要です。" – Ouki

3

gの後にオプション文字列がありません。:

+0

はあなたにウィリアムをありがとう!明らかに両方が正しいので、両方の回答を受け入れることができないことをお詫びします。それにもかかわらず私は応答を感謝します。 – Skittles

関連する問題