我正在尝试获取上个月的年份。 下面的代码返回空白年份值(即没有打印年份值)
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
最佳答案
替换:
return "$PRVYRY"
与:
echo "$PRVYRY"
return 语句设置退出代码。你不想要那个。你想在标准输出上提供字符串。
更简单的例子
考虑这个简单的函数:
$ fn() { return 100; }
现在让我们运行它:
$ fn
它不产生任何输出。但是它确实设置了退出代码:
$ echo $?
100
退出代码限制为 8 位。所以,您可能不想通过它们回到过去。
相比之下,考虑哪个确实在标准输出上产生了一个字符串:
$ 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
不兼容。)
关于linux - shell 脚本 : Year value is not returned,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32902807/