為什麼 rm 手冊說我們可以在沒有任何參數的情況下運行它,而事實並非如此?

為什麼 rm 手冊說我們可以在沒有任何參數的情況下運行它,而事實並非如此?

我們可以看到指令的概要rm是:

rm [OPTION]... [FILE]...

這不是意味著我們只能使用rm命令而不使用任何選項或參數嗎?當我單獨
運行該命令時,終端機顯示以下錯誤:rm

rm: missing operand
Try 'rm --help' for more information.

誰能告訴我為什麼會這樣?

答案1

rm指定了該實用程式的標準概要在 POSIX 標準中1&2

rm [-iRr] file...
rm -f [-iRr] [file...]

在第一種形式中,它確實需要至少一個檔案操作數,但在第二種形式中則不需要。

不使用rm -f檔案運算元不是錯誤:

$ rm -f
$ echo "$?"
0

……但它並沒有多大作用。

該標準規定,對於該-f選項,rm公用事業公司應該...

不提示確認。在沒有檔案運算元或運算元不存在的情況下,不要寫入診斷訊息或修改退出狀態。任何先前出現的-i選項都將被忽略。

這證實了它必須可以在沒有任何路徑名操作數的情況下運行rm -f,並且這不會導致rm退出時出現診斷訊息或非零退出狀態。

這個事實在嘗試刪除多個文件的腳本中非常有用

rm -f -- "$@"

其中"$@"是路徑名列表,可能為空也可能不為空,或可能包含不存在的路徑名。

rm -f如果有的話,仍然會產生診斷訊息並以非零退出狀態退出權限問題防止指定檔案被刪除。

但執行此實用程式時既不使用選項也不使用路徑名運算元會出現錯誤:

$ rm
usage: rm [-dfiPRrv] file ...
$ echo "$?"
1

rm對於 GNU (上面顯示了 OpenBSD )和相同實用程式的其他實作也是如此rm,但確切的診斷訊息和非零退出狀態可能不同(在 Solaris 上該值為 2,在 macOS 上為 64,例如)。

總而言之,GNUrm手冊可能有點不精確,因為確實使用某些選項(-f,這是一個可選選項),路徑名操作數是可選的。


1自 2016 年版以來,在決議之後這個錯誤, 看上一版以供參考。
2 POSIX 是定義 Unix 系統及其行為的標準。本標準由公開組。另請參閱問題“POSIX 到底是什麼?」。

答案2

從技術上講,概要是正確的,但令人困惑。在某些情況下不需要檔案名稱:

rm --help
rm --version

(當使用 GNU 時rm)。所有其他情況都需要檔案名稱。

其他版本的rm檔案顯示為非可選,例如OpenBSD 線上說明頁

GNU 更準確的概要rm將顯示這三個變體:

rm[選項...]文件
rm --help
rm --version

相關內容