493

ロギングを少し簡単にするために、シェルスクリプトでタイムスタンプ変数を作成しようとしています。スクリプトの先頭に変数を作成し、発行するたびに現在の時刻を出力したいと考えていますecho $timestamp。思ったよりも難しいことがわかりました。ここに私が試したいくつかのことがあります:

timestamp="(date +"%T")"エコーが出力されます(date +"%T")

timestamp="$(date +"%T")"echo は、変数が初期化された時刻を出力します。

私が試した他のことは、うまく機能しなかったわずかなバリエーションです。私がやろうとしていることを達成する方法を知っている人はいますか?

4

14 に答える 14

695

UNIX タイムスタンプを取得する場合は、次を使用する必要があります。

timestamp=$(date +%s)

%Tあなたにちょうど時間を与えます。と同じ( http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/%H:%M:%S経由)

于 2013-11-13T13:01:01.367 に答える
399

固定変数が定義された時刻ではなく、現在のタイムスタンプを取得するには、変数ではなく関数を使用するのがコツです。

#!/bin/bash

# Define a timestamp function
timestamp() {
  date +"%T" # current time
}

# do something...
timestamp # print timestamp
# do something else...
timestamp # print another timestamp
# continue...

指定子によって指定された形式が気に入らない場合は、%Tによって受け入れられる他の時間変換指定子を組み合わせることができますdate。GNUの場合、これらの指定子の完全なリストは、 httpsdate ://www.gnu.org/software/coreutils/manual/html_node/Time-conversion-specifiers.html#Time-conversion-specifiers の公式ドキュメントにあります。

于 2013-06-12T13:06:17.037 に答える
19

コマンド置換を使用します。

timestamp=$( date +%T )
于 2013-06-12T13:06:11.607 に答える
14

たくさんの答えがありましたが、探していたものが見つかりませんでした:

date +"%s.%3N"

のようなものを返します:1606297368.210

于 2020-11-25T11:26:30.020 に答える
10

の最近のバージョンでbashは、外部プログラムを呼び出す必要はありませんdate:

printf -v timestamp '%(%T)T'

%(...)Tstrftime対応する引数を UNIX タイムスタンプとして使用し、括弧内の -style フォーマットに従ってフォーマットします。の引数は-1現在の時刻に対応し、あいまいさが発生しない場合は省略できます。

于 2019-01-05T17:43:57.300 に答える
5
timestamp=$(awk 'BEGIN {srand(); print srand()}')

値のない srand は、ほとんどの Awk 実装で現在のタイムスタンプを使用します。

于 2016-12-28T02:15:34.950 に答える