Command-Line
命令選項的優先級?
我知道這將在不提示我的情況下
rm -f file1
強制刪除。file1
我也知道
rm -i file1
刪除前會先提示我file1
現在,如果您執行
rm -if file1
,這也將file1
在不提示我的情況下強制刪除。但是,如果你執行
rm -fi file1
,它會在刪除之前提示我file1
。那麼當組合命令選項時,最後一個將優先是真的嗎?like
rm -if
, then-f
將優先,但 rm-fi
then the-i
將優先。例如
ls
命令,你說ls -latR
or都沒關係ls -Rtal
。所以我想只有當你有矛盾的命令選項時才重要
rm -if
,對嗎?
當
rm
同時使用-i
and-f
選項時,第一個將被忽略。這記錄在POSIX標準中:-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.
以及在 GNU
info
頁面中:‘-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.
讓我們看看幕後發生了什麼:
rm
處理它的選項getopt(3)
,特別是getopt_long
. 此函式將按出現順序處理命令行 (**argv
) 中的選項參數:如果 getopt() 被重複呼叫,它會從每個選項元素中依次返回每個選項字元。
此函式通常在循環中呼叫,直到處理完所有選項。從這個函式的角度來看,選項是按順序處理的。 然而,實際發生的情況取決於應用程序,因為應用程序邏輯可以選擇檢測衝突選項、覆蓋它們或顯示錯誤。 對於
rm
andi
和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
文件。