%20%E3%81%AF%E3%81%A9%E3%81%86%E3%81%84%E3%81%86%E6%84%8F%E5%91%B3%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
次のシェルコマンドがあります:
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:
最初--オプション引数ではない引数は、オプションの終了を示す区切り文字として受け入れられる必要があります。後続の引数は、'-' 文字で始まっていても、オペランドとして扱われる必要があります。