diff -B 命令不是对称的?

diff -B 命令不是对称的?

这是 one.txt 的内容(评论: 忽略包含 \\ 的第一行;在编写问题时,我无法在代码开头放置空行。因此文件从第二行开始,即 2 个空白行,然后是 1 个空白行,然后是 2 个空白行,然后是 9 个空白行,然后是 3 个)

\\  


one
two  









three

这是two.txt的内容(评论:同上,即三个空行,然后一个,空行,两个,空行,三个)

\\



one  

two

three  

所以当我这样做时

diff -B 一个.txt 两个.txt

我得到输出

3,10d2
< one
< two
< 
< 
< 
< 
< 
< 
11a4
> one
12a6
> two

当我这样做时

diff -B 两个.txt 一个.txt

我得到一个空输出,即两个文件之间没有区别。
怎么了? diff 命令不应该是对称的吗?

答案1

diff fil1 file2  

diff 的作用是打印使 file2 与 file1 相同所需的更改。

使 file1 与 file2 相同所需的更改绝对不同于执行相反操作所需的更改。我们来看一个简单的例子: file1 仅包含一个单词one, file2 仅包含一个单词two,则diff file1 file2得到:

1c1
< one
---
> two  

并与diff file2 file1您一起得到:

1c1
< two
---
> one

所以 diff 不是对称的,也不应该是对称的。

现在关于该-B选项,手册说:

-B, --ignore-blank-lines        ignore changes where lines are all blank 

-B并不意味着忽略输入中的空行,而是意味着忽略变化那些是空白的。如果你这样做diff two.txt one.txt你会得到:

3d2
<
5d3
<
6a5,12
>
>
>
>
>
>
>
>

所有三个更改都是空行,因此不会打印任何内容。

相关内容