引数とオプションの意味の変更に関する混乱、公式の標準的な定義はありますか?


11

コマンドの構文に関して、オプションと引数が何であるかを理解する際に、紛らわしいバリエーションに遭遇しました。

たとえば、私は次のような定義に遭遇しました:

  • command -a -b -c d e f

    いくつかはとは異なり-a -b -c、それらをオプションまたはスイッチとd e f呼び、それらを引数と呼びます。

  • command -a -b -c d e f

    たとえばbashマニュアルのように、すべての-a -b -c d e f引数を呼び出して、$1 $2 $3 $4 $5 $6それぞれがスクリプトからアクセスできることを説明しています。

  • command -a b=c

    -aオプション、b引数、およびc値を呼び出すものもありますが、最初の2つの点のようにそれらを組み合わせて、すべての-a b c引数を呼び出す1つの方法があります。

これらの3つのバージョンは、さまざまな呼び出しの種類の例にすぎず、それらのすべてをリストする方法すらわかりませんが、固定の命名規則がないことに気付きました。

あるいは少なくとも、異なるランダムなソースに出くわしたので、私が知っている標準化された命名規則はありませんが、公式のLinuxおよびGNU関連サイトまたはマニュアルの間でさえ、この矛盾に会うことができました。

私が参照できる疑いのない公式の命名方式はありますか?


2番目の形式は、独自の観点から100%正しいです。コンテキストは非常に重要です。
オスカースコッグ

回答:


18

POSIX標準の「Utility Argument Syntax」セクションから適応:

utility_name [-a] [-b] [-c option_argument]
             [-d|-e] [-f[option_argument]] [operand...]

この例のユーティリティの名前はutility_nameです。その後に、optionsoption-arguments、およびoperandsが続きます

などの-文字と1文字または数字で構成される引数は、オプション(または、歴史的にはフラグ)とa呼ばれます。で示されているように、特定のオプションの後にはoption-argumentが続きます。最後のオプションとオプション引数に続く引数は、オペランドと呼ばれます[-c option_argument]

この規格では、「引数」も次のように定義されています。

シェルコマンド言語argvで、exec関数の1つによって作成された配列内の単一の文字列に相当するものとしてユーティリティに渡されるパラメーター。引数は、コマンド名に続くオプション、オプション引数、またはオペランドの1つです。


utility_nameコマンドラインのの後のすべてのものはユーティリティの引数であり、シェルスクリプトの場合はすべて位置パラメータに表示されます。オプション、オプション引数、およびオペランドという用語は、コマンドラインでのこれらの引数のより具体的な名前です。

「フラグ」と「スイッチ」は「オプション」の一般的な同義語です。

の場合

utility -a b=c
  • -aおよびb=cは引数です。
  • -aユーティリティがそれを認識した場合のオプションですlnユーティリティには-xオプション-xがないためln、厳密に言えば、ln -x診断メッセージをトリガーするオプションはありません)。
  • b=cオプション引数がある場合-aのオプションは、引数をとり、それ以外の場合は、オペランドです、
  • bそして、cしているではないオプション、オプション引数ではなく自分自身でオペランド。

上記の私のテキストからわかるように、ユーティリティの概要(ユーティリティのマニュアルに記載されている)から作業する方が、コマンドラインに入力された一般的なコマンドをデコードするよりも簡単でした。マニュアルには、どのオプションがオプション引数を取るか、どの引数がオペランドであるかなどが明確に記載されています。

c「価値」を呼ぶことは私見で完全に良いです。これは標準化されたものではありませんが、「cがに与えられる値bであると誤解することはほとんどありません。問題のユーティリティのコンテキストからは明らかです。

例えば

$ awk -v var="d" '...' data.in

これを知っている人なら誰でも変数にコマンドラインで値が割り当てられるawkという-v var="d"意味です。awkvard

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.