GNU/Linux >> Linux の 問題 >  >> Linux

コマンドライン引数のような名前のファイルを作成するには?

次のようにコマンドを呼び出します:

mkdir -- -a

-- その後でオプションが終了することを意味するため、 -a mkdir のオプションとしてではなく、文字どおりに解釈されます .この構文は mkdir だけでなく、 、ただし、echo を除くすべての POSIX 準拠ユーティリティ および test .仕様書より:

<ブロック引用>

引数 -- は、オプションの終わりを示す区切り文字として受け入れられる必要があります。後続の引数は、'-' 文字で始まっていても、オペランドとして扱われるべきです。 -- 引数をオプションまたはオペランドとして使用しないでください。

-- の使用 ファイル名を扱い、それらがコマンドを壊さないようにしたいほとんどすべてのアクションにセーフガードとして推奨されます。ループ内でファイルを移動する場合、次のように呼び出したい場合があります。そのため、-i というファイル オプションとして正しく解析されません:

mv -- "$f" new-"$f"

合理的なプログラムで動作する最も簡単な方法は、- の前に相対パス名を使用することです。 、例えばmkdir ./-a -a というディレクトリを作成します 現在の作業ディレクトリ内。

この「トリック」を使用する最も一般的な例は、ダッシュで始まるファイルを削除する場合です。したがって、rm ./-a を実行できます。 .


mkdir '-a'の理由 、または mkdir \-a これらの方法 (引用符またはバックスラッシュを使用) の両方が シェル を防ぐために使用されているため、機能しません (おそらく bash ) それらに特別な意味を与えることから。 -a以降 とにかく、シェルにとって特別なことを意味するわけではありません。これらは、mkdir に渡される方法には影響しません。 .

mkdirまで シェルから引数のリストを受け取り、それらを引用符で囲んだかどうか、またはバックスラッシュがあったかどうかを判断できません。 1 つの引数 -a が表示されるだけです .そのため、-- が必要です。 他の回答で説明されているように。


Linux
  1. コマンドラインを使用してMySQLでデータベースを作成する方法

  2. コマンドライン引数をシェルスクリプトに渡す方法は?

  3. コマンドへの引数としてテキストファイルの各行を解析する方法は?

  1. コマンドラインを使用してLinuxでtar.gzファイルを抽出する方法

  2. 「dd」コマンドを使用して Linux でスパース ファイルを作成する方法

  3. Linuxでjar内のファイルをコマンドラインに置き換える方法は?

  1. コマンドラインからアクセス許可と所有者を変更する方法

  2. コマンドラインから特定のサイズのファイルを作成するにはどうすればよいですか?

  3. コマンドライン引数として渡されたパスワードを非表示にする方法は?