bashで「value too great for base」というエラーになる場合の対処

bashで「value too great for base」というエラーになる場合の対処

Posted at March 12,2014 1:55 AM
Tag:[bash]
  • Hatena ブックマーク
  • del.icio.us
  • livedoor
  • Google Bookmarks
  • Yahoo!ブックマーク
  • POOKMARK Airlines
  • ニフティクリップ
  • Buzzurl
  • newsing it!

bashで「value too great for base」というエラーになる場合の対処方法を紹介します。

value too great for base

1.問題点

次の、2つの引数の合計を出力するスクリプト「test.sh」を実行します。

#!/bin/sh
 
foo=$(( 8 + 1 ))
echo ${foo}

このスクリプトは正常に実行でき、結果として「9」が表示されます。

[~]$ ./test.sh
9

ところが、次のように「8」の先頭に「0」を付与して「08」とすると、「value too great for base」というエラーが発生します。

#!/bin/sh
 
foo=$(( 08 + 1 ))
echo ${foo}
[~]$ ./test.sh
./test.sh: line 3: 08: value too great for base (error token is "08")

2.原因

bashでは、先頭が「0」の数値(たとえば「01」や「0123」など)は8進数のデータとして扱われます。

8進数では「7」に「1」を加えると桁が繰り上がって「10」となるので、「8」と「9」という数はそもそも存在しません。

そのため、「08」や「090567」という「8」や「9」を含む値が出現すると「8進数として扱えない数値」とみなされ、「value too great for base」というエラーになるという訳です。

3.対処方法

$(())の代わりにexprを利用します。

#!/bin/sh
 
foo=`expr 08 + 1`
echo ${foo}

バッククォートの代わりに$()を使うこともできます。

#!/bin/sh
 
foo=$(expr 08 + 1)
echo ${foo}

これでエラーにならずに期待する実行結果を得ることができます。

[~]$ ./test.sh
9

4.参考サイト

参考サイトは下記です。ありがとうございました。

関連記事
トラックバックURL


コメントする
コメントするにはまずサインインしてください。
Loading...