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

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

Posted at March 12,2014 1:55 AM
Tag:[bash]

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


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)