对于日期字符串yyyymmdd

时间:2015-07-09 18:58:19

标签: bash shell date base

我正在尝试以yyyymmdd格式生成一个startDate,这个日期是上个月第三天的第一天。例如,当前月份是七月(07),所以我需要将我的开始日期作为四月(04) - 20150401的第一天。

为了在bash中实现这一点,我使用了以下命令:

StartDate=$(date -d "-3 month -$(($(date +%d)-1)) days" +"%Y%m%d")

但是,这给了我以下错误:

line 93: 09: value too great for base (error token is "09")

我不想更改StartDate变量的格式。对于单个数字月份(1-9),格式应该在yyyymmdd格式的月份数字前面有一个前导零。

我有什么遗失的东西吗?

提前致谢!

2 个答案:

答案 0 :(得分:6)

bash看到09并尝试将其视为失败的八进制数。

您可以使用10#作为日期值的前缀以强制使用基数。请参阅Shell Arithmetic的倒数第二段。

StartDate=$(date -d "-3 month -$((10#$(date +%d)-1)) days" +"%Y%m%d")

答案 1 :(得分:5)

+%d(月填充日期为零)替换为+%e(空格填充)以避免前导零。