名前が「-」記号で始まるファイルを作成する方法

名前が「-」記号で始まるファイルを作成する方法

Linux ターミナルで コマンドを使用して、たとえば というtouch記号で始まる名前のファイルを作成したいと思います。--attempt

-特別な性格であるという事実をどう克服すればいいのでしょうか?

たとえば、 という名前のファイルを作成したい場合#attempt、次のように書くだけではだめです。touch #attempt

代わりに と書く必要がありますtouch \#attemptが、その-場合、それを使用しても\まだうまく動作しません。

答え1

ふたつのやり方:

-最初の文字から離す

touch ./-foo

または--スイッチ終了マーカーを使用する

touch -- -foo

答え2

touch \#attemptハッシュ記号はシェルにとって特別なので機能します。同様に、括弧やアンパサンドなどが含まれるファイル名の場合はtouch \(foo\)、 、 またはのようなものが必要になります。touch 'this & that'

しかし、ダッシュをエスケープしても特別なものではないので役に立ちませんシェルにではなく、シェルによって起動されたユーティリティです。シェルのコマンド ラインを実行することは、touch \-fooを実行するのとまったく同じでありtouch -foo、いずれにしてもtouch単一の引数を取得します-foo

したがって、逃げるのではなく、何か他のことが必要になります。

プログラムにコマンド引数を(可能な)オプションとして解釈しないように指示する標準的な方法は、引数をオプションの後に挿入することです。たとえば、これはというファイルでオプション とともに--実行されます。rm-f-r

rm -f -- -r

(そしてrm -- --というファイルが削除されます--。)

あるいは、ダッシュがファイル名の最初の文字にならないようにすることで、通常は を先頭に追加することで、この問題を回避できます./。つまり、 というファイルが削除されます-rf

rm ./-rf

関連情報