我想要获得上个月的那一年。 以下代码返回空白年份值(即,不打印年份值)
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
答案 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
不兼容。)