linux shell 中函数的返回值问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzgbm/article/details/78185732

直接看问题:要求用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返回的值赋值给一个变量呢?看下面代码四:

扫描二维码关注公众号,回复: 3789327 查看本文章
 #!/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的输出值。

猜你喜欢

转载自blog.csdn.net/wzgbm/article/details/78185732
今日推荐