为什么 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

相关内容