1

当我增加一个变量时,仅当变量的值为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"

4

3 回答 3

9

当你在一个数字前加上一个零时,shell 认为它是一个八进制数字,而八进制数字只能从 0 到 7。

您可能希望保留没有前导零的数字,因此它是一个普通的十进制数,并且仅在打印值时添加前导零。

a=8; ((a++)); printf "%02d\n" $a
于 2013-03-31T11:30:01.960 回答
1

以 0 开头的数字被解释为八进制

您可以使用单独的 expr 进程:echo $(expr "$a" + 1)

或者,您可以直接使用 bash 特定构造一个以 10 为基数的力:echo $((10#$a+1))

或者您可以使用expr将 var 格式化为十进制一次a=$(expr "$a" + 0)

于 2013-03-31T11:35:23.053 回答
0

当你在一个数字后面加上一个零时,它被认为是八进制的,其中不存在 09 元素。

如果您使用十进制编号,请删除数字声明的 0。

检查谷歌八进制数字和 bash 以获得更多说明。

于 2013-03-31T11:32:52.740 回答