SECONDS変数って、なんだ?

小ネタの投稿。
bashで書いてある定期バッチ処理の処理時間を出力しておくことで、問題に早く気づく何かの役に立つかなぁとおもい実装してみた。


普通の実装

普通に考えられる実装だと、定期バッチが開始した時間(START_TIME)と終了した時間(END_TIME)を取得して、その差の時間が処理時間とするというのが普通ですよね。
多分こんな感じになると思います。

#!/bin/bash

START_TIME=`date +%s`

### ここに 定期バッチ処理 を記載する

END_TIME=`date +%s`
PROCESS_TIME=$((END_TIME - START_TIME))

echo ${PROCESS_TIME}

manでSECONDSに出会う

bashのmanを見ていたところ、変数 ${SECONDS} というものがあるみたいです。
ざっくり訳してみると、
${SECONDS} に値を設定しておけば、値を参照した時までにカウントアップした秒数が取得できるよ
って書いてあります。

SECONDS
       Each time this parameter is referenced, the  number  of  seconds
       since  shell  invocation is returned.  If a value is assigned to
       SECONDS, the value returned upon subsequent  references  is  the
       number  of seconds since the assignment plus the value assigned.
       If SECONDS is unset, it loses its special properties, even if it
       is subsequently reset.

あれ、これ使えば変数1つしか必要ないかも。。。知らなかった。
ちょっとだけ、スッキリしました。もしかすると、意外と知られていない変数がもっと沢山あるかも。

#!/bin/bash

SECONDS=0

### ここに 定期バッチ処理 を記載する

PROCESS_TIME=${SECONDS}

echo ${PROCESS_TIME}