![diff -B 命令不是对称的?](https://linux22.com/image/100244/diff%20-B%20%E5%91%BD%E4%BB%A4%E4%B8%8D%E6%98%AF%E5%AF%B9%E7%A7%B0%E7%9A%84%EF%BC%9F.png)
这是 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
>
>
>
>
>
>
>
>
所有三个更改都是空行,因此不会打印任何内容。