注:私の答えはありません OPの場合に有効な、そして唯一の大会は、まさにちょうどという名前のファイルの場合には、以下のといない言及した以下のツールに適用される-
標準からの読み取りを指定することもしばしばである(ダッシュ)、特殊なケース入力が期待されます。受け入れられた答えを参照してください。
回答の検索中につまずくかもしれない他のケースのための有用な情報が含まれているので、ここに残してください。
ダブルダッシュ!
--
最後の引数を示すには、標準の二重ダッシュ()規則を使用します。
less -- -FILENAME
例
$ echo "meh" > -badname
$ less -badname
Number is required after -b
$ less -- -badname # GREAT SUCCESS!
ふぁっぁっと?
この--
引数は、シェルユーティリティおよびコマンドラインツールのほとんどの実装でサポートされている規則に由来するものであり、ほとんどのシェルは、CLIツールを実装するときに従う必要があることを明らかに主張します。
Open Groupが推奨
OpenGroup は、基本仕様のUtility description defaults(v6)セクションでも言及しています。
デフォルトの動作:[...]オプションを受け入れないが、オペランドを受け入れる標準ユーティリティは、破棄される最初の引数として「-」を認識します。
「-」を認識するための要件は、適合アプリケーションが、実装が拡張として提供する可能性がある任意のオプションからオペランドを保護する方法を必要とするためです。たとえば、標準ユーティリティfooがオプションを使用しないものとしてリストされ、アプリケーションがパス名に先頭にハイフンを付ける必要がある場合、次のように安全に実行できます。
foo -- -myfile
-mを拡張子として使用することによる問題を回避します。
また、ユーティリティ構文ガイドライン(v7)では:
ガイドライン10:
オプション引数ではない最初の-引数は、オプションの終わりを示す区切り文字として受け入れられるべきです。後続の引数は、 '-'文字で始まる場合でもオペランドとして扱われる必要があります。
Bashが推奨
ここでは、bashマニュアルからの抜粋、それをサポートするビルトインについて:
特に断りのない限り、このセクションに記載されている各組み込みコマンドは、オプションの終わりを示すために-accepts-で始まるオプションを受け入れます。
:、true、false、およびtestビルトインは、オプションを受け入れず、特に扱いません。exit、logout、break、continue、let、およびshift組み込み関数は、-を必要とせずに-で始まる引数を受け入れて処理します。引数を受け入れるが、オプションの受け入れとして指定されていない他の組み込み関数は、-で始まる引数を無効なオプションとして解釈し、この解釈を防ぐために-を要求します。
エコーは解釈しないことに注意してください-オプションの終わりを意味します。
追加の読書