foo
3つの単一文字スイッチa
、b
および必要なコマンドがあるとしますc
。これらのスイッチはすべてさまざまなオプションで利用できます。
つまりfoo -a opt1 -b opt2 -c opt3
スイッチが単一のブロックにある場合、何が起こりますか(または発生する必要がありますか?)
つまりfoo -abc opt1 opt2 opt3
何が起こるかについての標準的な慣行はありますか(つまり、c
gets、gets、エラーの発生など)、それともそれを解釈するのがプログラムによって異なりますか?opt1 opt2 opt3
a
bc opt1 opt2 opt3
ベストアンサー1
使用されたプログラムでパラメータを承認するgetopt()
と、パラメータを承認し、オプションではなく、を承認します。パラメータが許可されていない場合、動作はパラメータが許可されているかどうかによって異なります。-a
foo -abc opt1 opt2 opt3
-a
bc
opt1
opt2
opt3
-a
-b
-c
これPOSIXの説明getopt()
この点については比較的明確です。
このオプションが引数を取る場合、選択項目のインポート( ) は変数を設定する必要がありますオプションパラメータ次のようにオプション・パラメーターを指します。
- オプションが要素が指す文字列の最後の文字である場合精液、その後オプションパラメータ次の要素を含める必要があります精液、...
- そうでなければ、オプションパラメータこの要素のオプション文字の後に続く文字列を指す必要があります。精液...
しかし、それは別の方法で作業を行うプログラムがないかもしれないという意味ではありません。引数を渡す伝統的な方法は、tar
すべてのフラグをパッケージの最初のコマンドライン引数に入れ、すべての必須引数を次のコマンドライン引数のオプションに順番に入れることです。
この例ではFreeBSD タールマニュアル:
tar tbf 32 file.tar
andb
フラグは引数を受け入れます。ここではandf
です。もちろん、このパターンはパラメータが次のような点で非常にユニークです。32
file.tar
いいえ前にダッシュがあります。ダッシュを使用するとgetopt
- と同様の解析が行われます。これは、tar xfv
とtar -xfv
が異なることを意味します(-f
引数が必要なためです)。
-abc
もちろん、一部のプログラムは完全な単語で構成されたオプションを使用しますが、まだダッシュで始まるため、問題のプログラムがわからない場合は、オプションが1つであるか、3つのオプションがあるのか、それともパラメータがあるものかを知ることはできません。長いオプションの前にGNUスタイルのデュアルダッシュを使用すると、少なくとも区別が明確になります。