我在看這段代碼:這看起來很愚蠢,但/ 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