考虑一下:
echo -n a > /tmp/a
echo -n b > /tmp/b
diff -B /tmp/a /tmp/b
显然,这两个文件是不同的,但是 diff 似乎认为这两个文件是相同的。我已成功在安装了 diffutils 3.3 的 Ubuntu 14.04、安装了 diffutils 2.8.1 的 CloudLinux 5.10 以及安装了 diffutils 2.8.1 的 Ubuntu 10.04 上重现了这个问题。
如果我不使用 -B 选项,问题就会消失。如果文件以换行符结尾,问题就会消失。如果文件包含超过 1 个字符,问题就会消失。
我尝试在网上搜索这种行为的解释,但没有成功。
有人能解释一下发生了什么事吗?
并且,我可以为此使用的最简单的解决方法是什么 - -B 行为对我来说很重要。
答案1
我觉得这像是 bug。我在 Ubuntu 14.04 上试过。继续报告 bug。
在某些输出模式下(ed 脚本、并排),甚至 -B 也可以工作,但在其他模式下则不行。
jaba@jaba-ubuntu:~/diffbug$ diff -e -B a b
1c
b
.
diff: a: No newline at end of file
diff: b: No newline at end of file
jaba@jaba-ubuntu:~/diffbug$ diff -y -B a b
a bjaba@jaba-ubuntu:~/diffbug$