![shell 脚本中 diff 命令在 if 语句中的行为](https://linux22.com/image/1502814/shell%20%E8%84%9A%E6%9C%AC%E4%B8%AD%20diff%20%E5%91%BD%E4%BB%A4%E5%9C%A8%20if%20%E8%AF%AD%E5%8F%A5%E4%B8%AD%E7%9A%84%E8%A1%8C%E4%B8%BA.png)
我已经尝试过以下代码..
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 列表,则执行该列表。退出状态 是最后执行的命令的退出状态,如果没有条件则为零 经检验属实。