当我增加一个变量时,仅当变量的值为08 或 09时才会显示错误
a=08; ((a++)); echo "$a"
输出
~$ a=08; ((a++)); echo "$a"
bash: ((: 08: value too great for base (error token is "08")
08
怎么了 ??
我想要结果 09(不是 9。我知道 9 可以通过 实现bc <<< "08+01"
)
当你在一个数字前加上一个零时,shell 认为它是一个八进制数字,而八进制数字只能从 0 到 7。
您可能希望保留没有前导零的数字,因此它是一个普通的十进制数,并且仅在打印值时添加前导零。
a=8; ((a++)); printf "%02d\n" $a
以 0 开头的数字被解释为八进制
您可以使用单独的 expr 进程:echo $(expr "$a" + 1)
或者,您可以直接使用 bash 特定构造一个以 10 为基数的力:echo $((10#$a+1))
或者您可以使用expr
将 var 格式化为十进制一次:a=$(expr "$a" + 0)
当你在一个数字后面加上一个零时,它被认为是八进制的,其中不存在 09 元素。
如果您使用十进制编号,请删除数字声明的 0。
检查谷歌八进制数字和 bash 以获得更多说明。