当我仅在变量值为 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"
)
答案 0 :(得分:9)
当你给一个带零的数字加前缀时,shell认为它是一个八进制号,而八进制数字只从0到7。
您可能希望保留不带前导零的数字,因此它是正常的十进制数,而只是在打印值时添加前导零。
a=8; ((a++)); printf "%02d\n" $a
答案 1 :(得分:1)
前导0的数字被解释为八进制
您可以使用单独的expr流程:echo $(expr "$a" + 1)
或者您可以直接使用bash特定构造强制基础10:echo $((10#$a+1))
或者您可以使用expr
将var格式化为十进制一次:a=$(expr "$a" + 0)
答案 2 :(得分:0)
当你在数字后面加零时,它被认为是八进制数,不存在09元素。
如果使用十进制编号,则删除数字声明0。
检查谷歌的八进制数字和bash以获得更多说明。