ユーティリティを使用するときは、オプション(および対応するオプション引数)および/またはオペランドを指定できます。
ほとんどの場合(一部の標準(POSIX?)に準拠するという意味で)
- オプション間の順序は重要ではありませんか?
- オペランド間の順序は重要ですか? (たとえば、のオペランドは次
find
のように順序付けられますgrep
。) - オプションとオペランドの間の順序は重要ですか? (例えば
ls . -l
そしてrm mydir -r
POSIXと互換性がないそうです。) - オプションにオプション引数がある可能性がある場合、オプションの後に続く内容がオプションの引数かオペランドかをプログラムでどのように知ることができますか?
しかし、C(例:getopt)やPython(例:引数の解析中)オプションとオペランドは同じ基準を満たしていますか?
CFhttp://pubs.opengroup.org/stage7tc1/basedefs/V1_chap12.html
答え1
まあ、ユーティリティ税法ガイドオプションの順序と他のオプションとの関係に関する質問に答えることができます。
ガイドライン11:
オプションが相互排他的であると文書化されておらず、そのようなオプションが以前の互換性のないオプションをオーバーライドするものとして文書化されていない限り、異なるオプションの順序は重要ではありません。オプション引数を含むオプションが繰り返される場合、オプションとオプション引数の組み合わせは、コマンドラインで指定された順序で解釈する必要があります。
この製品を注文する唯一の重要な場所は次のとおりです。文書:
- オプションは、ユーティリティの説明がより混乱しない限り、通常はアルファベット順にリストされます。オプションセクションに特に明記されていない場合、またはユーティリティ構文ガイド11の例外が適用されない限り、表示される順序によるオプション間に暗黙の関係はありません。オプション引数なしでオプションが繰り返される場合、特に指定しない限り、結果は定義されません。
ただし、1つの引数にオプションが必要なく、他のコマンドにオプションが必要なコマンドがある場合、オプションのある引数はオプションを必要としない引数の後にある-
ため、1つのシンボルのみを使用してグループ化できます。
手順5:
"-"区切り文字の後に結合する場合は、オプション引数を持たない1つ以上のオプションとオプション引数を持つ最大1つのオプションを許可する必要があります。
POSIXは標準なので、互換性とoption_argumentsの処理方法を決定するのは技術プログラマーの役割です。以下を使用して、POSIXではなくargparse Pythonプログラムを作成できます。次のコード:
>>> parser = argparse.ArgumentParser(prog='PROG', prefix_chars='-+')
>>> parser.add_argument('+f')
>>> parser.add_argument('++bar')
これにより、+
ガイドライン4が発生すると、プログラム・パラメーターはPOSIXではなく次に始まります。
手順4:
すべてのオプションの前には「-」区切り文字を付ける必要があります。
順序付けに関しては、.parse_args()
関数を使用して引数を特定の位置に固定する場所を決定します。 argparse libの場合、オペランドはありません。すべては議論です。ここでオペランドは-
文字のないパラメータに過ぎず、生成されるソフトウェアがPOSIX互換かどうかを決定するのもプログラマの役割です。
正しい方法で実装すると、argparse自体がPOSIXに準拠します。おすすめブック:
- 引数の解析中– コマンドラインオプションとパラメータの解析
関連情報: