Shell脚本:不返回年份值

时间:2015-10-02 07:57:39

标签: linux shell unix

我想要获得上个月的那一年。 以下代码返回空白年份值(即,不打印年份值)

findPrvYear(){
(
set `date +%m" "%Y`
CURMTHY=$1
CURYRY=$2
if [ $CURMTHY -eq 01 ]
then PRVMTHY=12
     PRVYRY=$(expr $CURYRY - 1)
else PRVMTHY=$(expr $CURMTHY - 1)
     PRVYRY="$CURYRY"
fi
return "$PRVYRY"
)
}

thisMonthY=$(date +%m)
thisYearY=$(date +%y)
retPrvYear=$(findPrvYear $thisMonthY $thisYearY)
echo "valueassigned" $retPrvYear   //This is not printing year value

1 个答案:

答案 0 :(得分:3)

替换:

return "$PRVYRY"

使用:

echo "$PRVYRY"

return语句设置退出代码。你不想要那个。您想在标准输出上提供字符串。

更简单的例子

考虑这个简单的功能:

$ fn() { return 100; }

现在让我们运行它:

$ fn

它不产生任何输出。但它会设置退出代码:

$ echo $?
100

退出代码限制为8位。所以,你可能不希望通过它们回过头来。

相比之下,考虑哪个会在stdout上生成一个字符串:

$ fn() { echo 100; }
$ fn
100

可以根据需要使用命令替换来捕获该字符串:

$ x=$(fn)
$ echo $x
100

其他问题

此代码为函数提供参数:

retPrvYear=$(findPrvYear $thisMonthY $thisYearY)

由于set语句,思考,函数findPrvYear忽略了这些参数。

简化

如果你有GNU date,那么代码可以替换为:

retPrvYear=$(date -d '1 month ago' +%Y)

(这与BSD(OSX)date不兼容。)