one.txtの内容です(コメント:質問を書くとき\ \;を含む最初の行を無視して、コードの先頭に空白行を置くことができませんでした。したがって、ファイルは2行目で始まります。つまり、空行2本、空行1本、空行2本、空行9本、空行3本です。
\\
one
two
three
two.txtの内容です(コメント:上記と同じです。つまり、空白3本、次に1本、空白、2本、空白3本)
\\
one
two
three
だから私がするとき
diff -B one.txt two.txt
私は出力を得る
3,10d2
< one
< two
<
<
<
<
<
<
11a4
> one
12a6
> two
私がするとき
diff -B two.txt one.txt
空の出力、つまり2つのファイルの間に違いはありません。
何が問題なの? diffコマンドは対称でなければなりませんか?
答え1
diff fil1 file2
違いは、file2 を file1 と同じにするために必要な変更を印刷することです。
file1 を file2 と同じにするために必要な変更は、その逆を実行するために必要な変更とは明らかに異なります。簡単な例を見てみましょう。 file1 には 1 つの単語だけが含まれone
、 file2 には 1 つの単語だけが含まれており、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
>
>
>
>
>
>
>
>
3つの変更はすべて空白行なので、何も印刷されません。