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(和其他 shell)中,以状态 0 退出的命令被视为“成功”,任何其他退出状态被视为“失败”。
bashif
命令并不严格适用于“条件”表达式。语法是:
$ 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(表示“成功/真”)或非零状态(表示“失败/假”),并且与任何其他命令一样,可以在 //语句cmp
内部或外部使用。if
while
until