差异的退出代码

DK *_*ose 12 bash

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

根据我对http://mywiki.wooledge.org/BashGuide/TestsAndConditionals 的阅读和有限的理解,我使用了“成功”和“失败”这两个术语:

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

我应该man diff把开发人员使用的约定清楚地读到最后。

Oli*_*Oli 20

来自man diff

输入相同时退出状态为 0,不同时为 1,故障时为 2。

我坦率地承认这可能不是完全标准的,但退出代码更像是您所说的“指南”而不是实际规则

在此处输入图片说明

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

diff a b && echo "no difference" || echo "differences!"
Run Code Online (Sandbox Code Playgroud)

这类似于grep将退出 0 是找到某些东西,如果找不到某些东西,则退出 1。我无法解释 0 和 1 之间的方向diff。我假设他们采用了 C 标准的布尔结果。

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


wal*_*tor 7

man diff告诉我们

退出状态

   The following exit values shall be returned:

    0     No differences were found.

    1     Differences were found.

   >1     An error occurred.
Run Code Online (Sandbox Code Playgroud)

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