2

このような負の数を取得するbashを使用してスクリプトを作成しています

-001 , -002 , -003 , ........................., -008 , -009 , -010 , -011 , -012 . ....

それらを正の数に変更する必要があるため、-1 を掛けることにしました。それで

$ val=$(( -1*-001 ))
$ echo $val
$ 1
$ val=$(( -1*-002 ))
$ echo $val
$ 2

結果は -007 までは問題ありませんが、-008 と -009 を乗算すると、次のようにエラーが発生します。

$ val=$(( -1*-008 ))
bash: -1*-008: value too great for base (error token is "008")

$ val=$(( -1*-009 ))
bash: -1*-009: value too great for base (error token is "009")

もう1つの奇妙な動作は、-010、-011、-012などで乗算すると...以下のような異常な結果が発生することです

$ val=$(( -1*-010 ))
$ echo $val
$ 8
$ val=$(( -1*-011 ))
$ echo $val
$ 9
$ val=$(( -1*-012 ))
$ echo $val
$ 10
$ val=$(( -1*-013 ))
$ echo $val
$ 11

and so on............

なぜこれが起こるのですか?

4

2 に答える 2

8

先行ゼロは 8 進数を表します。010 と 10 は同じ番号ではありません。最初は 8 進数です: 010 8 進数は 10 進数で 8 です。同様に、「009」は実数ではないため、表示されているエラー: 8 進数に数字「9」はありません。

先頭のゼロを削除する必要があります。

于 2013-05-15T19:09:48.197 に答える
6

10# プレフィックスを使用して、(8 進数ではなく) 10 進数値を強制できます。

$ val=$(( -1*-10#008 ))
$ echo $val
8
于 2013-05-15T19:57:50.140 に答える