変数の値が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"
)
数値の前にゼロを付けると、シェルはそれを 8 進数と見なし、8 進数は 0 から 7 までしかありません。
先頭のゼロなしで数値を保持したい場合があるため、これは通常の 10 進数であり、代わりに値を出力するときに先頭のゼロのみを追加します。
a=8; ((a++)); printf "%02d\n" $a
先頭に 0 がある数値は 8 進数として解釈されます
別の expr プロセスを使用できます。echo $(expr "$a" + 1)
または、bash 固有のコンストラクトを使用して、強制ベース 10 を直接使用することもできます。echo $((10#$a+1))
または、var を一度だけexpr
10 進数にフォーマットするために使用できます。a=$(expr "$a" + 0)
数字の後ろにゼロを置くと、09 要素が存在しない 8 進法であると見なされます。
10 進数で作業している場合は、数値宣言の 0 を削除します。
8進数についてはGoogleをチェックし、より明確にするためにbashをチェックしてください。