実行時間を記録するために、シェルスクリプト内でdateコマンドを使用することがよくあります。
ただし、ただ変数に入れるだけではいつ呼び出しても値が同じになってしまうので、動的に変数内の日付を書き換える方法を紹介します。
よくあるやり方
[test@localhost ~]$ DATE=$(date +"%Y/%m/%d-%H:%M:%S")
[test@localhost ~]$
[test@localhost ~]$ date
2023年 11月 17日 金曜日 10:53:09 JST
[test@localhost ~]$ echo "$DATE"
2023/11/17-10:53:05
[test@localhost ~]$
date コマンドの実行結果を変数DATEにとっていますが、変数に入れたタイミングでの文字列が記録されているので、
実際に変数を呼び出した時に中身の時間は更新されておらず、正しい時刻になっていません。
解決方法
[test@localhost ~]$ DATE="date +%Y/%m/%d-%H:%M:%S"
[test@localhost ~]$
[test@localhost ~]$ date
2023年 11月 17日 金曜日 11:00:31 JST
[test@localhost ~]$ echo "$($DATE)"
2023/11/17-11:00:35
[test@localhost ~]$
変数には date コマンドの実行結果ではなく、実行させるための文字列を入れます。
呼び出すときに $($DATE) で展開させることで実行結果が動的に書き換わります。
気に入ったらぜひ共有してください。