Shell-Script
如何在 zsh if 語句中檢查命令的輸出結果與無輸出?
我想比較 2 個文件
diff
,然後如果它什麼都不返回,則echo "no diff"
顯示差異。我目前的 if 語句僅在沒有區別的情況下才有效,但如果有,那麼它會給我一個“未找到”錯誤。這就是 test.sh 的樣子:
#!/bin/zsh if [$(diff file1 file2) = ''] then echo "no diff" else diff file1 file2 fi
如果文件相同:
$ sh test.sh no diff
如果文件不同:
$ cat file1 hello $ cat file2 goodbye $ sh test.sh test.sh: 1: test.sh: [1,8c1,8: not found < hello --- > goodbye
在我尋找解決方案的過程中,我發現有空格
if [ $(diff
vs 有所作為if [$(diff
,使用單個=
vs==
也有幫助。我認為問題一定是我正在測試輸出''
(什麼都沒有)。它確實有效,但“未找到”行不屬於那裡。我不只是想讓那條煩人的行保持沉默,而是以正確的方式執行 if 語句,因為應該有一種方法可以獲得我需要的結果,而不必執行diff
兩次。
diff
如果沒有發現差異,則提供零退出狀態,因此只需使用diff
一次並在需要時輸出消息:if diff file1 file2; then echo 'no diff' fi
diff
實用程序可能有選項-s
/--report-identical-files
(對 POSIX 規範的擴展)。這會將命令簡化為:diff -s file1 file2