web-dev-qa-db-ja.com

コマンドオプションの優先順位?

rm -f file1は、プロンプトを表示せずにfile1を強制的に削除することを知っています。

また、rm -i file1を削除する前にfile1が最初にメッセージを表示することも知っています

rm -if file1を実行すると、プロンプトも表示されずにfile1も強制的に削除されます。

ただし、rm -fi file1を実行すると、file1を削除する前にメッセージが表示されます。

それで、コマンドオプションを組み合わせるとき、最後のものが優先されるというのは本当ですか? rm -ifのように、-fが優先されますが、rm -fiの場合は-iが優先されます。

たとえば、lsコマンドは、ls -latRls -Rtalのどちらを言ってもかまいません。

ですから、rm -ifのような矛盾するコマンドオプションがある場合にのみ問題になると思いますが、それは正しいですか。

21
alkabary

フラグには「優先順位」はありません。各プログラムはフラグを希望どおりに処理します。ほとんどの場合、すべてのフラグを収集して競合をチェックするために何らかの努力をします。標準ツール(参照されたrm(1)など)の場合、関連する標準が何かを義務付けている場合があります(ただし、特定のバージョンは、標準/それらのために特別にテストされません)。

プログラムを作成するプログラマにとって、引数(フラグなど)を左から右に厳密に検討するのが最も簡単です。ライブラリを使用してフラグを処理する場合(getopt(3)のように、いくつかのバージョンが浮かんでいます)、プログラマはおそらく最も簡単で自然なことを行います。プログラマーは人間であり、人々は怠惰です(または、少なくとも組み合わせの爆発を通して考えるのが好きではありません)。

7
vonbrand