Bashはに関してはやや非標準的な方法で動作し-
ます。
POSIX言う:
ガイドライン10:オプション引数ではない
最初の--
引数は、オプションの終わりを示す区切り文字として受け入れられるべきです。次の引数は、-
文字で始まる場合でもオペランドとして扱われる必要があります。
[…]
ガイドライン13:
読み取りまたは書き込み用に開くファイルを表すためにオペランドを使用するユーティリティの場合、-
オペランドは、標準入力(またはコンテキストから出力ファイルが指定されていることが明らかな場合は標準出力)のみを意味するために使用する必要がありますという名前のファイル-
。
そして
これらのガイドラインに準拠しているとPOSIX.1-2017のShell and Utilitiesボリュームで説明されているユーティリティが、-
標準入力または出力を意味するオペランドを受け入れるか、受け入れないことが必要な場合、この使用法はOPERANDSセクションで説明されています。それ以外の場合、そのようなユーティリティがオペランドを使用してファイルを表す場合、オペランド-
が標準入力(または標準出力)を表すか、という名前のファイルを表すかは実装で定義されます-
。
しかし、その後man 1 bash
読みます:
--
オプションと無効更にオプション処理の終了を知らせます。以降の引数--
は、ファイル名と引数として扱われます。の引数は-
と同等--
です。
したがって、Bashにとって-
は、標準入力でもファイルでもないため、多少非標準です。
今、あなたの特定のケース:
curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -
私は疑う、このコマンドの作者が実現しないかもしれない-
と同等である--
。この場合には 私は疑う著者が確認したかったbash
、標準入力から読み込みます、彼らは期待-
ガイドライン13に係る作業に。
ただし、ガイドラインに従って動作したとしても、標準入力がパイプである場合に検出され、それに応じて動作する-
ためbash
(指定されていない場合-c
など)、ここでは不要です。
それでも-
、ガイドラインに従っては動作しません--
。--
その後は引数がないため、ここではまだ不要です。
私の意見では、最後-
は何も変わりません。コマンドはそれなしでも機能します。
どのように確認するに--
及び-
、一般的に有用であることができ、以下の例を検討します。
cat
私のKubuntuの中で両方のガイドラインに従うと、私はの有用性を実証するためにそれを使用します-
と--
。
foo
exist という名前のファイルを作成します。これにより、ファイルが印刷されます。
cat foo
--help
exist という名前のファイルを作成します。これはファイルを印刷しません:
cat --help
しかし、これは次の名前のファイルを印刷します--help
:
cat -- --help
これにより、名前が付けられたファイル--help
が標準入力からのものを連結します。
cat -- --help -
確かにファイルとして解釈されるものを--
常に渡すことができるので、本当に必要ないようです./--help
。しかし、考慮してください
cat "$file"
変数の内容が事前にわからない場合。./
絶対パスであり、./
破損する可能性があるため、単に先頭に追加することはできません。一方、それは名前が付けられたファイルであるかもしれ--help
ません(なぜですか?)。この場合--
、非常に便利です。これは、はるかに堅牢なコマンドです。
cat -- "$file"