###
6.20.1.1 用語

まずは用語の定義を行う必要があります。

引数 (argument)
  コマンドラインでユーザが入力するテキストの塊で、シェルが `execl()` や `execv()` に引き渡すものです。 Python では、引数は `sys.argv[1:]` の要素となります。 (`sys.argv[0]` は実行しようとしているプログラムの名前です。 引数解析に関しては、この要素はあまり重要ではありません。) Unix シェルでは、 ``語 (word)'' という用語も使います。

  場合によっては `sys.argv[1:]` 以外の引数リストを代入する方が 望ましいことがあるので、``引数'' は ```sys.argv[1:]` または `sys.argv[1:]` の代替として提供される別のリストの要素'' と読解するべきでしょう。

オプション (option)
  追加的な情報を与えるための引数で、プログラムの実行に対する教示や カスタマイズを行います。オプションには多様な文法が存在します; 伝統的な Unix における書法は - の後ろに一文字 が続くもので、例えば -x や -F です。 また、伝統的な Unix における書法では、複数のオプションを 一つの引数にまとめることができ、例えば -x -F は -xF と等価です。 GNU プロジェクトでは -- の後ろにハイフンで区切られた 語を続ける方法、例えば --file や --dry-run を導入しています。`optparse` ではこれら二種類のオプション書法 だけを提供しています。

  他に見られる他のオプション書法には以下のようなものがあります:

  - ハイフンの後ろに数個の文字が続くもので、例えば -pf 。 (このオプションは複数のオプションを一つにまとめたものとは *違います*。)
  - ハイフンの後ろに語が続くもので、例えば -file 。 (これは技術的には上の書式と同じですが、通常同じプログラム上で一緒に 使われることはありません。)
  - プラス記号の後ろに一文字、数個の文字、または語を続けたもので、例えば +f 、 +rgb 。
  - スラッシュ記号の後ろに一文字、数個の文字、または語を続けたもので、例えば /f 、 /file 。

  これらのオプション書法は `optparse` ではサポートされておらず、 将来にわたってサポートされることもありません。 (これらのオプション 書法のいずれかを本当に使いたいのなら、 OptionParser をサブクラス化 して、難解な部分を全て上書きしなければならないでしょう。しかし できればやめてください！ `optparse` は熟慮の上で伝統的な Unix/GNU 的書法を採っています; 最初の 3 つの書法は場所によっては非標準 ですし、最後の書法は MS-DOS/Windows かつ/または VMS をターゲットに しているときしか意味をなしません。)

オプション引数 (option argument)
  あるオプションの後ろに続く引数で、そのオプションに密接な関連を もち、オプションと同時に引数リストから取り出されます。 しばしば、オプション引数はオプションと一体の引数としてとりこまれる ことがあります。例えば以下:

          ["-f", "foo"]

  は以下の引数:

          ["-ffoo"]

  と等価なことがあります。(`optparse` ではこの書法をサポート しています)

  あるオプションは引数をとることがなく、またあるオプションは 常に引数をとります。多くの人々が ``オプションのオプション引数'' 機能を欲しています。これ、あるオプションについては引数 が存在するときだけ引数をとり、そうでないときには引数をとらない ようにするという機能です。この機能は引数解析をあいまいにするため、 議論の的となる点です: 例えば、もし -a がオプション引数を とり、-b がまったく別のオプションだとしたら、 -ab をどうやって解析すればいいのでしょうか？ `optparse` は今のところこの機能をサポートしていません。

固定引数 (positional argument)
  他のオプションが解析される、すなわち他のオプションとその引数が 解析されて引数リストから除去された後に引数リストに置かれている ものです。

必須のオプション (required option)
  コマンドラインで与えなければならないオプションです; ``必須なオプション'' という言葉は矛盾のある語法であり、通常は貧弱なユーザインタフェース デザインと考えられています。 `optparse` では必須オプションの 実装を妨げはしませんが、とりたてて実装の役に立つようにもなっていません。 `optparse` で必須オプションを実装する方法については ``拡張の例'' (6.20.5 節) を参照してください。

例えば、以下のような架空のコマンドラインを考えてみてください:

      prog -v --report /tmp/report.txt foo bar

-v と --report は両方ともオプションです。 --report が引数を一つとると仮定すると、 ``/tmp/report.txt'' はオプション引数です。 ``foo'' および ``bar'' は固定引数です。