web-dev-qa-db-ja.com

コマンドラインインターフェイスの位置引数とオプション

次のコマンドラインプログラムmanage-id。次のことを行います。

manage-id list                       (list all usernames and user-ids)
manage-id show  <username>           (shows username's id)
manage-id clear <username>           (erases username's id) 
manage-id set   <username> <user-id> (sets usernames id)
manage-id find  <string>             (list usernames whose id contains <string>)

上記は、ユーザーインターフェイスを設計する1つの方法です。ここに別のものがあります:

manage-id --action list
manage-id --action show  --username <username>
manage-id --action clear --username <username>
manage-id --action set   --username <username> --id <user-id>
manage-id --action find  --search <string>

1つは「位置引数の設計」、2つ目は「コマンドラインオプションの設計」です。

いくつかの理由から、「コマンドラインオプションの設計」を好む傾向があります。

  • 引数は任意の順序で提示できます
  • オプション名は自己文書化されています
  • 引数の役割に関するあいまいさを削除します(たとえば、2つのコマンドmanage-id show johndoeおよびmanage-id find john、2番目の引数はさまざまな役割を果たします)。

一方、「コマンドラインオプションの設計」では、実際にはオプションではない「オプション」を使用します。

私の質問はこれです:Linuxコマンドラインプログラムに対して、これら2つのスタイルのいずれかを他のスタイルよりも優先する、推奨される(広く採用されている)スタイルの選択肢はありますか?

4
rlandster

あなたの質問は誤った二分法です。

私が見たほとんどの場所は両方を使用しています。必須パラメーターには位置ベースのパラメーター、オプションパラメーターにはオプションベースのパラメーター。ちょっと理にかなっていますね

15
Paul

スタイルは、最終的には必要なコントロールの複雑さによって決まります。オプションが1つしかない場合は、位置指定を使用してもかまいません。 2つある場合は、最も便利な方法が何であるかが議論の対象となります。そして誰のために?プログラマーですか?またはユーザーのために?

別のレベルがあります:サブコマンド。たとえば Gitコマンドラインリファレンス を見てください。

多数のコマンドラインユーティリティを作成する場合は、複雑な引数のコレクションをプログラムに簡単にフィードし、コードから簡単にアクセスできるようにする、ある種の引数パーサーを開発します。そして、ツールセット全体で共通の構文解析引数のスタイルをサポートします。

名前付き引数のデフォルト値をまったく同じにすることができます。したがって、それらはオプションにすることができます、それはあなた次第です。

使用法のページを必ずサポートしてください。無効なコマンドを入力すると、オプションを説明するページが表示されます。

2
Martin Maat

this SO answer が言語学的に信頼できるかどうかはわかりませんが、次のものを明確に区別しています。

arguments-コマンドの任意の部分
options-コマンドの動作を変更する情報
そして
parameters-追加情報(オプションとの違いがわからない)

0
abalter