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


12

私はこのシェルコマンドを持っています:

kill `cat -- $PIDFILE`

ここで何がダブルですか?なぜ使用しないのですか

kill `cat $PIDFILE`

回答:


20

--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

3
この動作(非常に一般的)はcat、シェルではなく受信プログラム(つまり)によって定義されることに注意してください。
dmckee ---元モデレーター子猫

--コマンドラインオプションの終わりを意味することを理解する独自のシェルスクリプトを記述するためのドキュメントやチュートリアルはありますか?getoptsやその他のテクニックを使用したものを見てきましたが、何も議論していません--
CMCDragonkai

3
@CMCDragonkai getopt(1)manページよりも先を見る必要はありません:「 '-'パラメータの後の各パラメータは、常に非オプションパラメータとして解釈されます」。
ミカエルアウノ

1

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.