You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shell脚本中正确获取上月月份名称并定义为变量?

获取上月月份名称的Shell解决方案

看起来你遇到的是BSD Date和GNU Date的语法差异问题——很多类Unix系统(比如macOS)自带的是BSD版本的date命令,而网上常见的date -d是GNU Date(Linux系统默认)的专属语法,所以才会报illegal option -- d的错误。咱们来针对性解决:

针对BSD Date(如macOS、FreeBSD)

BSD Date用-v选项来调整日期,要获取上月的月份名称,直接用:

  • 获取缩写月份(如Mar):
    last_month=$(date -v-1m +%b)
    
  • 获取全称月份(如March):
    last_month=$(date -v-1m +%B)
    

你之前用的TZ=CST+24 date +%b之所以输出Apr,是因为TZ=CST+24相当于把时区设置为比UTC快24小时(和UTC日期一致),如果当前是4月1日,这个命令并不会跳转到上月,只是显示同一日期的另一个时区时间,所以结果不对。

针对GNU Date(如Linux系统)

如果你的环境是Linux,直接用你最初尝试的语法(调整格式即可):

  • 获取缩写月份:
    last_month=$(date -d "last month" +%b)
    
  • 获取全称月份:
    last_month=$(date -d "last month" +%B)
    

验证方法

执行完命令后,你可以用echo $last_month来查看变量值,确认是否符合预期(比如当前是4月的话,输出应该是Mar或March)。

内容的提问来源于stack exchange,提问作者ashish_k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:11:43