我正在看这段代码:
if diff file1 file2 > /dev/null;
then echo "same files!" `
else .....
如果将输出定向到/ dev / null?
,则不将diff评估为false答案 0 :(得分:4)
说明差异的最简单方法是举例:
$ 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
输出,但您仍然可以通过测试{的退出状态来获得相应的操作{1}}。如果您正在编写脚本,通常不希望用户看到实际的差异;知道文件不同就足够了。
还有其他工具可用于该工作;特别是,diff
只返回退出状态,指示文件是相同还是不同(它可以用于二进制文件,而不仅仅是文本文件)。您不需要使用cmp -s file1 file2
进行I / O重定向。但是,使用cmp
并隐藏差异是合法的。
答案 1 :(得分:3)
不,shell正在测试diff
的返回值,而不是它写入标准输出的内容。返回值不同。它们是程序退出时返回的状态代码。因此,无论您指向输出的位置(如果有的话)都无关紧要。没有/dev/null
没有返回值。它不是您运行的程序 - 它只是发送您不想存储的数据的某个地方。
答案 2 :(得分:1)
/dev/null
没有返回值,因为它不是执行的二进制文件。当您不关心输出时,它只是一个重定向数据的地方。