one.txt의 내용입니다(논평: 질문 작성시 \\; 가 포함된 첫 번째 줄을 무시하여 코드 시작 부분에 빈 줄을 넣을 수 없었습니다. 따라서 파일은 두 번째 줄로 시작합니다. 즉, 빈 줄 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
빈 출력, 즉 두 파일 사이에 차이가 없습니다.
뭐가 문제 야? diff 명령은 대칭이어야 하지 않나요?
답변1
diff fil1 file2
차이점은 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
>
>
>
>
>
>
>
>
세 가지 변경 사항은 모두 빈 줄이므로 아무것도 인쇄되지 않습니다.