linux shell 中函数的返回值问题

本文通过四个示例代码,详细解析了Shell脚本中函数返回值的使用方式,包括如何正确获取函数返回的天数差,并解释了 $? 和 echo 在函数调用中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接看问题:要求用shell实现一个函数,求两天的天数差。

代码一:

#!/bin/bash
function diffDay()
{
    local stampDiff=`expr $1 - $2`
    local dayDiff=`expr $stampDiff / 86400`
    return $dayDiff
}

startDay=`date +%s  --date "1 days ago"`
endDay=`date +%s  --date "60 days ago"

diff=`diffDay $startDay $endDay`
echo "diffday : "$diff

输出结果:

diffday :

发现没有输出值,那输出的值去哪了,看代码二:

#!/bin/bash
function diffDay()
{
    local stampDiff=`expr $1 - $2`
    local dayDiff=`expr $stampDiff / 86400`
    return $dayDiff
}

startDay=`date +%s  --date "1 days ago"`
endDay=`date +%s  --date "60 days ago"

diff=`diffDay $startDay $endDay`
echo $?
echo "diffday : "$diff

输出结果:

59
diffday :

shell函数将返回值输出给了$?(代表了上个命令的退出状态,或函数的返回值),先说一个题外问题,注意理解上个命令,看下面代码三:

 #!/bin/bash
function diffDay()
{
    local stampDiff=`expr $1 - $2`
    local dayDiff=`expr $stampDiff / 86400`
    return $dayDiff
}


startDay=`date +%s  --date "1 days ago"`
endDay=`date +%s  --date "60 days ago"`

diff=`diffDay $startDay $endDay`
echo $?
echo $?

输出结果为:

59
0

如何将shell返回的值赋值给一个变量呢?看下面代码四:

 #!/bin/bash
function diffDay()
{
    local stampDiff=`expr $1 - $2`
    local dayDiff=`expr $stampDiff / 86400`
    return $dayDiff
}

function diffDay2()
{
    local stampDiff=`expr $1 - $2`
    local dayDiff=`expr $stampDiff / 86400`
    echo $dayDiff
    return $dayDiff
}

startDay=`date +%s  --date "1 days ago"`
endDay=`date +%s  --date "60 days ago"`

diff=`diffDay $startDay $endDay`
echo "diffday : "$diff

diff=`diffDay2 $startDay $endDay`
echo "diffday : "$diff

diffDay $startDay $endDay
diff=$?
echo "diffday : "$diff

输出结果:

diffday :
diffday : 59
diffday : 59

可以得出结论:在shell函数return的值是赋值给$?的,而变量接收的值是函数中的echo的输出值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值