2013-03-31 25 views
1

當我遞增以下錯誤的可變顯示僅當變量的值是08或09如何在bash遞增變量「變種」如果「VAR = 08」

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"實現)

回答

9

當你在它前面加上數以零,外殼認爲它是一個八進制數和八進制數字只能去從0到7.

您可能希望保留不帶前導零的數字,因此它是一個正常的十進制數,而只是在打印該值時添加前導零。

a=8; ((a++)); printf "%02d\n" $a 
+0

添加@ pixelbeat代碼它工作正常。 'A = 08; a =「'echo $(expr」$ a「+ 1)'」; printf「%02d \ n」$ a' – totti

0

當你把一個零後面一個數字,它是在八進制基地,這裏不存在09元考慮。

刪除編號聲明的0,如果您使用的是十進制編號。

檢查谷歌的八進制數和bash的更多說明。

1

數字與0領先被解釋爲八進制

你可以使用一個單獨的expr的過程:echo $(expr "$a" + 1)

或者你可以使用bash的特定構造的空軍基地10直接:echo $((10#$a+1))

或者你可以使用expr將var格式化爲小數點一次a=$(expr "$a" + 0)

+0

感謝'echo $(expr「$ a」+ 1)' – totti