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