compgen
コマンドで--
が使用されているのを見ました。
例えば:
compgen -W "foo bar baz" -- b
そこの--
の意味は何ですか?
より正確には、ほとんどのbash組み込みコマンドおよび他の多くのコマンドでダブルダッシュ(--
)を使用してコマンドオプションの終わりを示し、その後に位置パラメーターのみが受け入れられます。
使用例:ファイルに文字列-v
をgrepしたいとします。通常、-v
は、一致する意味を逆にするオプションと見なされます(一致しない行のみを表示)が、--
次のように、文字列-v
をgrepできます。
grep -- -v file
man bash
では、Shell Builtin Commandsセクションで読み取ることができます:
特に明記されていない限り、
-
が前に付いたオプションを受け入れるものとしてこのセクションに記載されている各組み込みコマンドは、--
オプションの終わりを示すを受け入れます。
:
、true
、false
、およびtest
ビルトインはオプションを受け入れず、--
を特別に扱いません。exit
、logout
、break
、continue
、let
、およびshift
ビルトインは、次で始まる引数を受け入れて処理します-
を必要とせずに--
。引数を受け入れるがオプションを受け入れるように指定されていない他の組み込み関数は、-
で始まる引数を無効なオプションとして解釈し、この解釈を防ぐために--
が必要です。
echo
は、オプションの終わりを意味する--
を解釈しないことに注意してください。
これは、パラメーター(オプション)リストの終わりを示します。
POSIX.1-2017
12.2ユーティリティ構文ガイドライン
ガイドライン10:
オプション引数ではない最初の
--
引数は、オプションの終わりを示す区切り文字として受け入れる必要があります。以降の引数は、 '-
'文字で始まっていても、オペランドとして扱う必要があります。
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02