パラメータをコンソールアプリケーションに渡すさまざまな方法

パラメータをコンソールアプリケーションに渡すさまざまな方法

コンソールアプリケーションが次の方法でパラメータを取得するのはなぜですか?

a) one dash (myapp -arg1 123; ls -al)
b) two dashes (myapp --arg1 123; git push origin master --force)
c) without dashes at all (myapp 123; man ls)
d) without dashes but with the equal sign (myapp arg1=123; dd if=/dev/zero)

標準合意書はありませんか?標準のLinuxアプリケーションでも、a)、b)、d)状況は同時に存在します。そして、いつ-helpを使うべきか、いつ--helpを使うべきか覚えにくいです。

答え1

ダッシュは、次のことを示すために使用されます。オプション、これはコマンドの動作を修正します。ダッシュのない引数は、コマンドのデフォルト引数(通常はファイル名)を表します。

単一のハイフンは通常、1 文字だけを含むオプションを表します。これらのいくつかのオプションは一緒にグループ化されてls -a -l短縮できますls -al。これは、ほとんどの初期 Unix コマンドの標準ルールでした。

二重ハイフンは完全な単語のオプションを紹介します。このルールは、上記のグループ化と区別するために必要です。このスタイルのオプションは、GNUバージョンのユーティリティで人気を集めました。なぜなら、単一の文字を使用してニーモニックにするにはあまりにも多くの機能があるからです。

オプションに独自のパラメータが必要な場合があります。スタイルはさまざまです。一部のコマンドは-o parameter、一部は使用-oparameter、一部は使用--option=parameter、一部は複数の形式を受け入れます。

独自の引数スタイルを作成するいくつかのコマンドもあります。これは通常、パラメータルールが合意される前の非常に古いコマンドです。これの例には、とtarがありますddfindルールを作成する前に、フルワードオプションを使用した古いコマンドであることも珍しくあります--。要件が一般的なパラダイムに合わないため、その引数は事実上独自の言語ですcommand -options parameters

コマンド間の違いのもう1つの理由は、Unixに元の引数解析ライブラリ機能がなかったためです。関数getoptは、寿命が終わるまでgetopts生成されません。これらのライブラリでは、基本的に一般的な慣行に従う必要があります。しかし、古いプログラムは一時的な引数の解析を行い、プログラマごとに異なる決定をします。

答え2

@Barmarは正確ですが、いくつかの情報がありません。これが起こる理由は、プログラムコードが完全に書き込まれる方法、より具体的にはパラメータを解析するために使用される方法です。

詳細を説明する前に、いくつかの用語を明確にしたいと思います。まず、「オプション」と呼ぶのも実際にはパラメータです。実際にコマンドラインに入力するすべては引数です(プログラム名を含む)。これらのパラメータは通常、配列(argvCでは配列と呼ばれます)に格納されます。その後、プログラムはこれらのパラメータを解析し、それに応じてどのように動作するかを選択します。パラメータは通常、次の3つの形式のいずれかを取ります。

  1. フラグ(引数を使用せずに動作をオンまたはオフにするだけ)
  2. スイッチ(パラメータ許容、パラメータに応じた動作修正)
  3. パラメータ(動作を修正するためのものではない純粋データ)

12しばしば呼び出され、プログラムのOPTIONS動作を変更するために使用されますが、2つの機能は異なります(Barmarも述べたように)。 Cのgetoptライブラリは、実際にはこれに関して多くの柔軟性を提供します。慣例は、ハイフンが前にある単一文字または2つのハイフンが前に続く完全な単語としてオプションを指定することですが、で書かれたプログラムはgetopt実際に次のいずれかが同等であることを許可します(インデックスが提供helpされると仮定h):

-h、、、--h--help

ただし、-help実際には許可されていませんgetopt。したがって、ツールがその使用フラグを使用している場合は、そのツールがライブラリとして作成されていない-helpことを確認できます。単一のハイフンはオプションの組み合わせリストを表すものとして解釈されるので、と解釈されるからgetoptです。getopt-help-h -e -l -p

また、オプションが引数(しばしば「optargs」と呼ばれる)を取る場合は、さまざまな方法でこれを指定できます。以下 - 仮定された指数optoこれoptにはoptargが必要です。1 - また同じです:

-oParameter、、、、-o Parameter--opt=Parameter--opt Parameter

ライブラリは現在広く使用されている標準ですが、getoptそれを先行する多くのツール(例tar:。tar -xjftar xjf


長い話を短くgetoptが常に存在するわけではないので、プログラマは独自の方法で引数を解析する必要があります。ただし、最新のツールでは通常これを使用するため、動作は正常で予測可能です。


1 optarg を許可するが許可しないオプションの文書化されていない機能があります。必要一つ。オプションのoptargsはあらゆる種類の迷惑なことを引き起こす可能性があり、オプションを指定するより一般的な方法のいくつかが無効になる可能性があります(あいまいなため)。幸い、オプションの引数を使用することはまれです。

答え3

オプションはダッシュで始まり、通常は文字であり、複数のオプションを指定できます。

ls -l -h 
or
ls -lh

オプションは2つのダッシュで始まり、通常は単語で始まり、複数のオプションは許可されません。

ls --list --human

関連情報