###
1 Terminology

引数 (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` ではサポートしておらず、 今後もサポートする予定はありません。これは故意によるものです: 最初の三つはどの環境の標準でもなく、最後の一つは VMS や MS-DOS, そして Windows を対象にしているときにしか意味をなさないからです。

オプション引数 (option argument)
  あるオプションの後ろに続く引数で、そのオプションに密接な関連を もち、オプションと同時に引数リストから取り出されます。 `optparse` では、オプション引数は以下のように別々の引数にできます:

      -f foo
      --file foo

  また、一つの引数中にも入れられます:

      -ffoo
      --file=foo

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

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

必須のオプション (required option)
  コマンドラインで与えなければならないオプションです; 「必須なオプション (required option)」という語は、英語では矛盾した言葉です。`optparse` では必須オプションの実装を妨げてはいませんが、とりたてて実装上役立つこともしていません。 `optparse` で必須オプションを実装する方法は、`optparse` ソースコード配布物中の`examples/required_1.py` や `examples/required_2.py` を参照してください。

例えば、下記のような架空のコマンドラインを考えてみましょう:

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

`"-v"` と`"-report"` はどちらもオプションです。 --report オプションが引数をとるとすれば、 `"/tmp/report.txt"` はオプションの引数です。 `"foo"`と`"bar"` は固定引数になります。