免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 19375 | 回复: 18
打印 上一主题 下一主题

[其他] 对shell中命令执行成功返回值的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-15 22:54 |只看该作者 |倒序浏览
了解到,shell中命令执行成功后返回值为0,也即$?为0

这没什么问题,但总感觉有点不对劲,这样岂不是在很多时候条件判断或其他场合中会造成一定混淆困惑?

比如if(命令执行)

一般的逻辑都是成功的话则如何如何...。但如果成功返回的是0的话...这个就...总感觉成功执行应该返回1才对

大家能说说这其中有什么就讲究么?

谢谢

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
2 [报告]
发表于 2012-08-16 07:50 |只看该作者
从0到1是质变,从1到10是量变

论坛徽章:
0
3 [报告]
发表于 2012-08-16 08:36 |只看该作者
回复 2# waker


    我的意思是,一般是1表示true。从逻辑上来看不应该是运行成功则以true表示么?

论坛徽章:
0
4 [报告]
发表于 2012-08-16 08:47 |只看该作者
回复 3# yonka


    这只是你自己的习惯问题
shell中就是以0为true的
如果你其他东西都没学,先学了shell,你就会觉得其他编程语言以1为true不习惯

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
5 [报告]
发表于 2012-08-16 09:15 |只看该作者
yonka 发表于 2012-08-16 08:36
回复 2# waker


1表示true 2表示true 100表示true,0表示false
实际的情况是成功只有一种,失败的状态很多,请问你只有0这一种false如何去区分失败的状态?

论坛徽章:
0
6 [报告]
发表于 2012-08-16 09:17 |只看该作者
回复 4# personball


    谢谢你的纠正。

但是我看到的另一些情况又有些矛盾了。

比如:
if [ "$date_total_s" -lt "0" ]; then   
从这里看,应该是成功则返回1。但是测试时的结果可以看到echo $?为0(true)。矛盾在于如果真是0de话,if的结果就无法成立了诶...

论坛徽章:
21
白羊座
日期:2013-08-23 15:49:17金牛座
日期:2013-10-08 17:00:03处女座
日期:2013-10-12 11:54:11CU十二周年纪念徽章
日期:2013-10-24 15:41:34午马
日期:2013-11-27 14:07:21巨蟹座
日期:2013-12-04 10:56:03水瓶座
日期:2013-12-04 15:58:00亥猪
日期:2014-05-24 16:02:3115-16赛季CBA联赛之辽宁
日期:2016-11-07 13:52:53戌狗
日期:2013-08-23 16:15:31白羊座
日期:2013-08-24 21:59:24巨蟹座
日期:2013-08-25 16:34:24
7 [报告]
发表于 2012-08-16 09:42 |只看该作者
你可以用-eq -ne 来判断啊.

这个0是说上一个命令的状态.

论坛徽章:
0
8 [报告]
发表于 2012-08-16 09:52 |只看该作者
回复 7# zongg


    您的意思是,“上一条命令的状态”跟“该命令的返回值”不是一回事吗?  ^_^

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
9 [报告]
发表于 2012-08-16 10:08 |只看该作者
这个看看能不能明白一点:
  1. [seesea@UC ~]$ true
  2. [seesea@UC ~]$ echo $?
  3. 0
  4. [seesea@UC ~]$ false
  5. [seesea@UC ~]$ echo $?
  6. 1
复制代码
你是一直纠结 "true" 这个常量的值吧?在 shell 里 true 不是“常量”,而是一个“命令”,那么 "true" 这个常量的值应该等于 true 这个命令的返回值,这个说法是否同意?
如果同意,你就把你想法中的 "true" 常量当做是 shell 中 true 的返回值,既然 true 返回值是 0,那你想法中的 "true" 常量的真实值就是 0。

论坛徽章:
21
白羊座
日期:2013-08-23 15:49:17金牛座
日期:2013-10-08 17:00:03处女座
日期:2013-10-12 11:54:11CU十二周年纪念徽章
日期:2013-10-24 15:41:34午马
日期:2013-11-27 14:07:21巨蟹座
日期:2013-12-04 10:56:03水瓶座
日期:2013-12-04 15:58:00亥猪
日期:2014-05-24 16:02:3115-16赛季CBA联赛之辽宁
日期:2016-11-07 13:52:53戌狗
日期:2013-08-23 16:15:31白羊座
日期:2013-08-24 21:59:24巨蟹座
日期:2013-08-25 16:34:24
10 [报告]
发表于 2012-08-16 10:13 |只看该作者
yonka 发表于 2012-08-16 09:52
回复 7# zongg


是一样的,^_^
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP