diff 的退出代码

diff 的退出代码

如果我运行diff -q两个文件,并且它们相同,则生成的退出代码echo $?0;如果文件不同,则退出代码为1。为什么会这样?为什么第一个是diff成功,第二个是失败?

我使用“成功”和“失败”这两个术语是基于我对http://mywiki.wooledge.org/BashGuide/TestsAndConditionals

  1. 退出状态
    每个命令在终止时都会产生一个退出代码。
    启动该命令的任何应用程序都会使用此退出代码来评估
    一切是否正常。此退出代码就像
    函数的返回值。它是一个介于 0 和 255(含)之间的整数。惯例
    规定我们使用 0 表示成功,使用任何其他数字表示
    某种失败。具体数字完全取决于具体应用
    并用来暗示到底出了什么问题。

我应该读到man diff最后,那里开发人员使用的约定很明确。

答案1

man diff

如果输入相同则退出状态为 0,如果不同则退出状态为 1,如果有问题则退出状态为 2。

我坦然承认这可能不是完全标准但退出代码更多的是所谓的“指导方针”,而不是实际的规则

在此处输入图片描述

在这种情况下,偏离标准可以让你轻松地diff在脚本中运行。

diff a b && echo "no difference" || echo "differences!"

这类似于grep如果找到某物则退出 0,如果未找到某物则退出 1。我无法解释 0 和 1 之间的方向diff。我猜他们采用了 C 标准布尔结果。

这其实并不重要。这只是一个任意数字。

答案2

man diff告诉我们

退出状态

   The following exit values shall be returned:

    0     No differences were found.

    1     Differences were found.

   >1     An error occurred.

将退出值称为“成功”和“失败”是一种自我限制的选择。程序有整整 8 位退出状态,值从 0 到 255。

相关内容