回答:
--
はcat
、コマンドラインオプションとしてその後に続くものを解析しようとしないように指示します。
例として、変数$PIDFILE
がとして定義された場合、2つのケースで何が起こるか考えてくださいPIDFILE="--version"
。私のマシンでは、次の結果が得られます。
$ cat $PIDFILE
cat (GNU coreutils) 6.10
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Torbjorn Granlund and Richard M. Stallman.
$ cat -- $PIDFILE
cat: --version: No such file or directory
--
コマンドラインオプションの終わりを意味することを理解する独自のシェルスクリプトを記述するためのドキュメントやチュートリアルはありますか?getoptsやその他のテクニックを使用したものを見てきましたが、何も議論していません--
。
getopt(1)
manページよりも先を見る必要はありません:「 '-'パラメータの後の各パラメータは、常に非オプションパラメータとして解釈されます」。
POSIX.1-2017
POSIXでは、http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02でも指定しています。
12.2ユーティリティ構文のガイドライン
ガイドライン10:
オプション引数ではない最初の-引数は、オプションの終わりを示す区切り文字として受け入れられるべきです。次の引数は、「-」文字で始まる場合でもオペランドとして扱われる必要があります。
参照:https : //unix.stackexchange.com/questions/11376/what-does-double-dash-mean-also-known-as-bare-double-dash
cat
、シェルではなく受信プログラム(つまり)によって定義されることに注意してください。