增加一个数字并在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" 请注意,您不能省略#和变量名之间的$. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |