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

Create timestamp variable in bash script

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

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

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

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


如果你想获得unix时间戳,那么你需要使用:

1
timestamp=$(date +%s)

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


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

1
2
3
4
5
6
7
8
9
10
11
12
#!/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


1
2
3
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时间戳更具可读性。但是在某些操作系统上,文件名中不能包含:。因此,我建议使用类似的东西:

1
2018-12-23_12-34-56

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

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

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


使用命令替换:

1
timestamp=$( date +%T )


我正在使用ubuntu 14.04。

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

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


您可以使用

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

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

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


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

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

%(...)T使用相应的参数作为UNIX时间戳,并根据括号之间的strftime样式格式对其进行格式化。 -1的参数对应于当前时间,并且当不会出现歧义时可以省略。


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

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