shell 脚本中 diff 命令在 if 语句中的行为

shell 脚本中 diff 命令在 if 语句中的行为

我已经尝试过以下代码..

if diff f1.sh f2.sh; then
  echo Same
else
  echo Different
fi

这里.. 就我而言,两者启动文件f2脚本是不同的文件..因此,如果语句打印不同的(正如预期的那样)但是情况如何变成错误的并控制更改为 else 语句...它是如何发生的..条件如何变为假..?这个 diff 命令在这里如何表现..请深入解释这个过程..提前谢谢(如果我的英语太差,请见谅..)

答案1

这是设计使然。如果你查看diff手册页,你会看到以下语句:

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

退出状态对于 shell 来说0意味着true,因此显示“相同”。在其他两种可能状态下,显示“不同”,因为任何非零值都是false

if行为在 shell 手册页中有描述,例如bash

if list; then list; [ elif list; then list; ] ... [ else list; ] fi
  • 执行 if 列表。如果其退出状态为零,则 then 列表
    否则,依次执行每个 elif 列表,如果其退出
    状态为零,则执行相应的列表,并执行命令
    完成。否则,如果存在 else 列表,则执行该列表。退出状态
    是最后执行的命令的退出状态,如果没有条件则为零
    经检验属实。

相关内容