ロギングをもう少し簡単にするために、シェルスクリプトでタイムスタンプ変数を作成しようとしています。スクリプトの最初に変数を作成し、echo $timestamp
を発行するたびに現在の時刻を表示します。思ったより難しいことがわかった。これが私が試したいくつかのことです:
timestamp="(date +"%T")"
echoは(date +"%T")
を印刷します
timestamp="$(date +"%T")"
echoは、変数が初期化された時刻を表示します。
私が試した他のことは、これ以上うまくいかなかったほんのわずかなバリエーションです。誰かが私がやろうとしていることを達成する方法を知っていますか?
現在のタイムスタンプを取得し、固定変数が定義されている時間を取得するには、関数を使用し、 not 変数を使用するのがトリックです。
#!/bin/bash
# Define a timestamp function
timestamp() {
date +"%T"
}
# do something...
timestamp # print timestamp
# do something else...
timestamp # print another timestamp
# continue...
%T
指定子によって与えられるフォーマットが気に入らない場合は、date
によって受け入れられる他の時間変換指定子を組み合わせることができます。 GNU date
の場合、これらの指定子の完全なリストはこちらの公式ドキュメントにあります。 https://www.gnu.org/software/coreutils/manuals/html_node/Time-conversion-spec .html#時間変換指定子
あなたがUNIXのタイムスタンプを取得したい場合は、あなたが使用する必要があります:
timestamp=$(date +%s)
%T
はあなたにちょうど時間を与えます。 %H:%M:%S
と同じです( http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/ を介して)
DATE=`date "+%Y%m%d"`
DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too
ISO 8601形式(2018-12-23T12:34:56
)は、UNIXタイムスタンプより読みやすくなっています。ただし、OSによっては、ファイル名に:
を含めることができません。したがって、代わりにこのようなものを使用することをお勧めします。
2018-12-23_12-34-56
この形式のタイムスタンプを取得するには、次のコマンドを使用できます。
date +%Y-%m-%d_%H-%M-%S
これは私が多くのアプリケーションで使われているフォーマットです。これについてもう一つのいいところは、あなたのファイル名がこれで始まっていれば、アルファベット順にソートすることができ、日付順にソートされるということです。
コマンド置換を使用してください。
timestamp=$( date +%T )
私はubuntu 14.04を使っています。
私のシステムでの正しい方法はdate +%s
です。
date +%T
の出力は12:25:25
のようです。
あなたが使用することができます
timestamp=`date --rfc-3339=seconds`
これは2014-02-01 15:12:35-05:00
の形式で配信されます。
バックティック(`
)文字はそれらの間にあるものを評価させ、結果を行に含めます。 date --help
には他のオプションがあります。
最近のバージョンのbash
では、外部プログラムdate
を呼び出す必要はありません。
printf -v timestamp '%(%T)T'
%(...)T
は、対応する引数をUNIXタイムスタンプとして使用し、括弧内のstrftime
スタイルの形式に従ってフォーマットします。引数-1
は現在時刻に対応し、あいまいさが生じない場合は省略できます。
timestamp=$(awk 'BEGIN {srand(); print srand()}')
値のないsrandは、ほとんどのAwk実装で現在のタイムスタンプを使います。