diff의 종료 코드

diff의 종료 코드

두 개의 파일을 실행 diff -q하고 두 파일이 동일한 경우 생성된 종료 코드 echo $?0; 파일이 다른 경우 종료 코드는 입니다 1. 왜 그런 겁니까? 어떤 면에서 첫 번째는 diff성공이고 두 번째는 실패인가요?

나는 내가 읽은 내용과 제한된 이해를 바탕으로 "성공"과 "실패"라는 용어를 사용했습니다.http://mywiki.wooledge.org/BashGuide/TestsAndConditionals:

  1. 종료 상태
    모든 명령은 종료될 때마다 종료 코드를 생성합니다. 이 종료 코드는 모든 응용 프로그램이 시작되었는지
    평가하기 위해 모든 응용 프로그램에서 사용됩니다 .
    이 종료 코드는 함수의 반환 값과 같습니다
    . 0에서 255(포함) 사이의 정수입니다. 관례 에 따르면 성공을 나타내기 위해 0을 사용하고 일종의 실패를
    나타내기 위해 다른 숫자를 사용합니다 .
    구체적인 숫자는 전적으로 애플리케이션에 따라 다릅니다.,
    정확히 무엇이 잘못되었는지 암시하는 데 사용됩니다.

man diff개발자가 사용하는 규칙이 명확한 부분을 끝까지 읽었어야 했습니다 .

답변1

에서 man diff:

종료 상태는 입력이 동일하면 0, 다르면 1, 문제가 있으면 2입니다.

나는 이것이 아닐 수도 있음을 자유롭게 인정합니다.완전 표준하지만 종료 코드는실제 규칙보다 "지침"이라고 부르는 것이 더 많습니다..

여기에 이미지 설명을 입력하세요

이 경우 표준에서 벗어나면 diff스크립트에서 쉽게 실행할 수 있습니다.

diff a b && echo "no difference" || echo "differences!"

grep이는 무언가가 발견되면 0이 종료되고, 무언가가 발견되지 않으면 1이 종료되는 것과 유사합니다 . 에 대해 0과 1 사이의 방향을 설명할 수 없습니다 diff. 나는 그들이 C 표준 부울 결과를 사용했다고 가정합니다.

그것은별로 중요하지 않습니다. 그것은 단지 임의의 숫자입니다.

답변2

man diff우리에게 말해

종료 상태

   The following exit values shall be returned:

    0     No differences were found.

    1     Differences were found.

   >1     An error occurred.

종료 값 "성공" 및 "실패"를 호출하는 것은 자체 제한 선택입니다. 프로그램에는 종료 상태에 대한 전체 8비트(0에서 255 사이의 값)가 있습니다.

관련 정보