Cpt*_*rkt 5 unix bash leading-zero
问题在于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";
Run Code Online (Sandbox Code Playgroud)
我期望的输出是"03",实际上我确实得到了输出.但如果我做同样的事情尝试获得08或09,我这个错误:
line 100: let: cursorDay=08: value too great for base (error token is "08")
Run Code Online (Sandbox Code Playgroud)
问题是,有没有办法"强制"它将08和09视为常规数字?我发现了几个帖子详细说明如何消除零,但我想要零.
当您评估算术表达式(如let)时,前导0表示八进制数.您可以通过在数字前添加基数#来强制bash使用给定的基数.此外,您可以使用printf填充前导零的数字.
所以你的例子可以改写为
cursorDay=2
let cursorDay=10#$cursorDay+1
printf -v cursorDay '%02d\n' "$cursorDay"
echo "$cursorDay"
Run Code Online (Sandbox Code Playgroud)
甚至更短
cursorDay=2
printf -v cursorDay '%02d\n' $((10#$cursorDay + 1))
echo "$cursorDay"
Run Code Online (Sandbox Code Playgroud)
请注意,你不能忽略$的之间#和变量名.