💭

7月に動作していた処理が8月にエラー

2021/08/02に公開

TL;DR

0始まりの数字を10進数で解釈させたい場合は$((10#$val))のように記載する。

経緯

date +%mの結果は、8月の場合は'08'となる。これを先頭の0を取って比較したいため$(($val))とやっていたところ、7月までは問題ないのだが8月になって以下のようなエラーが出る。

08: value too great for base (error token is "08")

bashでは一文字目が0の数字は8進数とみなされるため、08という表記はダメ、というエラー。

対応としては、$((10#$val))のように変数の頭に'10#'をつけることで10進数で解釈させることができる。

https://stackoverflow.com/questions/8078167/printf-in-bash-09-and-08-are-invalid-numbers-07-and-06-are-fine

同じようなことは過去してきたと思ったのだが、今回初めて遭遇してかなりびっくりした。

GitHubで編集を提案

Discussion