来自diff
手册页:
-b, --ignore-space-change
ignore changes in the amount of white space
-w, --ignore-all-space
ignore all white space
-b
由此,我推断和选项之间的差异-w
一定是-b
对类型空格(制表符 vs. 空格)。然而,情况似乎并非如此:
$ diff 1.txt 2.txt
1,3c1,3
< Four spaces, changed to one tab
< Eight Spaces, changed to two tabs
< Four spaces, changed to two spaces
---
> Four spaces, changed to one tab
> Eight Spaces, changed to two tabs
> Four spaces, changed to two spaces
$ diff -b 1.txt 2.txt
$ diff -w 1.txt 2.txt
$
-b
那么,和选项之间有什么区别-w
?在 Kubuntu Linux 13.04 上使用 diffutils 3.2 进行了测试。
答案1
手册页对这一点的说明不是很清楚,但信息页进行了详细说明:
1.2 抑制空白和制表符间距的差异
--ignore-tab-expansion
( )选项-E
忽略输入中的制表符和空格之间的区别。制表符被视为等于到下一个制表位的空格数(*注释 Tabs::)。
--ignore-trailing-space
( )选项-Z
忽略行尾的空格。
--ignore-space-change
( )选项比和 组合-b
更强。它会忽略行尾的空格,并将一行中所有其他一个或多个空格字符序列视为等效。使用此选项,会将以下两行视为等效,其中表示行尾:-E
-Z
diff
$
Here lyeth muche rychnesse in lytell space. -- John Heywood$ Here lyeth muche rychnesse in lytell space. -- John Heywood $
--ignore-all-space
( )选项-w
的功能更强。即使一行中有空格而另一行没有空格,它也会忽略差异。“空格”字符包括制表符、垂直制表符、换页符、回车符和空格;某些语言环境可能会将其他字符定义为空格。使用此选项,diff
将以下两行视为等效行,其中$
表示行结束,^M
表示回车符:Here lyeth muche rychnesse in lytell space.-- John Heywood$ He relyeth much erychnes seinly tells pace. --John Heywood ^M$
对于许多其他程序来说,换行符也是一个空格字符,但它
diff
是一个面向行的程序,换行符总是结束一行。因此-w
or--ignore-all-space
选项不会忽略与换行符相关的更改;它只会忽略其他空格更改。
答案2
看起来单词之间的空格可能更多,但这是我的结果:
diff 1.txt 2.txt
1,2c1,2
< test
< next next
---
> te st
> next next
diff -b 1.txt 2.txt
1c1
< test
---
> te st
-w 的结果为空。