增加一个数字并在Bash中添加一个前导零

时间:2013-04-23 23:18:47

标签: bash unix 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";

我期望的输出是“03”,实际上我确实得到了输出。但如果我做同样的事情试图获得08或09,我就是这个错误:

line 100: let: cursorDay=08: value too great for base (error token is "08")

问题是,有没有办法“强迫”它将08和09视为普通数字?我找到了几个帖子,详细说明了如何消除零,但我想要零。

3 个答案:

答案 0 :(得分:8)

当您评估算术表达式(如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"

请注意,您无法省略$和变量名称之间的#

答案 1 :(得分:4)

没有“案例”的简短解决方案:

((cursorDay++))                   # increment
cursorDay=0$cursorDay             # add leading 0
echo  "${cursorDay: -2}"          # echo last 2 characters

答案 2 :(得分:1)

只需在数字前加上'0'。

cursorDay=2;
let cursorDay=$cursorDay+1;

case "$cursorDay" in   
1) cursorDay=1;;
2) cursorDay=2;;
3) cursorDay=3;;
4) cursorDay=4;;
5) cursorDay=5;;
6) cursorDay=6;;
7) cursorDay=7;;
8) cursorDay=8;;
9) cursorDay=9;;  
esac  
echo "0$cursorDay";

OR

     case
     ...
    7) cursorDay="07";;
    8) cursorDay="08";;
    9) cursorDay="09";;  

let numericValue=$(expr $cursorDay + 0)