このシェル コマンドの「--」(二重ダッシュ) はどういう意味ですか?

このシェル コマンドの「--」(二重ダッシュ) はどういう意味ですか?

次のシェルコマンドがあります:

kill `cat -- $PIDFILE`

ここで二重の意味は?なぜ単に

kill `cat $PIDFILE`

答え1

は、その後に続くものをコマンド ライン オプションとして解析しないように--指示します。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

答え2

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

関連情報