对于日期字符串yyyymmdd,Bash -value对于base(错误标记为"09")来说太大了

act*_*ner 4 bash shell date base

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

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

StartDate=$(date -d "-3 month -$(($(date +%d)-1)) days" +"%Y%m%d")
Run Code Online (Sandbox Code Playgroud)

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

line 93: 09: value too great for base (error token is "09")
Run Code Online (Sandbox Code Playgroud)

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

有什么东西我错过了吗?

提前致谢!

Eta*_*ner 6

bash正在看到09并试图将其视为一个失败的八进制数.

您可以在日期值前加上10#强制基数.请参阅Shell算术的倒数第二段.

StartDate=$(date -d "-3 month -$((10#$(date +%d)-1)) days" +"%Y%m%d")
Run Code Online (Sandbox Code Playgroud)


Cyr*_*rus 5

+%d(+%e空间填充)替换(每月零填充)以避免前导零.