首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么在shell中0是true,而false是1?

为什么在shell中0是true,而false是1?
EN

Stack Overflow用户
提问于 2010-05-29 12:50:50
回答 9查看 82.9K关注 0票数 135
代码语言:javascript
复制
false; echo $?

上面的代码将输出1,这与我所知道的所有其他编程语言都是矛盾的。

这里面有什么原因吗?

EN

回答 9

Stack Overflow用户

发布于 2010-05-29 12:56:08

这是一个约定,但当你仔细考虑时,它是一个特别有用的约定。一般来说,如果一个程序成功了,你只需要知道这一点。然而,如果它失败了,你可能需要知道关于失败的所有信息-为什么会发生,如何修复它,等等。拥有零意味着‘成功’和非零意味着失败让你可以很容易地检查成功,并调查特定的错误以获得更多细节。许多API和框架都有类似的约定-成功返回0的函数和失败的函数返回一个描述特定失败情况的错误代码。

票数 99
EN

Stack Overflow用户

发布于 2010-05-29 13:02:37

Bash是一种编程(脚本)语言,但它也是一种shell和用户界面。如果0是错误的,那么程序只能显示一种错误。

然而,在Bash中,任何非零值都是错误的,我们可以使用1-255之间的任何数字来表示错误。这意味着我们可以有许多不同类型的错误。1是一个一般性错误,126表示文件无法执行,127表示“找不到命令”,等等。下面是一些最常见的退出代码的Exit Codes With Special Meanings列表。

成功的种类也很多(退出状态为0)。但是,如果成功,将允许您继续下一步-您可以将结果打印到屏幕上,或执行命令等。

票数 90
EN

Stack Overflow用户

发布于 2011-11-03 22:50:36

我发现需要理解的一个基本点是。在bash和unix shell中,返回值通常不是布尔值。它们是整数退出代码。因此,您必须根据约定对它们进行评估,即0表示成功,其他值表示某些错误。

对于test[ ][[ ]]操作符,如果退出代码为0(/bin/ true的结果),则bash条件的计算结果为true。否则,它们的计算结果为false。

字符串的计算方式与退出代码不同:

代码语言:javascript
复制
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[ ][[ ]]。下面是一个显示算术运算符何时有用的示例:

代码语言:javascript
复制
for (( counter = 0 ; counter < 10 ; counter ++ )) ; do
  if (( counter % 2 )) ; then echo "odd number $counter" ; fi
done
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2933843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档