如果我diff -q在两个文件上运行并且它们是相同的,则生成的退出代码echo $?是0; 如果文件不同,则退出代码为1. 这是为什么?第diff一个成功而第二个失败的方式是什么?
根据我对http://mywiki.wooledge.org/BashGuide/TestsAndConditionals 的阅读和有限的理解,我使用了“成功”和“失败”这两个术语:
- 退出状态
每个命令在终止时都会产生一个退出代码。
任何启动它的应用程序都使用此退出代码来评估
是否一切正常。此退出代码类似于
函数的返回值。它是一个介于 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 标准的布尔结果。
这并不重要。这只是一个任意数字。
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。