在Shell脚本中parsingDiff的结果

我想比较两个文件,看看他们是否相同或不在我的shell脚本,我的方式是:

diff_output=`diff ${dest_file} ${source_file}` if [ some_other_condition -o ${diff_output} -o some_other_condition2 ] then .... fi 

基本上,如果他们是相同的$ {diff_output}应该不包含任何内容,上面的testing将评估为true。

但是,当我运行我的脚本,它说
[: 争论太多

在if […]行上。

有任何想法吗?

Solutions Collecting From Web of "在Shell脚本中parsingDiff的结果"

你关心实际的差异是什么,或只是文件是不同的? 如果是后者,则不需要解析输出; 您可以改为检查退出代码。

 if diff -q "$source_file" "$dest_file" > /dev/null; then : # files are the same else : # files are different fi 

或者使用更高效的cmp

 if cmp -s "$source_file" "$dest_file"; then : # files are the same else : # files are different fi 

有一个选项提供了精确的这样做: -q (或--quiet )。 它告诉差异只是让退出代码表明文件是否相同。 这样你可以做到这一点:

 if diff -q "$dest_file" "$source_file"; then # files are identical else # files differ fi 

或者如果你想交换两个条款:

 if ! diff -q "$dest_file" "$source_file"; then # files differ else # files are identical fi 

如果你真的想这样做(即你需要输出),你应该这样做:

 if [ -n "$diff_output" -o ... ]; then ... fi 

-n意思是“测试下面的字符串是否为非空的,你也必须用引号包围它,所以如果它是空的,测试仍然有一个字符串 – 你得到你的错误,因为你的测试评估some_other_condition -o -o some_other_condition2 ,正如你所看到的是不会工作的。

diff逐行比较文件来处理差异工具的补丁 。 如果你只是想检查它们是否不同,你应该使用cmp

 cmp --quiet $source_file $dest_file || echo Different 
 diff $FILE $FILE2 if [ $? = 0 ]; then echo “TWO FILES ARE SAME” else echo “TWO FILES ARE SOMEWHAT DIFFERENT” fi