免费注册 查看新帖 |

Chinaunix

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

shell函数是否有返回值 [复制链接]

论坛徽章:
3
数据库技术版块每日发帖之星
日期:2016-05-27 06:20:00数据库技术版块每日发帖之星
日期:2016-06-04 06:20:00数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-09 09:01 |只看该作者 |倒序浏览
#!/bin/bash
sum_test()
{
   a=(("$1"+"$2"))
   return a
}

b=sum_test "$1" "$2"
echo $b

./sum_test.sh 10 20
输出:
sum_test

为什么不是30呢?

论坛徽章:
0
2 [报告]
发表于 2010-06-09 09:15 |只看该作者
  1. #!/bin/bash
  2. sum_test()
  3. {
  4.    a=$(($1+$2))
  5.    return $a
  6. }

  7. sum_test "$1" "$2"
  8. b=$?
  9. echo $b
复制代码

论坛徽章:
0
3 [报告]
发表于 2010-06-09 09:19 |只看该作者
你对返回值的理解有偏差,linux中的返回值一般指命令执行后的返回值,一般是命令执行成功返回0,执行失败返回1,命令执行后,可以用echo $?查看返回值是多少

函数也可以看作是一个命令,你写的函数中只有return语句,并没有打印语句,执行该函数后,当然不会打印任何东西

给个例子帮助你理解
  1. [root@Mylinux tmp]# cat my.sh
  2. #!/bin/bash
  3. sum_test()
  4. {
  5.    echo $(($1+$2))
  6.    return $(($2-$1))
  7. }
  8. sum_test $1 $2
  9. [root@Mylinux tmp]# ./my.sh 1 3
  10. 4
  11. [root@Mylinux tmp]# echo $?
  12. 2
复制代码

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
4 [报告]
发表于 2010-06-09 09:25 |只看该作者
http://www.tsnc.edu.cn/default/t ... l/complexfunct.html

return命令 [1]  可选的允许带一个整型参数, 这个整数将作为函数的"退出状态码"返回给调用这个函数的脚本, 并且这个整数也被赋值给变量$?.

论坛徽章:
3
数据库技术版块每日发帖之星
日期:2016-05-27 06:20:00数据库技术版块每日发帖之星
日期:2016-06-04 06:20:00数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
5 [报告]
发表于 2010-06-09 10:34 |只看该作者
基本明白了,那意思是说shell里的函数没有像其他语言一样将函数的返回值赋予给某个变量吗?

c=sum_test $1 $2
echi $c

论坛徽章:
0
6 [报告]
发表于 2010-06-09 11:27 |只看该作者
回复 5# hxl


    没有。。。。

论坛徽章:
0
7 [报告]
发表于 2010-06-09 17:44 |只看该作者
都是全局变量,直接赋值了用不就可以了么,为什么非要return出来呢

论坛徽章:
0
8 [报告]
发表于 2010-06-09 21:33 |只看该作者
c=$(sum_test $1 $2)

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
9 [报告]
发表于 2010-06-09 23:18 |只看该作者
回复 5# hxl


打开ABS,看看335页。

Advanced Bash-Scripting Guide 3.9.1 中文版.pdf
http://bbs.chinaunix.net/thread-1610033-1-1.html

论坛徽章:
0
10 [报告]
发表于 2010-06-10 15:04 |只看该作者
cat -nv shell-test.sh


#!/bin/bash
sum_test()
{
   echo $(($1+$2))
   return $(($2-$1))
}
sum_test $1 $2


c=`sh ./shell-test.sh 1 9`

echo $?

10

我在cywin上可以这样用
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP