###
6.20.1.2 オプションはどう使うのでしょうか？

オプションはプログラムの実行をチューニングしたり、カスタマイズ したりするための補足的な情報を与えるために使われます。 補足すると、オプションは通常 選択可能 (optional) となっています。 プログラムはいかなるオプションが指定されていなくても、きちんと 動作できなくてはなりません。(Unix や GNU ツールセットから プログラムをランダムに取り出してみてください。プログラムは オプション無しで動作して、意味のある結果になるでしょう？ 私の知っている例外は find 、 tar 、 dd といったプログラムです -- これらは全て 変種のはみだし者で、インタフェースが非標準で混乱をまねくものだと 批判されてきました。)

大多数の人々が、プログラムに ``必須オプション'' を持たせたいと 望んでいます。しかし考えてみてください。もしオプションが必須だと いうのなら、そのオプションは オプション:選択可能項目 など ではありません！ プログラムがうまく動作するために絶対的に必要とする 情報があるとするなら、固定引数を使うべきです。(とはいえ、 どうしても ``必須オプション'' をプログラムに組み込みたいというのなら、 `optparse` を使った実装方法については ``拡張の例'' ( 6.20.5 節) を読んでください。

ファイルをコピーする地味なユーティリティ cp について 考えてみましょう。ファイルをコピーしようと試みるときに、コピー先 や少なくとも一つのコピー元を指定しなければ、このコマンドは意味を なしません。従って、cp は引数無しで実行すると失敗します。 しかしながら、このコマンドは、拡張性のある便利な書法を持っており、 オプションに全然頼っていません:

    $ cp SOURCE DEST
    $ cp SOURCE ... DEST-DIR

You can get pretty far with just that. ほとんどの cp の実装では、ファイルをどのようにしてコピー するかを的確に微調整するためのオプション: 例えばファイルモードや最終更新時刻を変更しないようにしたり、 シンボリックリンクの追跡を避けたり、既存のファイルをぶちこわし (clobber) にする前に同意を求めたり、などを一そろい提供しています。 しかし、これらのオプションはいずれも、 ファイルを別のファイルにコピーしたり N 個のファイルを他のディレクトリ にコピーしたりするといった、cp の主要な役割を混乱 させることはありません。