2012-03-26 6 views
3

コマンド:バッシュgetoptsが、私は彼らのウェブサイトからIBMの例を、以下の午前

(リスト#5)http://www.ibm.com/developerworks/library/l-bash-parameters/index.html

#!/bin/bash 
echo "OPTIND starts at $OPTIND" 
while getopts ":pq:" optname 
    do 
    case "$optname" in 
     "p") 
     echo "Option $optname is specified" 
     ;; 
     "q") 
     echo "Option $optname has value $OPTARG" 
     ;; 
     "?") 
     echo "Unknown option $OPTARG" 
     ;; 
     ":") 
     echo "No argument value for option $OPTARG" 
     ;; 
     *) 
     # Should not occur 
     echo "Unknown error while processing options" 
     ;; 
    esac 
    echo "OPTIND is now $OPTIND" 
    done 

を私がするしたいすべてがその名を超える1文字のオプションを持っています。つまり、-pと-qの代わりに-ppppと-qqqqを使います。私は私のプログラムを書かれているし、実装-helpは私に問題を与えている

...従来のシェルコマンドについて

+0

これは一種の[duplicate](http://stackoverflow.com/a/402410/1230632)です。とにかく、あなたがJavaスタイルのオプションを書こうとしているのであれば、おそらく自分で実装するか、他のツールを使う必要があるでしょう。 – tchap

+1

[bashシェルスクリプトでgetoptsを使う長くて短いコマンドラインオプションを入手する](http://stackoverflow.com/questions/402377/using-getopts-in-bash-shell-script-to-get-long-and-short-command-line-options) – l0b0

答えて

8

-help-h -e -l -pと同等であるので、あなたはgetoptsで「-help」を解析するならば、それはそれを扱います4つの別々の議論として。このため、すべてのパースを自分でやりたいのでない限り、複数の文字の引数の前に単一のハイフンを付けることはできません。慣習的に、単なる文字ではないオプション(別名「長いオプション」)は、物事を明確にするために、2つのダッシュを前に付けます。

ヘルプテキストの表記法は、-h--helpの両方をサポートすることです。

bashのgetopts組み込み関数は長いオプションをサポートしていませんが、すべての一般的なLinuxディストリビューションには、長いオプションをサポートする代わりに使用できる別のgetoptユーティリティがあります。

There's more discussion of the topic in this answer

4

Upfloorのが正しいです。 getoptユーティリティは長いオプションをサポートしていますが、 - オプションを使用できます。多分あなたはこれを試すことができます。

#!/bin/bash 
args=`getopt -l help :pq: $*` 
for i in $args; do 
    case $i in 
    -p) echo "-p" 
     ;; 
    -q) shift; 
     optarg=$1; 
     echo "-q $optarg" 
     ;; 
    --help) 
     echo "--help" 
     ;; 
    esac 
done 
関連する問題