在MacOS终端中获取当月的第一个日期

在MacOS终端中获取当月的第一个日期,macos,shell,date,Macos,Shell,Date,使用命令echo$(日期“++%F”-d“$(日期+'%Y-%m-01')0月”)我可以得到该月的第一个日期。但在mac终端上,情况并非如此。需要改变什么 echo $(date "+%F" -d "$(date +'%Y-%m-01') 0 month") date: illegal time format usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]]

使用命令
echo$(日期“++%F”-d“$(日期+'%Y-%m-01')0月”)
我可以得到该月的第一个日期。但在mac终端上,情况并非如此。需要改变什么

echo $(date "+%F" -d "$(date +'%Y-%m-01') 0 month")
date: illegal time format
usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
            [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]

*BSD和GNU系统中的
date
库不同,支持的选项也不同。在GNU date中支持无数函数的
-d
标志被BSD中的
-f
选项所取代(日期请参见)

但是,对于您的需求,您需要使用
-v
标志来调整时间。所以本月的第一天应该是

date -v1d -v"$(date '+%m')"m '+%F'
  • -v1d
    是一个时间调整标志,用于移动到每月的第一天
  • -v“$(日期'+%m')”m
    中,我们使用
    日期'+%m'
    获取当前月数,并使用它填充月份调整字段。例如,对于2020年8月,其设置为
    -v8m
  • '+%F'
    将以
    YYYY-MM-DD
    格式打印日期。如果您的日期版本不支持它,请明确使用
    +%Y-%m-%d
或者如果您的要求是打印所有月份的日期

for mon in {1..12}; do
    date -v1d -v"$mon"m '+%F'
done

为什么要回显和
$(..)
,您只需在终端中运行
date
-
日期“+%F”-d”$(日期+'%Y-%m-01')0个月“
<代码>需要更改什么?您正在使用的日期程序。是的,您可以删除这些echo和$(..)。我在mac终端上运行时遇到问题