`rm` を実行するときは、体系的に `--` を使用する必要がありますか?

`rm` を実行するときは、体系的に `--` を使用する必要がありますか?

rmの推奨使用法に関する質問と--

2つのファイルを作成したとします-ixxこれらを

$ rm *

次のような結果になります:

rm: remove regular file `xx'? n

そして、Linux で、名前が「-」のようにハイフンだけのファイルを削除するにはどうすればいいですか?他にも、これを解決する方法は次のとおりです。

$ rm -- *

明らかに、名前を呼んだり、それに似たことをしたりすると、問題はさらに悪化する可能性があります-rf

私の質問は次のとおりです。

不快な驚きや悪用を避けるために、拡張可能なものの前には必ず--inコマンドを使用する必要がありますか?rm

私がこれを尋ねる理由は、しばらく前にこのrm落とし穴を知り、その後忘れていたのですが、最近チームメイトが再びそれを持ち込んだからです。しかし、その意味での推奨事項は見たことがなく、非常にリスクが高いため、もっと積極的に使用すべきではないでしょうか。 を使用--するときは常に、何らかのスクリプトとコンソール パターンを使用する必要がありますかrm(おそらく他のコマンドも)?

答え1

理想的な世界では、はい、体系的に を使用するべきだと思います--。しかし、私たちは皆、rmを体系的に入力せずにコマンドを使用することを学習しました--。また、 を入力すると 3 回余分にキーを打つ必要があるため、それが実現するとは思えません。さらに、--オプションを終了する規則は常に存在していたわけではありません (多くの人が の使用方法を学習したときにそれを学ばなかったのはそのためですrm)。

そうは言っても、rmシェル スクリプトで (およびその他のコマンド)を使用する場合は、必ず常に防御的にプログラミングする必要があります。たとえば、次のようになります。

rm "$1"    # Remove the file named in the first command line argument

は安全ではないので、そうすべきですrm -- "$1"。しかし、

rm "/var/spool/foo/$thatfile"

は安全です。なぜなら、 の内容によってその引数が誤解される$thatfile可能性がないからですrm

特定の例 ( ) では、安全な回避策としてrm *通常は を使用すると思います。rm ./*

関連情報