パラメータ付きブロック[-abc]の単一文字スイッチ

パラメータ付きブロック[-abc]の単一文字スイッチ

foo3つの単一文字スイッチabおよび必要なコマンドがあるとしますc。これらのスイッチはすべてさまざまなオプションで利用できます。

つまりfoo -a opt1 -b opt2 -c opt3

スイッチが単一のブロックにある場合、何が起こりますか(または発生する必要がありますか?)

つまりfoo -abc opt1 opt2 opt3

何が起こるかについての標準的な慣行はありますか(つまり、cgets、gets、エラーの発生など)、それともそれを解釈するのがプログラムによって異なりますか?opt1 opt2 opt3abc opt1 opt2 opt3

答え1

使用されたプログラムでパラメータを承認するgetopt()と、パラメータを承認し、オプションではなく、を承認します。パラメータが許可されていない場合、動作はパラメータが許可されているかどうかによって異なります。-afoo -abc opt1 opt2 opt3-abcopt1opt2opt3-a-b-c

これPOSIXの説明getopt()この点については比較的明確です。

このオプションが引数を取る場合、選択項目のインポート( ) は変数を設定する必要がありますオプションパラメータ次のようにオプション・パラメーターを指します。

  1. オプションが要素が指す文字列の最後の文字である場合精液、その後オプションパラメータ次の要素を含める必要があります精液、...
  2. そうでなければ、オプションパラメータこの要素のオプション文字の後に続く文字列を指す必要があります。精液...

しかし、それは別の方法で作業を行うプログラムがないかもしれないという意味ではありません。引数を渡す伝統的な方法は、tarすべてのフラグをパッケージの最初のコマンドライン引数に入れ、すべての必須引数を次のコマンドライン引数のオプションに順番に入れることです。

この例ではFreeBSD タールマニュアル:

tar tbf 32 file.tar

andbフラグは引数を受け入れます。ここではandfです。もちろん、このパターンはパラメータが次のような点で非常にユニークです。32file.tarいいえ前にダッシュがあります。ダッシュを使用するとgetopt- と同様の解析が行われます。これは、tar xfvtar -xfvが異なることを意味します(-f引数が必要なためです)。

-abcもちろん、一部のプログラムは完全な単語で構成されたオプションを使用しますが、まだダッシュで始まるため、問題のプログラムがわからない場合は、オプションが1つであるか、3つのオプションがあるのか​​、それともパラメータがあるものかを知ることはできません。長いオプションの前にGNUスタイルのデュアルダッシュを使用すると、少なくとも区別が明確になります。

答え2

POSIX規格によると:

手順5:"-"区切り文字の後に結合する場合は、オプション引数を持たない1つ以上のオプションとオプション引数を持つ最大1つのオプションを許可する必要があります。

したがって、POSIX互換ユーティリティでは、foo -abc opt1 opt2 opt3これは次のことを意味します。

  • -abcオプション引数を持つオプション。
  • opt1、標準パラメータとして使用さopt2れます。opt3

fooユーティリティがPOSIX規格ではない場合は、このマニュアルでこれらの状況を明確にする必要があります。

答え3

それはすべて入力を解釈するプログラムによって異なります。

foo -abc通常、オプションが引数を使用しない限り、短いオプション(たとえば)を一緒にリンクできます。これは慣例によるものであり、標準の引数解析ライブラリ(getoptsなど)がそれをサポートしているためです。

ただし、リンク短縮オプションをサポートしていない一般的に使用されるプログラムはありません。

関連情報