web-dev-qa-db-ja.com

Unix / Linuxでオプション区切り文字の終わりとして二重ダッシュ(-)が導入されたのはいつ、どのようにですか?

historical UnixのShell/utilitiesも、「-」のような最近のものも4.4BSDダブルダッシュ(または2つの連続するハイフン)end of options delimiterとして。 FreeBSDを使用すると、たとえばrmmanpages2.2.1リリースで導入されたメモが表示されます=(1997)。ただし、これは1つのコマンドのドキュメントにすぎません。

最も古いGNU fileutilschangelog を見ると、これがわかります。1(少し変更):

Tue Aug 28 18:05:24 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)

* touch.c (main): Don't interpret first non-option arg as a   <---
  time if `--' is given (POSIX-required kludge).  
* touch.c: Add long-named options.
* Many files: Include <getopt.h> instead of "getopt.h" since
  getopt.h will be in the GNU /usr/include.
* install.c: Declare some functions.
* touch.c, getdate.y, posixtime.y, mktime.c: New files, from bin-src.
* posixtime.y: Move year from before time to after it (but
  before the seconds), for 1003.2 draft 10.

これはLinuxよりも古いものです。時間と同じ桁数を含む名前のファイルを作成したいという事実を明確に説明する必要があります 仕様 (8桁または10桁の10進数)-むしろ既存のファイルのタイムスタンプを指定するより...


  • posix.1オプションの区切り文字として二重ダッシュ(--)を導入したUnixシェルですか?
  • これはすべて、90年代初頭にtouchでファイル名に数字を使用したいと考えていたために始まり、その後、10年間に1つのユーティリティを段階的に使用しましたか?
  • 変更ログの活発なコメントは何ですか?
  • いつガイドライン1引数-は、オプションの終わりを示す区切り文字として受け入れられる必要があります。[...])がPOSIXに導入されました ユーティリティ構文

1. this とは対照的に、 long options をすべてのコマンドの使用法でグローバルに文書化しますが、これは無関係です。一方、区切り文字 appear への参照は[〜#〜] gnu [〜#〜]rm .c 2000年にコメントとして、2005年にエンドユーザーに exposed される前に(diagnose_leading_hyphen関数)。しかし、これはずっと後のことであり、非常に具体的な使用例についてのものです。

49
user44370

私の知る限り、オプション終了マーカーとしての--の使用は、System III Unix(1980)ではshおよびgetoptで始まります。

これによると Bourne Shellファミリの歴史 、Bourne ShellfirstVersion 7 Unix(1979)。しかし、set引数からオプションを分離する する方法がありませんでした。したがって、元のBourne Shellは次のことができます。

  • set -e-エラー終了モードをオンにする
  • set arg1 arg2 ...-位置パラメータ$1=arg1$2=arg2などを設定します。

しかし:set arg1 -e arg2は、$1=arg1$2=arg2、およびexit-on-errorをオンにします。おっと。

System III Unix(1980)はそのバグを修正し、getoptを導入しました。 getoptの-​​ man page によると:

NAME
   getopt - parse command options

SYNOPSIS
   set -- `getopt optstring $∗`

DESCRIPTION
   Getopt is used to break up options in command lines for easy parsing by
   Shell procedures, and to check  for  legal  options.   Optstring  is  a
   string  of  recognized  option letters (see getopt(3C)); if a letter is
   followed by a colon, the option is expected to have an  argument  which
   may or may not be separated from it by white space.  The special option
   -- is used to delimit the end of the options.  Getopt will place --  in
   the  arguments  at  the  end  of  the  options, or recognize it if used
   explicitly.  The Shell arguments ($1 $2 . . .) are reset so  that  each
   option  is  preceded  by a - and in its own Shell argument; each option
   argument is also in its own Shell argument.

私の知る限り、それはfirstが表示される場所です。

そこから、他のコマンドが--規則を採用して、引数の解析のあいまいさ(touchrmを使用した例など)を、ワイルドで標準のない日を通して解決したようです1980年代の。

これらの断片的な採用の一部は、POSIX.1(1988)で成文化されました。これは、「POSIXで必要なkludge」に関する変更ログのコメントの出典です。

しかし、POSIX.2(1992)までユーティリティ構文ガイドライン採用され、有名なガイドライン10が含まれています。

Guideline 10:    The argument "--" should be accepted as a delimiter
                 indicating the end of options.  Any following
                 arguments should be treated as operands, even if they
                 begin with the '-' character.  The "--" argument
                 should not be used as an option or as an operand.

そして、それが「kludge」であるということから普遍的な勧告になるところです。

38
wwoods