为什么“if [ 0 ]”在bash脚本中执行“then”语句?

acg*_*ant 5 bash scripts

本指南说:

 An if/then construct tests whether the exit status of a list of commands is 0
Run Code Online (Sandbox Code Playgroud)

如果我0在 bash 中执行,它会说:

0: command not found
Run Code Online (Sandbox Code Playgroud)

所以它的退出状态不是 0,也[ 0 ]应该返回一个非零值的退出状态。但它实际上返回 0 退出状态,并if [ 0 ]执行then语句,而不是else语句。
谁能解释一下?

Eri*_*lho 7

[不是if语句的一部分,它是一个计算表达式的命令。在[ 0 ]因为形式返回true[ Expression ]结果始终为0。如果你尝试if [ 1 -eq 2 ]then声明将不会运行。

查看手册页了解更多信息。

  • 初学者还应该注意,“-eq”标志是算术比较,而“=”是字符串(即文本比较)。比较 `[ 01 -eq 1 ] && echo "YES"` 和 `[ 01 = 1 ] && echo "YES"`。后者不会输出“YES”,因为“01”和“1”是不同的文本字符串,而“-eq”将它们视为数字。 (2认同)