bashで「08: value too great for base (error token is “08”)」が発生する場合の対処

プログラム
この記事は約2分で読めます。
スポンサーリンク

bashで日付データを使用する際にハマったので記録として残しておきます。

エラー状況

以下のシェルスクリプトを例にします。
日付を取得してインクリメントする処理になります。
これを8日に実行するとエラーが発生してしまいます。

#!/bin/bash

DATE_DATA=`date +%d`

echo "$(( DATE_DATA + 1 ))"
08: value too great for base (error token is "08")

原因

取得した日付データを見ると先頭に「0」が付与されています。

#!/bin/bash

DATE_DATA=`date +%d`

echo $DATE_DATA
08

bashでは先頭に「0」が付与されている数値は8進数として扱われるようです。
そのため、8進数として「08」という値は存在しない値となりエラーが発生します。
日付データを扱う場合は「毎月8日」や「毎年8月」など8の日付の際に発生します。

対処方法

bashで日付データを取得する場合に「date +%d」を使用すると1桁の日付の場合は先頭に「0」が付与されます。
数値として扱う場合は十進数として扱いたいので、先頭から「0」を削除する「%-d」オプションを使用します。

#!/bin/bash

DATE_DATA=`date +%-d`

echo $DATE_DATA
8

この設定でシェルスクリプトを実行すると8日の場合でもエラー無く実行できます。

#!/bin/bash

DATE_DATA=`date +%-d`

echo "$(( DATE_DATA + 1 ))"
9

タイトルとURLをコピーしました