
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이 아닌 상태("실패/거짓"을 의미)로 종료되며 다른 명령과 마찬가지로 내부 또는 외부에서 사용할 수 있습니다. // 성명.[
[[...]]
cmp
if
while
until