在csh中获取上个月的最后一天?
如何在csh中获取上个月的最后一天?
这是到目前为止的代码。如果您从 (FreeBSD sh) 命令行执行下面的 cal 命令,它几乎可以工作,但我无法正确转义它以在脚本中运行。我所说的几乎工作,是指当 2010 年 2 月的最后一天是 28 时,它返回 31。
#!/bin/csh
set lastdayoflastmonth=`cal `date '+%m'` `date '+%Y'` | grep . | fmt -1 | tail -1`
echo $lastdayoflastmonth
需要明确的是:
如果今天是 2010 年 3 月 26 日,它应该返回数字 28,这是 2010 年 2 月的最后一天.
如果今天是 2010 年 7 月 1 日,则应返回数字 30,这是 2010 年 2 月的最后一天。 2010 年 6 月的一天。
更新:在下面的评论中从 Joshua Smith 收到的工作答案:date -v31d -v-1m '+%d'
谢谢!
How do you get the last day of the last month in csh?
Here is the code so far. The cal command below almost works if you execute it from the (FreeBSD sh) command line, but I'm having trouble escaping it properly to run within a script. By almost work, I mean it returns 31, when the last day of February 2010 is 28.
#!/bin/csh
set lastdayoflastmonth=`cal `date '+%m'` `date '+%Y'` | grep . | fmt -1 | tail -1`
echo $lastdayoflastmonth
To be clear:
If today is March 26th 2010, it should return the number 28, which is the last day of the February 2010.
If today is July 1st 2010, it should return the number 30, which is the last day of June 2010.
Update: working answer received from Joshua Smith in comments below: date -v31d -v-1m '+%d'
Thank you!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
只需使用 date 命令:
当月最后一天的日期名称
将为您提供下个月
:如果您想要上个月:
-- 编辑:评论者对 GNU Date 有疑问 ---
如果您使用 gnu date (上面使用 BSD 日期)您可以使用 -d 标志。不过,它有点复杂(gnu date 不会对月份长度模糊做同样的事情)。获取当月上个月的最后一天
:
以及
上个月下个月的最后一天:
Just use the date command:
will give you the date name of the last day of the current month
for next month:
If you want the previous month:
-- EDIT: commenter has question about GNU Date ---
If you are using gnu date (the above uses BSD date) you can use the -d flag. It's a little more complicated, though (gnu date doesn't do the same thing with month length fuzziness). to get the last day of the month for last month
for the current month:
and for next month
for last month:
我认为(如果我没记错的话)在“嵌套”它们时必须将反引号(``)加倍。
尝试(未经测试):
I think (if I recall correctly) that you have to double the backticks (``) when 'nesting' them.
Try (untested):
您可以缩短命令以省略
grep/fmt
。而且,没有必要将它们塞进一行。例如
you can shorten your command to omit the
grep/fmt
. also, there is no need to cram them into one line.eg