쉘 스크립트의 if 문에서 diff 명령이 작동하는 방식

쉘 스크립트의 if 문에서 diff 명령이 작동하는 방식

다음 코드를 시도했습니다 ..

if diff f1.sh f2.sh; then
  echo Same
else
  echo Different
fi

여기.. 내 경우에는 둘 다f1.sh그리고f2.sh파일이 다릅니다. 따라서 명령문이 인쇄되면다른(예상대로) 그런데 조건이 어떻게 되는지거짓else 문으로의 변경 사항을 제어합니다. 어떻게 이런 일이 발생하나요.. 조건이 어떻게 거짓이 되나요..? 이 diff 명령이 여기서 어떻게 작동하는지.. 프로세스를 자세히 설명해주세요.. 미리 감사드립니다. (제 영어가 너무 서툴면 죄송합니다..)

답변1

이것은 의도적으로 설계된 것입니다. 매뉴얼 페이지를 보면 diff다음과 같은 내용을 볼 수 있습니다.

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

종료 상태는 쉘에 대한 0의미 이므로 "동일"이 표시됩니다. true다른 가능한 상태 모두에서 "다름"은 0이 아닌 모든 것으로 표시됩니다 false.

동작 if은 쉘 매뉴얼 페이지에 설명되어 있습니다 bash. 예를 들면 다음과 같습니다.

if list; then list; [ elif list; then list; ] ... [ else list; ] fi
  • if 목록이 실행됩니다. 종료 상태가 0이면 then 목록은 다음과 같습니다.
    실행. 그렇지 않으면 각 elif 목록이 차례로 실행되고, 종료되면
    상태가 0이면 해당 목록이 실행되고 명령이 실행됩니다.
    완료합니다. 그렇지 않으면 else 목록이 있으면 실행됩니다. 종료 상태
    마지막으로 실행된 명령의 종료 상태이거나, 조건이 없으면 0입니다.
    사실로 테스트되었습니다.

관련 정보