shell函数内调用另一个函数(不带返回值和带返回值)
xiaomei1994 · 100浏览 · 发布于2022-08-04 +关注

本文主要介绍了shell函数内调用另一个函数(不带返回值和带返回值),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、函数B调用不带返回值的函数A

新建文件,命名为 test.sh,添加如下代码:

#!/bin/bash
 
# 即将被调用的函数A
function A(){
    a="aaa"
    echo $a
}
 
# 函数B,直接调用A
function B(){
    A
    echo "bbb"
}
 
B

命令行中通过sh test.sh执行结果:

在这里插入图片描述

二、函数B调用带返回值的函数A,并接收函数A的返回值进行输出

如果函数A有return,是不是在上面例子的基础上,把A函数加多一个return就可以了呢?那么我们来试一下,代码如下:

#!/bin/bash
 # 即将被调用的函数A
function A(){
    a=10
    return $a
}
 # 函数B
function B(){
    a=`A`  # 注意,这里不能直接写成a=A
    echo $a
}
 B

命令行执行sh test.sh查看执行结果:

在这里插入图片描述

等等,为什么结果输出为空呢?原来shell中调用带返回值的函数之后,返回值自动保存在$?中,所以将函数B改成如下即可:

#!/bin/bash
 # 即将被调用的函数A
function A(){
    a=10
    return $a
}
 # 函数B
function B(){
    a=`A`
    echo $?  # 注意:这里要用英文的?,不能用中文的?
}
 B

查看执行结果:

在这里插入图片描述

然而,题主遇到返回结果并不是期望结果的情况。代码如下:

#!/bin/bash
 # 即将被调用的函数A
function A(){
    a="aaa"
    return $a
}
 # 函数B
function B(){
    a=`A`
    echo $?
    echo "bbb"
}
 B

命令行执行sh test.sh查看结果:

在这里插入图片描述

这是什么意思呢?为什么是255,而不是期望的结果“aaa”?原因是shell中用return的话,return的值只能为整形,其它非整形的,如想要直接return是获取不到的。
那么,该如何解决该问题呢?代码如下:

#!/bin/bash
 # 即将被调用的函数A
function A(){
    a="aaa"
    echo $a
}
 # 函数B
function B(){
    a=`A`
    echo $a
    echo "bbb"
}
 B

查看结果:

在这里插入图片描述

怎么样?居然不用return字段,很奇怪吧?shell的语法就是这么特立独行。至此,问题得到解决。


相关推荐

将Fedora 29升级到Fedora 30

吴振华 · 465浏览 · 2019-05-14 22:00:02
使用Nginx反向代理到go-fastdfs

iamitnan · 525浏览 · 2019-05-23 13:42:00
利用VLC搭建组播流服务器

追忆似水年华 · 2338浏览 · 2019-06-14 11:27:06
用Bash脚本监控Linux上的内存使用情况

吴振华 · 614浏览 · 2019-06-24 11:27:02
加载中

0评论

评论
分类专栏
小鸟云服务器
扫码进入手机网页