web-dev-qa-db-ja.com

「非オプション引数」とは何ですか?

_info who_を理解しようとしていますが、"非オプション引数"という用語で完全に失敗します。誰かがこの言葉を簡単な言葉や例で私に説明してくれませんか?

[〜#〜] update [〜#〜]:from 'info who':

非オプション引数なしを指定した場合、 `who 'は現在ログオンしている各ユーザーについて、ログイン名、端末回線、ログイン時間、リモートホスト名またはXディスプレイの情報を出力します。

1つの非オプション引数が指定されている場合、_who' uses that instead of a default system-maintained file (often_/var/run/utmp 'または_/etc/utmp') as the name of the file containing the record of users logged on._/var/log/wtmp'は、通常、 `who 'の引数として指定されます以前にログオンしたユーザーを確認します。

2つの非オプション引数を指定した場合、who' prints only the entry for the user running it (determined from its standard input), preceded by the hostname. Traditionally, the two arguments given are am i 'となります。

私は議論とオプションの違いを知っていました[考えました]が、これは[再び]多くの問題を引き起こします。

9
erch

用語は完全に固定されているわけではないため、ドキュメントが異なれば異なる用語が使用され、さらに悪いことに、同じ用語が異なる意味で使用されます。読んでいるmanページの用語は一般的なものです。 [〜#〜] posix [〜#〜] 標準で使用されているものです。簡単に言えば、コマンドの後の各Wordは引数であり、-で始まる引数はオプションです。

引数

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

オペランド

コマンドの引数であり、通常、その処理を完了するために必要なユーティリティに情報を提供するオブジェクトとして使用されます。オペランドは通常、コマンドラインのオプションに従います。

オプション

ユーティリティのデフォルトの動作の変更を指定するために一般的に使用されるコマンドへの引数。

「ユーティリティ」は一般に「コマンド」と呼ばれるものです(標準では、Wordユーティリティを使用して、引数または複合シェルコマンドを含む「コマンド」の意味のあいまいさを回避しています) 。

ほとんどのコマンドは 標準ユーティリティの引数構文 に従います。ここで、オプションは-(ダッシュマイナス)で始まります。したがって、オプションは-a(短いオプション、POSIXガイドラインに従います)または--all(長いオプション、GNUからの拡張)のようなものです。非オプション引数は、-で始まらない、または-のみで構成される引数です(whoはリテラルファイル名として扱われますが、多くのコマンドは意味として扱います)標準入力または標準出力)。

さらに、一部のオプション自体に引数があります。この引数は、いくつかの方法で渡すことができます。

  • 1文字オプションの場合、ユーティリティへの同じ引数で:foo -obarbarは、1文字オプション-oへの引数です。
  • GNU=長い引数構文では、同じ引数で、等号(foo --option=bar)で区切られています。
  • 別の引数:foo -o barまたはfoo --option bar。オプション-o(または--option)が引数を取る場合、barはオプション-o(または--option)の引数です。 -o(または--option)が引数を取らない場合、barがオペランドになります。

これはより長い例です:

tail -n 3 myfile

-nはオプション、3はオプション-nへの引数、myfileはオペランドです。

用語が異なるため、POSIXがオペランドを使用する意味で引数を使用するドキュメントが見つかる場合があります。しかし、「非オプション引数」は、この意味でどちらの用語よりも一般的です。

問題は、オプション(またはスイッチやフラグなど、呼び出したいものは何でも)も引数としてカウントされることです。実際、コマンド名自体の後に指定したものはすべて、コマンドの引数を構成します(リダイレクトなど、シェルで使用される構成を除く)。

あなたのプログラム/スクリプトはすべてを引数として受け取り、オプション引数(オプションである引数)を他のものから分離する必要があります...あなたはそれを推測しました!... 非オプション引数

つまり、情報ページが言っているのは、whoがオプションではない引数を受け取った場合、デフォルト情報の代わりに、ログイン情報を調べると見なされるということです。

5
Joseph R.

私は今でもフレージングが下手だと思っており、電話を切らないようにしています。彼らが言おうとしているのは、プロトタイプ文に次のように含まれているということです。

 `who' [OPTION] [FILE] [am i]

したがって、「オプションではない引数が指定されていない場合」と言うとき、彼らは[FILE]および[am i]

「オプションでない引数が1つ与えられた場合」、つまり[FILE]の場合、[FILE]場所、/var/run/utmp

最後に、このコメントの場合、「オプションではない引数が2つ与えられた場合」、つまり[am i]次に、コマンドを実行したばかりのユーザーに関する情報を求めています。

$ who am i
saml     pts/5        2013-10-18 16:29 (:0.0)

-or-

$ who mom likes
saml     pts/5        2013-10-18 16:29 (:0.0)

説明は適切ですが、「非オプション引数なし」という用語を使用することで、間違いなく混乱しています。

著者の心には、これらはオプションです:

  -a, --all         same as -b -d --login -p -r -t -T -u
  -b, --boot        time of last system boot
  -d, --dead        print dead processes
  -H, --heading     print line of column headings
  -l, --login       print system login processes
      --lookup      attempt to canonicalize hostnames via DNS

  ....

そして[FILE]および[am i]および[mom likes]はオプションではありません。しかし、これらは[〜#〜] all [〜#〜]オプションであるため、違いはこのツールのみに限定されます。

1
slm