问题出在数字 08 和 09 上。我用 Google 搜索了一下,找到了 08 和 09 有问题的原因,但没有解决方案。
这是一个荒谬的例子,用于简要描述我的问题而没有深入细节。
cursorDay=2;
let cursorDay=$cursorDay+1;
case "$cursorDay" in
1) cursorDay=01;;
2) cursorDay=02;;
3) cursorDay=03;;
4) cursorDay=04;;
5) cursorDay=05;;
6) cursorDay=06;;
7) cursorDay=07;;
8) cursorDay=08;;
9) cursorDay=09;
esac
echo "$cursorDay";
我期望的输出是“03”,我确实得到了那个输出。但是如果我做同样的事情来尝试获得 08 或 09,我会出现这个错误:
line 100: let: cursorDay=08: value too great for base (error token is "08")
问题是,有什么方法可以“强制”将 08 和 09 视为常规数字吗?我找到了几篇详细介绍如何消除零的帖子,但我想要一个零。
最佳答案
当您评估算术表达式时(如 let 所做的),前导 0 表示八进制数。您可以通过在数字前加上 base#
来强制 bash 使用给定的基数。
此外,您可以使用 printf 用前导零填充数字。
所以你的例子可以重写为
cursorDay=2
let cursorDay=10#$cursorDay+1
printf -v cursorDay '%02d\n' "$cursorDay"
echo "$cursorDay"
或更短为
cursorDay=2
printf -v cursorDay '%02d\n' $((10#$cursorDay + 1))
echo "$cursorDay"
请注意,您不能省略 #
和变量名之间的 $
。
关于bash - 在 Bash 中递增数字并添加前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16180774/