我想了解输出的直觉

我想了解输出的直觉
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内部或外部使用。ifwhileuntil

相关内容