2013-06-12 32 views
225

我想在shell腳本中創建一個時間戳變量,以使日誌記錄更容易一些。我想在腳本的開頭創建變量,並在發出echo $timestamp時讓它打印出當前時間。然後我想,這證明會更困難。這裏有一些事情我已經試過:在bash腳本中創建時間戳變量

timestamp="(date +"%T")"回聲打印出(date +"%T")

timestamp="$(date +"%T")"回聲打印時的變量初始化的時間。

我試過的其他東西只是輕微的變化,沒有更好的工作。有誰知道如何完成我想要做的事情?

回答

185

爲了得到當前時間戳,並且當一個固定的變量定義的不當時,關鍵是要使用的功能和一個變量:

#!/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/manual/html_node/Time-conversion-specifiers.html#Time-conversion-specifiers

+17

根據你打算如何使用它,你仍然需要使用命令替換:'echo「$(timestamp):發生了什麼」'。 – chepner

+4

至於格式,這裏是一組最常見的格式:http:// zxq9。com/archives/795 – zxq9

+91

對我來說,我想'日期+'%%%% - %S%' –

11

使用命令替換:

timestamp=$(date +%T) 
+3

這是我已經嘗試過的,它只打印變量初始化的時間。 – dan08

+8

@ dan08:這就是變量的工作原理。如果您想要動態輸出,請使用功能。 – choroba

361

如果你想獲得UNIX時間戳,那麼你需要使用:

timestamp=$(date +%s) 

%T只會給你時間;同%H:%M:%S(通過http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/

+4

但是這個變量只會保存變量啓動時的值,對嗎? – lindhe

+3

我想這會得到很多upvotes,因爲它回答問題的標題,但它不回答問題主體:D OP想要每次都獲得不同的時間戳,而這將爲整個腳本存儲一個。 – fedorqui

7

您可以使用

timestamp=`date --rfc-3339=seconds` 

這也提供格式2014-02-01 15:12:35-05:00

背蜱(`)字符會導致它們之間有什麼進行評估,並有結果包含在該行中。 date --help有其他選擇。

+1

至於什麼時間,它應該在包含在屏幕輸出或日誌文件之前立即執行,以便列出輸出時間。 – Bill

+2

由於輸出空間的原因,這比時間戳的理想格式要少。一定要在使用中引用它「$ timestamp」,否則你會得到兩個參數。例如'touch $ timestamp'會產生兩個文件。 – harschware

1
timestamp=$(awk 'BEGIN {srand(); print srand()}') 

沒有值的srand在大多數awk實現中使用當前時間戳。

+0

爲什麼不使用簡單的'date'命令? – caesarsol

22
DATE=`date "+%Y%m%d"` 

DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too 
2

我使用的是Ubuntu 14.04。

我係統中的正確方法應該是date +%s

date +%T的輸出就像12:25:25