加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 22:47:35 所属栏目:安全 来源:网络整理
导读:问题在于08和09号.我用Google搜索了这个,并找出08和09有问题的原因,但没有解决方案. 这是一个荒谬的例子,用于简要描述我的问题而不深入细节. cursorDay=2;let cursorDay=$cursorDay+1;case "$cursorDay" in1) cursorDay=01;;2) cursorDay=02;;3) cursorDay=0
问题在于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表示八进制数.您可以通过在数字前加上#来强制bash使用给定的基数.
此外,您可以使用printf填充前导零的数字.

所以你的例子可以改写为

cursorDay=2

let cursorDay=10#$cursorDay+1
printf -v cursorDay '%02dn' "$cursorDay"

echo "$cursorDay"

甚至更短

cursorDay=2

printf -v cursorDay '%02dn' $((10#$cursorDay + 1))

echo "$cursorDay"

请注意,您不能省略#和变量名之间的$.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读