출력의 직관을 이해하고 싶습니다.

출력의 직관을 이해하고 싶습니다.
bash-3.2$ echo foo > foo.txt
bash-3.2$ if cmp foo.txt foo.txt; then echo EQUAL; fi
EQUAL
bash-3.2$ echo bar > bar.txt
bash-3.2$ if cmp foo.txt bar.txt; then echo EQUAL; fi
foo.txt bar.txt differ: char 1, line 1

그러나 cmp는 같으면 0을 반환하고 다르면 1을 반환합니다. 이는 bash의 if 문이 0 또는 다른 값을 반환한다는 의미입니까?

답변1

예. Bash(및 기타 쉘)에서 상태 0으로 종료되는 명령은 "성공"으로 간주되고 다른 종료 상태는 "실패"로 간주됩니다.

bash if명령은 "조건부" 표현식에서는 엄격하게 작동하지 않습니다. 구문은 다음과 같습니다.

$ help if
if: if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi
    Execute commands based on conditional.

    The `if COMMANDS' list is executed.  If its exit status is zero, then the
    `then COMMANDS' list is executed.  Otherwise ...

주어진 명령의 종료 상태에 따라 분기됩니다.

명령문에서 가장 흔히 볼 수 있는 일반적인 명령은 내장 명령과 생성된 명령 if입니다 . 이러한 명령은 동일한 방식으로 작동합니다. 상태 0("성공/참"을 의미) 또는 0이 아닌 상태("실패/거짓"을 의미)로 종료되며 다른 명령과 마찬가지로 내부 또는 외부에서 사용할 수 있습니다. // 성명.[[[...]]cmpifwhileuntil

관련 정보