LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1396|回复: 8

如何理解shell条件是真,值是零(0)

[复制链接]
发表于 2007-8-1 21:39:55 | 显示全部楼层 |阅读模式
在while循环条件后,条件是真就退出,但真的值是零(0),不过在C语言中,值是真是非零的值,怎么来理解这2种程序种对真不通的定义呢??
发表于 2007-8-1 22:20:48 | 显示全部楼层
if/while/until测试的是执行某个命令的返回值:执行成功,返回“0”,条件为真;执行失败,返回“非0”,条件为假。

反正,千万不要把返回值理解为“条件的真假”,这根本就是俩码事儿。

再不行,死记... =.=
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-1 22:38:32 | 显示全部楼层
谢谢Jockey的提点,我就慢慢理解你说的话。
回复 支持 反对

使用道具 举报

发表于 2007-8-5 18:48:57 | 显示全部楼层
Post by gregorian
在while循环条件后,条件是真就退出,但真的值是零(0),不过在C语言中,值是真是非零的值,怎么来理解这2种程序种对真不通的定义呢??

我觉得是传统
回复 支持 反对

使用道具 举报

发表于 2007-8-5 20:34:35 | 显示全部楼层
一般是这样
  1. if foo; then
  2.   ...
  3. fi
复制代码

这里 foo 表示运行 foo 这个程序,而程序通常返回 0 表示正常退出,非零表示有错误,于是就这样了。
回复 支持 反对

使用道具 举报

发表于 2007-8-5 23:22:23 | 显示全部楼层
返回0值是正常结束嘛。
不过csh中好像是以1为真的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-6 18:00:16 | 显示全部楼层
我就是感觉 里面返回0 1 不统一
很多时候一下都反应不过来
回复 支持 反对

使用道具 举报

发表于 2007-8-6 20:42:17 | 显示全部楼层
Post by chenxingchen
不过csh中好像是以1为真的。
呵呵,这和POSIX shell不太一样。
csh的语法类似C语言,所以 if 测试的是后面括号里的表达式的值而不是命令的返回状态,因此如果想把命令执行的返回结果作为表达式的值进行测试,必须把命令放到 {} 内:如果返回零,表达式为真;如果返回非零,表达式为假。

总之,对POSIX shell,看到分支或循环对条件的测试,不要在大脑中混入“返回值”的概念,而只要思考执行的命令是否成功。
回复 支持 反对

使用道具 举报

发表于 2007-8-25 15:05:38 | 显示全部楼层
用0来表示成功,非0表示失败是因为成功往往只有一种情况,而失败则有N种不同的理由。
而成功为真符合一般的逻辑思维。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表