【发布时间】:2014-05-06 14:25:51
【问题描述】:
在命令行上,对两个不同的文件使用 diff 后,命令
echo $?
报告“1”。当我在脚本中尝试相同时,如下所示:
echo "` diff $F1 $F2`"
rv=$?
if [[ $rv == 1 ]]
then
echo "failed"
fi
然后我从不打印“失败”(即使是不同的文件)。请注意,这是 bash shell,所以语法应该没问题(例如,如果我改为检查 '0',它总是会打印出来)。
如何检查 diff 命令是否发现了差异,并在此条件下进行处理?
这是在 Ubuntu 12.04 下。
【问题讨论】:
-
如果您只对返回码感兴趣,请使用
cmp而不是diff。 -
而
echo $(diff)从echo返回退出代码,而不是从diff。 -
@RedX:您的第二条评论回答了为什么它不起作用,谢谢。但我想先打印差异,还要跟踪有多少比较失败。你觉得有一个简单的方法吗?
-
diff不输出不匹配的计数 AFAIK。var=$(diff "$F1" "$F2"); ret=$?; echo "$var"; if (($ret == 0)); then echo "same"; else echo "not same"; fi -
未测试:
TMPFILE=.tmp.$$; if diff "${F1}" "${F2}" > "${TMPFILE}; then echo "There were $(wc -l "${TMPFILE}") differences;"; cat "${TMPFILE}"; else echo "Same same!"; fi ; rm -f "${TMPFILE}"