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

数値の前にゼロを付けると、シェルはそれを 8 進数と見なし、8 進数は 0 から 7 までしかありません。

先頭のゼロなしで数値を保持したい場合があるため、これは通常の 10 進数であり、代わりに値を出力するときに先頭のゼロのみを追加します。

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

先頭に 0 がある数値は 8 進数として解釈されます

別の expr プロセスを使用できます。echo $(expr "$a" + 1)

または、bash 固有のコンストラクトを使用して、強制ベース 10 を直接使用することもできます。echo $((10#$a+1))

または、var を一度だけexpr10 進数にフォーマットするために使用できます。a=$(expr "$a" + 0)

于 2013-03-31T11:35:23.053 に答える
0

数字の後ろにゼロを置くと、09 要素が存在しない 8 進法であると見なされます。

10 進数で作業している場合は、数値宣言の 0 を削除します。

8進数についてはGoogleをチェックし、より明確にするためにbashをチェックしてください。

于 2013-03-31T11:32:52.740 に答える