読者です 読者をやめる 読者になる 読者になる

bashのSECONDS変数

bashには参照するたびにランダムな数値を返す、RANDOMって変わった変数があります。

$ echo $RANDOM
32036
$ echo $RANDOM
9500
$ echo $((RANDOM % 6 + 1))  ##サイコロを振る
2


最近、似たような変数でSECONDSというのがあるのに気づきました。

このパラメータを参照すると、シェルが起動されてからの秒数が返されます。
SECONDSに値を代入した場合、それ以降の参照において返される値は、代入された値と代入以降の秒数を足した値になります。
SECONDSをunsetすると、この変数の特殊な性質は無くなります。後で再びsetしても元には戻りません。

今までは特定処理の処理時間を測定するのにこう書いてましたが

#!/bin/bash

BEFORE=`date +%s`

### 時間測定したい処理
sleep 3
###

AFTER=`date +%s`
TIME=$((AFTER - BEFORE))

echo $TIME

SECONDSを使うとこう書けます。

#!/bin/bash

SECONDS=0

### 時間測定したい処理
sleep 3
###

TIME=$SECONDS

echo $TIME
$ sh seconds.sh
3


便利ですね!
他にもいろんな特殊変数あるので、bashのmanを読んでみましょう!