我在看这段代码:这看起来很愚蠢,但/ dev/null是否有返回值?
if diff file1 file2 > /dev/null;
then echo "same files!" `
else .....
除非它的输出定向到/ dev/null的不DIFF评估假的?
我在看这段代码:这看起来很愚蠢,但/ dev/null是否有返回值?
if diff file1 file2 > /dev/null;
then echo "same files!" `
else .....
除非它的输出定向到/ dev/null的不DIFF评估假的?
来说明差异的最简单的方法是例如:
$ 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
进行I/O重定向。但是,使用diff
并隐瞒差异是合法的。
/dev/null
没有返回值,因为它不是执行的二进制文件。当你不关心输出时,它只是一个重定向数据的地方。
'diff file1 file2>/dev/null'的值是'diff'的返回值。你为什么期望'diff'的返回值根据你重定向输出的位置而不同? – lurker
我不确定。问题是diff file1 file2应该只是返回0,如果文件是相同的权利?所以我不明白他们为什么将输出重定向到dev/null – hahahaha
这段代码只关心文件是否相同。 'diff'输出所有的差异。如果你不想看到差异,但只是想知道有什么不同,你可以将输出发送到'/ dev/null'。这就是你发送你不关心的输出的地方。返回值是分开的,而不是“diff”的“输出”。 – lurker