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スタイルのデュアルダッシュを使用すると、少なくとも区別が明確になります。
答え2
手順5:"-"区切り文字の後に結合する場合は、オプション引数を持たない1つ以上のオプションとオプション引数を持つ最大1つのオプションを許可する必要があります。
したがって、POSIX互換ユーティリティでは、foo -abc opt1 opt2 opt3
これは次のことを意味します。
-a
bc
オプション引数を持つオプション。opt1
、標準パラメータとして使用さopt2
れます。opt3
foo
ユーティリティがPOSIX規格ではない場合は、このマニュアルでこれらの状況を明確にする必要があります。
答え3
それはすべて入力を解釈するプログラムによって異なります。
foo -abc
通常、オプションが引数を使用しない限り、短いオプション(たとえば)を一緒にリンクできます。これは慣例によるものであり、標準の引数解析ライブラリ(getoptsなど)がそれをサポートしているためです。
ただし、リンク短縮オプションをサポートしていない一般的に使用されるプログラムはありません。