我想使用比较两个文件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
vsif [$(diff
会有所不同,并且使用单个=
vs==
也有帮助。我想问题一定是我正在测试输出''
(什么也没有)。它确实有效,但“未找到”行不属于那里。我不仅仅是想消除那条烦人的行,而是以正确的方式执行 if 语句,因为应该有一种方法可以获得我需要的结果,而不必运行两次diff
。
答案1
diff
如果没有发现差异,则提供零退出状态,因此只需使用diff
一次并根据需要输出消息:
if diff file1 file2; then
echo 'no diff'
fi
diff
实用程序可能有选项-s
/--report-identical-files
(POSIX 规范的扩展)。这会将命令简化为:diff -s file1 file2
错误的原因
[1,8c1,8: not found
是语法错误:[
需要单独出现并带有有效的表达式和结束]
参数。有关如何使用的信息test
可以在 unix.stackexchange 上找到(关联 关联 关联) & 在手册页中man 1 test
&man 1p test
- 在 中
test.sh
,第一行是#!/bin/zsh
,但随后脚本正在使用sh
解释器运行(可能不是zsh
)。如果您确实想使用zsh
功能,那么您需要确保您实际上正在运行脚本zsh