--
ファイル名がダッシュで始まるときに必要な「オプションの終わり」信号として(デュアルダッシュ)を許可するいくつかのユーティリティがあります。
$ echo "Hello World!" >-file
$ cat -- -file
Hello World!
$ cat -file # cat - -file fails in the same way.
cat: invalid option -- 'f'
Try 'cat --help' for more information.
ただし、これらのユーティリティの一部は、マニュアルページにそのようなオプションを表示しません。
これman
ページはcat
--
すべてのオペレーティングシステムでパラメータの使用(または有効性)は文書化されていません。これが激しいUnix-Linux戦争を意味するわけではありません、これは妥当で有用な関心事だと思います。
cat
、、(そして他の多くの人も)私が見つけることができるマニュアルページにそのようなオプションを文書化していないと確信していますmv
。ed
これは./-file
より移植性の高い解決策です--
。たとえば、source
(ドット)コマンド(で書かれている.
)は(通常)引数をうまく処理しません--
。
$ echo 'echo "Hello World!"' >-file
$ . ./-file
Hello World!
$ . -file
ksh: .: -f: unknown option
ksh: .: -i: unknown option
ksh: .: -l: unknown option
ksh: .: -e: unknown option
Usage: . [ options ] name [arg ...]
$ . -- -file # works in bash. Not in dash, ksh, zsh.
ksh: .: -file: cannot open [No such file or directory]
ベストアンサー1
これは、すべてのユーティリティのPOSIX要件です。POSIX 12.02章、詳細についてはガイド10を参照してください。
最初-オプション引数ではない引数は、オプションの終わりを表す区切り文字として受け入れる必要があります。後続の引数は、
'-'
文字で始まってもオペランドとして処理する必要があります。
POSIXは、すべてのユーティリティがこれらのガイドラインに従うことをお勧めします。
いくつかの例外があります。いいねecho
(読み込みオプション)。そして指示に従わない特別な組み込み関数(例えばbreak
、dot
などexec
):
いくつかの特別な組み込み関数は、XBDユーティリティの構文ガイドラインに準拠していると説明されています。それ以外の場合、ユーティリティ記述の基本要件は、破棄する最初の引数として「--」を識別することは適用されず、準拠アプリケーションはその引数を使用しないでください。
目的は、POSIXのマニュアルページの指示に従わないすべてのコマンドを文書化することです。POSIX 12.02章3番目の段落:
一部の標準ユーティリティは、これらのガイドラインをすべて満たしていません。そのような場合、偏差はオプションセクションで説明されています。
〜のようにPOSIX のcat
マニュアルページ記録のOPTIONSセクションには偏見はなく、--
有効な主張として受け入れられると予想されます。
指示に従わない(バグのある)実装がまだあるかもしれません。
特に、ほとんどのGNUコアユーティリティはこのガイドに従います。