在bash脚本中创建时间戳变量

时间:2013-06-12 13:03:33

标签: bash variables timestamp

我正在尝试在shell脚本中创建一个timestamp变量,以使日志记录更容易一些。我想在脚本的开头创建变量,并在发出echo $timestamp时打印出当前时间。事实证明,这比我想象的要困难得多。以下是我尝试过的一些事情:

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

timestamp="$(date +"%T")" echo打印变量初始化的时间。

我尝试的其他事情只是轻微的变化,没有任何改善。有谁知道如何完成我想要做的事情?

11 个答案:

答案 0 :(得分:478)

如果您想获得unix时间戳,则需要使用:

timestamp=$(date +%s)

%T会给你时间;与%H:%M:%S相同(通过http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/

答案 1 :(得分:248)

为了获得当前时间戳而不是定义固定变量的时间,诀窍是使用函数并且变量:

#!/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

答案 2 :(得分:39)

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

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

答案 3 :(得分:19)

ISO 8601格式(2018-12-23T12:34:56)比UNIX时间戳更具可读性。但是在某些操作系统上,文件名中不能包含:。因此,我建议使用类似的东西:

2018-12-23_12-34-56

您可以使用以下命令以此格式获取时间戳:

date +%Y-%m-%d_%H-%M-%S

这是我见过许多应用程序使用的格式。另一件好事是,如果您的文件名以此开头,您可以按字母顺序对它们进行排序,它们将按日期排序。

答案 4 :(得分:15)

使用命令替换:

timestamp=$( date +%T )

答案 5 :(得分:13)

对于我的欧洲同胞,请尝试使用此:

timestamp=$(date +%d-%m-%Y_%H-%M-%S)

将给出以下格式的格式:“ 15-02-2020_19-21-58”

您调用变量并获得像这样的字符串表示形式

$timestamp

答案 6 :(得分:10)

我正在使用ubuntu 14.04。

我系统中的正确方法应该是date +%s

date +%T的输出与12:25:25类似。

答案 7 :(得分:9)

您可以使用

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

此格式为2014-02-01 15:12:35-05:00

反向标记(`)字符将导致评估它们之间的内容并将结果包含在该行中。 date --help还有其他选择。

答案 8 :(得分:2)

bash的最新版本不需要调用外部程序date

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

%(...)T使用相应的参数作为UNIX时间戳,并根据括号之间的strftime样式格式设置其格式。 -1的参数对应于当前时间,可以避免出现歧义的情况可以省略。

答案 9 :(得分:1)

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

没有值的srand使用大多数Awk实现的当前时间戳。

答案 10 :(得分:1)

很多答案,但找不到我想要的东西:

date +"%s.%3N"

返回类似:1606297368.210