false; echo $?
上面的代码将输出1
,这与我所知道的所有其他编程语言都是矛盾的。
这里面有什么原因吗?
发布于 2010-05-29 12:56:08
这是一个约定,但当你仔细考虑时,它是一个特别有用的约定。一般来说,如果一个程序成功了,你只需要知道这一点。然而,如果它失败了,你可能需要知道关于失败的所有信息-为什么会发生,如何修复它,等等。拥有零意味着‘成功’和非零意味着失败让你可以很容易地检查成功,并调查特定的错误以获得更多细节。许多API和框架都有类似的约定-成功返回0的函数和失败的函数返回一个描述特定失败情况的错误代码。
发布于 2010-05-29 13:02:37
Bash是一种编程(脚本)语言,但它也是一种shell和用户界面。如果0
是错误的,那么程序只能显示一种错误。
然而,在Bash中,任何非零值都是错误的,我们可以使用1-255之间的任何数字来表示错误。这意味着我们可以有许多不同类型的错误。1
是一个一般性错误,126
表示文件无法执行,127
表示“找不到命令”,等等。下面是一些最常见的退出代码的Exit Codes With Special Meanings列表。
成功的种类也很多(退出状态为0
)。但是,如果成功,将允许您继续下一步-您可以将结果打印到屏幕上,或执行命令等。
发布于 2011-11-03 22:50:36
我发现需要理解的一个基本点是。在bash和unix shell中,返回值通常不是布尔值。它们是整数退出代码。因此,您必须根据约定对它们进行评估,即0表示成功,其他值表示某些错误。
对于test
、[ ]
或[[ ]]
操作符,如果退出代码为0(/bin/ true的结果),则bash条件的计算结果为true。否则,它们的计算结果为false。
字符串的计算方式与退出代码不同:
if [ 0 ] ; then echo not null ; fi
if [ $(echo 0) ] ; then echo not null ; fi
if [ -z "" ] ; then echo null ; fi
(( ))
算术运算符将1和0解释为true和false。但该运算符不能完全替代test
、[ ]
或[[ ]]
。下面是一个显示算术运算符何时有用的示例:
for (( counter = 0 ; counter < 10 ; counter ++ )) ; do
if (( counter % 2 )) ; then echo "odd number $counter" ; fi
done
https://stackoverflow.com/questions/2933843
复制相似问题