Bash - 日期字符串 yyyymmdd 的基础值太大(错误标记为“09”)

Bash -value too great for base (error token is "09") for date string yyyymmdd

我正在尝试生成 yyyymmdd 格式的开始日期,以便该日期是上个月的第三天的第一天。例如,当前月份是七月 (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 格式的月份数字前面有一个前导零。

有什么我遗漏的吗?

提前致谢!

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

您可以在日期值前加上 10# 前缀以强制使用基数。请参阅 Shell Arithmetic.

的倒数第二段
StartDate=$(date -d "-3 month -$((10#$(date +%d)-1)) days" +"%Y%m%d")

+%e(space 填充)替换 +%d(一个月中的零填充日)以避免前导零。