S M Tushar Ibne Salam Asked: 2019-11-24 01:09:27 +0800 CST2019-11-24 01:09:27 +0800 CST 2019-11-24 01:09:27 +0800 CST 为什么 rm 手册说我们可以在没有任何参数的情况下运行它,而事实并非如此? 772 我们可以看到rm命令的概要是: rm [OPTION]... [FILE]... 这是否意味着我们只能使用rm没有任何选项或参数的命令? 当我自己运行命令rm时,终端会显示以下错误: rm: missing operand Try 'rm --help' for more information. 谁能告诉我为什么会这样? linux rm 2 个回答 Voted Best Answer Kusalananda 2019-11-24T01:56:41+08:002019-11-24T01:56:41+08:00 该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 -- "$@" where"$@"是一个路径名列表,可能为空也可能不为空,或者可能包含不存在的路径名。 (如果存在阻止命名文件被删除的权限问题rm -f,仍将生成诊断消息并以非零退出状态退出。) 但是,在既没有选项也没有路径名操作数的情况下运行该实用程序是一个错误: $ rm usage: rm [-dfiPRrv] file ... $ echo "$?" 1 同样适用于 GNU rm(上面显示 OpenBSD rm)和相同实用程序的其他实现,但确切的诊断消息和非零退出状态可能不同(在 Solaris 上值为 2,在 macOS 上为 64,例如)。 总之,GNUrm手册可能有点不精确,因为确实有一些选项 ( -f,这是一个可选选项),路径名操作数是可选的。 1自2016版起,解决此bug后,请参考上一版。 2 POSIX 是定义什么是 Unix 系统及其行为方式的标准。本标准由The Open Group出版。另请参阅问题“ POSIX 到底是什么? ”。 Stephen Kitt 2019-11-24T01:37:33+08:002019-11-24T01:37:33+08:00 从技术上讲,概要是正确的,但它令人困惑。在某些情况下不需要文件名: rm --help rm --version (使用 GNU 时rm)。所有其他情况都需要文件名。 其他版本rm将文件显示为非可选,例如在OpenBSD 手册页中。 更准确的 GNU 概要rm将显示三个变体: rm[选项...]文件... rm --help rm --version
该
rm
实用程序的标准概要在 POSIX 标准1&2中指定为在第一种形式中,它确实需要至少一个文件操作数,但在第二种形式中则不需要。
不
rm -f
使用文件操作数不是错误:......但它并没有做太多。
该标准规定,对于该
-f
选项,rm
实用程序应...这证实了它必须可以在
rm -f
没有任何路径名操作数的情况下运行,并且这不是导致rm
带有诊断消息的退出或非零退出状态的东西。这个事实在试图删除多个文件的脚本中非常有用
where
"$@"
是一个路径名列表,可能为空也可能不为空,或者可能包含不存在的路径名。(如果存在阻止命名文件被删除的权限问题
rm -f
,仍将生成诊断消息并以非零退出状态退出。)但是,在既没有选项也没有路径名操作数的情况下运行该实用程序是一个错误:
同样适用于 GNU
rm
(上面显示 OpenBSDrm
)和相同实用程序的其他实现,但确切的诊断消息和非零退出状态可能不同(在 Solaris 上值为 2,在 macOS 上为 64,例如)。总之,GNU
rm
手册可能有点不精确,因为确实有一些选项 (-f
,这是一个可选选项),路径名操作数是可选的。1自2016版起,解决此bug后,请参考上一版。
2 POSIX 是定义什么是 Unix 系统及其行为方式的标准。本标准由The Open Group出版。另请参阅问题“ POSIX 到底是什么? ”。
从技术上讲,概要是正确的,但它令人困惑。在某些情况下不需要文件名:
(使用 GNU 时
rm
)。所有其他情况都需要文件名。其他版本
rm
将文件显示为非可选,例如在OpenBSD 手册页中。更准确的 GNU 概要
rm
将显示三个变体: