免费注册 查看新帖 |

Chinaunix

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

[数值计算] echo命令带有return的意思吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2018-01-22 19:12 |只看该作者 |倒序浏览
在学习《Linux Shell 命令行及脚本编程实例详解》第八章里面有一个求n!的脚本。脚本命令如下:
##################################################################################
#! /bin/bash
# 定义函数factorial——计算给定命令行的阶乘
factorial ()
{

    # 定义本地变量i
    local i=$1
    # 定义本地变量f
    local f
    # 声明变量i为整数
    declare -i i
    # 声明变量f为整数
    declare -i f

    # factorial被调用直到$f<=2
    # 开始递归
    [ $i -le 2 ] && echo $i || { f=$((i-1)); f=$(factorial $f); f=$((f*i)); echo $f; } ##(个人觉得这个需要额外定义一个0!=1的条件)

}

# 显示函数用法
[ $# -eq 0 ] && { echo "Usage: $0 number"; exit 1; }

# 调用函数factrial
factorial $1

####################################################################################

里面的命令行[ $i -le 2 ] && echo $i || { f=$((i-1)); f=$(factorial $f); f=$((f*i)); echo $f; }
说当i的值小于等于2时就echo出i,这个echo $i,是不是带有C语言里的return i的意思?

论坛徽章:
0
2 [报告]
发表于 2018-01-22 20:26 |只看该作者
已解决,echo 没有return的意思。刚才调试了一下脚本,从下面的过程找到了结果:

[20:04:09][ade@ade /home/bash_script]$ bash -x fact.sh 4
+{37:}'[' 1 -eq 0 ']'
+{40:}factorial 4
+{22:factorial}local i=4
+{24:factorial}local f
+{26:factorial}declare -i i
+{28:factorial}declare -i f
+{32:factorial}'[' 4 -le 2 ']'
+{32:factorial}f=3
++{32:factorial}factorial 3
++{22:factorial}local i=3
++{24:factorial}local f
++{26:factorial}declare -i i
++{28:factorial}declare -i f
++{32:factorial}'[' 3 -le 2 ']'
++{32:factorial}f=2
+++{32:factorial}factorial 2
+++{22:factorial}local i=2
+++{24:factorial}local f
+++{26:factorial}declare -i i
+++{28:factorial}declare -i f
+++{32:factorial}'[' 2 -le 2 ']'
+++{32:factorial}echo 2
++{32:factorial}f=2
++{32:factorial}f=6
++{32:factorial}echo 6
+{32:factorial}f=6
+{32:factorial}f=24
+{32:factorial}echo 24
24

论坛徽章:
0
3 [报告]
发表于 2018-01-22 20:27 |只看该作者
已解决,echo 没有return的意思。刚才调试了一下脚本,从下面的过程找到了结果:

[20:04:09][ade@ade /home/bash_script]$ bash -x fact.sh 4
+{37:}'[' 1 -eq 0 ']'
+{40:}factorial 4
+{22:factorial}local i=4
+{24:factorial}local f
+{26:factorial}declare -i i
+{28:factorial}declare -i f
+{32:factorial}'[' 4 -le 2 ']'
+{32:factorial}f=3
++{32:factorial}factorial 3
++{22:factorial}local i=3
++{24:factorial}local f
++{26:factorial}declare -i i
++{28:factorial}declare -i f
++{32:factorial}'[' 3 -le 2 ']'
++{32:factorial}f=2
+++{32:factorial}factorial 2
+++{22:factorial}local i=2
+++{24:factorial}local f
+++{26:factorial}declare -i i
+++{28:factorial}declare -i f
+++{32:factorial}'[' 2 -le 2 ']'
+++{32:factorial}echo 2
++{32:factorial}f=2
++{32:factorial}f=6
++{32:factorial}echo 6
+{32:factorial}f=6
+{32:factorial}f=24
+{32:factorial}echo 24
24


论坛徽章:
0
4 [报告]
发表于 2018-01-22 20:27 |只看该作者
已解决,echo 没有return的意思。刚才调试了一下脚本,从下面的过程找到了结果:

[20:04:09][ade@ade /home/bash_script]$ bash -x fact.sh 4
+{37:}'[' 1 -eq 0 ']'
+{40:}factorial 4
+{22:factorial}local i=4
+{24:factorial}local f
+{26:factorial}declare -i i
+{28:factorial}declare -i f
+{32:factorial}'[' 4 -le 2 ']'
+{32:factorial}f=3
++{32:factorial}factorial 3
++{22:factorial}local i=3
++{24:factorial}local f
++{26:factorial}declare -i i
++{28:factorial}declare -i f
++{32:factorial}'[' 3 -le 2 ']'
++{32:factorial}f=2
+++{32:factorial}factorial 2
+++{22:factorial}local i=2
+++{24:factorial}local f
+++{26:factorial}declare -i i
+++{28:factorial}declare -i f
+++{32:factorial}'[' 2 -le 2 ']'
+++{32:factorial}echo 2
++{32:factorial}f=2
++{32:factorial}f=6
++{32:factorial}echo 6
+{32:factorial}f=6
+{32:factorial}f=24
+{32:factorial}echo 24
24


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP