问题
看如下shell错误,输入 07 正常执行,输入08 就报错,这是为啥呢?
$a=07 ; ((a<10)) && echo "ok" || echo "error"
ok
$a=08 ; ((a<10)) && echo "ok" || echo "error"
bash: ((: 08: value too great for base (error token is "08")
error
原因
在Bash中,以零开头的数字会被解释为八进制数。
因此,当你尝试使用08
作为八进制数时,会出现错误,因为八进制数中不存在数字8
。这是造成报错的原因。
要避免这种情况,你可以将数字转换为十进制。这意味着使用单个数字或者去掉开头的零。
应用场景
之所以遇到这么一个坑,是因为用date获取秒时,前面自动带0导致,1-9秒时前面自动补充0。
通过在S前面添加横杠的方式,可以让输出不带0,问题解决。
$date +%S
08
$date +%-S
8