如何在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
相关产品推荐
相关产品推荐

