我正在看这段代码:
if diff file1 file2 > /dev/null;
then echo "same files!" `
else .....
除非 diff 的输出被定向到 /dev/null,否则不会被评估为假?
说明差异的最简单方法是通过示例:
$ if diff file1 file2
> then echo The same
> else echo Different
> fi
2c2
< bb
---
> ee
Different
$ if diff file1 file2 > /dev/null
> then echo The same
> else echo Different
> fi
Different
$ diff -u file1 file2
--- file1 2013-09-26 19:44:06.000000000 -0700
+++ file2 2013-09-26 19:44:19.000000000 -0700
@@ -1,4 +1,4 @@
aa
-bb
+ee
cc
dd
$
在不将输出发送到的情况下/dev/null
,您会看到 的标准输出diff
和测试退出状态的适当操作diff
。当您将 的输出发送diff
到 时/dev/null
,您根本看不到diff
输出,但您仍然可以通过测试 的退出状态获得适当的操作diff
。如果您正在编写脚本,您通常不希望用户看到实际差异;知道文件不同就足够了。
还有其他工具可用于该工作;特别是,cmp -s file1 file2
只返回一个退出状态,指示文件是相同还是不同(它可以用于二进制文件,而不仅仅是文本文件)。您不需要使用cmp
. 但是,使用diff
和隐藏差异是合法的。
不,shell 正在测试 的返回值diff
,而不是它写入标准输出的内容。返回值不同。它们是程序退出时返回的状态码。因此,您将输出指向何处(如果有的话)并不重要。并且 no/dev/null
没有返回值。它不是您运行的程序 - 它只是发送您不想存储的数据的地方。
/dev/null
没有返回值,因为它不是执行的二进制文件。当您不关心输出时,它只是一个重定向数据的地方。