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

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

プロンプトなしで強制rm -f file1的に削除されることを知っています。file1

rm -i file1また、削除する前にメッセージが表示されることもわかります。file1

今すぐ実行すると、メッセージも表示されず、強制rm -if file1的に削除されます。file1

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

それでは、コマンドオプションを結合するときに最後のオプションが優先されますか? likeは優先権を持ちますが、rmはrm -if優先権を持ちます。-f-fi-i

たとえば、コマンドを話すとか、でもかまいませんlsls -latRls -Rtal

したがって、このように競合するコマンドオプションがある場合にのみ重要だと思いますrm -if。これは正しいですか?

ベストアンサー1

オプションと一緒に使用すると、rm最初のオプションは無視されます。この内容は次のように記録されます。-i-fPOSIX基準:

    -f
       Do not prompt for confirmation. Do not write diagnostic messages or modify
       the exit status in the case of nonexistent operands. Any previous
       occurrences of the -i option shall be ignored.
    -i
       Prompt for confirmation as described previously. Any previous occurrences
       of the -f option shall be ignored.

そしてGNUinfoページ:

‘-f’
‘--force’

    Ignore nonexistent files and missing operands, and never prompt the user.
    Ignore any previous --interactive (-i) option.

‘-i’
    Prompt whether to remove each file. If the response is not affirmative, the
    file is skipped. Ignore any previous --force (-f) option.

後ろで何が起こるのか見てみましょう:

rmgetopt(3)オプションに特化しますgetopt_long。この関数は、**argvコマンドライン()のオプションパラメータを示す順序で処理します。

getopt() が繰り返し呼び出されると、各オプション要素の各オプション文字が連続して返されます。

この関数は通常、すべてのオプションが処理されるまでループで呼び出されます。この機能の観点から、オプションは順次処理されます。 ただし、実際に発生する状況はアプリケーションによって異なります。アプリケーションロジックは、競合するオプションを検出するか、それを上書きするか、エラーを表示するかを選択できるためです。rmiとオプションの場合は、fお互いを完全に覆います。からrm.c

234         case 'f':
235           x.interactive = RMI_NEVER;
236           x.ignore_missing_files = true;
237           prompt_once = false;
238           break;
239 
240         case 'i':
241           x.interactive = RMI_ALWAYS;
242           x.ignore_missing_files = false;
243           prompt_once = false;
244           break;

どちらのオプションも同じ変数を設定し、これらの変数の状態はコマンドラインの最後のオプションになります。効果はPOSIX規格とrm文書に準拠しています。

おすすめ記事