linux - shell 脚本 : Year value is not returned

标签 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

最佳答案

替换:

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/

相关文章:

bash - 在所有直接子目录中执行命令

linux - 如果验证失败,如何再次询问用户输入并获取新值?

python - 根据特定模式将单个文本文件分成多个文件

ruby-on-rails - 将代码从github转移到我自己的git服务器

python - 除了 Udp6SocketTransport Pysnmp 之外还有其他替代方案吗

c# - 单声道 HTTPS 错误 - "Error Writing Headers"

linux - 仅在 shell 脚本中一小时后提取数据

linux - 无法在 VirtualBox 中为 CentOS 6 guest 安装 Guest Additions

regex - 带有复杂分隔符的 Linux grep 命令

c - 如何判断 "exceptional condition"是什么导致 select() 对 errorfds 使用react?