一、函数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的语法就是这么特立独行。至此,问题得到解决。