diff
マンページから:
-b, --ignore-space-change
ignore changes in the amount of white space
-w, --ignore-all-space
ignore all white space
このことから、-b
オプションと-w
オプションの違いは、-b
がtypeの空白(タブとスペース)の影響を受けやすいことであると推測します。ただし、そうではないようです。
$ 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でテストされています。
その点については、manページはあまり明確ではありませんが、infoページで詳しく説明しています。
1.2空白とタブの間隔の違いを抑制する
--ignore-tab-expansion
(-E
)オプションは、入力時のタブとスペースの区別を無視します。タブは、次のタブストップまでのスペースの数と同等であると見なされます(* note Tabs::)。
--ignore-trailing-space
(-Z
)オプションは、行末の空白を無視します。
--ignore-space-change
(-b
)オプションは、-E
と-Z
を組み合わせたものよりも強力です。行末の空白は無視され、行内の1つ以上の空白文字の他のすべてのシーケンスは同等であると見なされます。このオプションを使用すると、diff
は次の2行を同等と見なします。ここで、$
は行の終わりを示します。Here lyeth muche rychnesse in lytell space. -- John Heywood$ Here lyeth muche rychnesse in lytell space. -- John Heywood $
--ignore-all-space
(-w
)オプションはさらに強力です。一方の行に空白があり、もう一方の行には空白がない場合でも、違いは無視されます。 「空白」文字には、タブ、垂直タブ、フォームフィード、キャリッジリターン、スペースが含まれます。一部のロケールでは、追加の文字を空白として定義できます。このオプションを使用すると、diff
は次の2行を同等と見なします。ここで、$
は行末を示し、^M
は復帰を示します。Here lyeth muche rychnesse in lytell space.-- John Heywood$ He relyeth much erychnes seinly tells pace. --John Heywood ^M$
他の多くのプログラムでは、改行も空白文字ですが、
diff
は行指向のプログラムであり、改行文字は常に行を終了します。したがって、-w
または--ignore-all-space
オプションは、改行関連の変更を無視しません。他の空白の変更のみを無視します。
単語間のスペースのように見えるかもしれませんが、これは私の結果です:
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の結果は何もありません。