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

timestamp="(date +"%T")"回显输出(date +"%T")

timestamp="$(date +"%T")"回显变量初始化的时间。

我尝试过的其他方法都只是细微的变化,效果并不好。有人知道我要怎么做吗?


当前回答

ISO 8601格式(2018-12-23T12:34:56)比UNIX时间戳更具可读性。然而,在某些操作系统上,你不能在文件名中有:。因此,我建议使用这样的方法:

2018-12-23_12-34-56

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

TIMESTAMP=`date +%Y-%m-%d_%H-%M-%S`

这是我看到许多应用程序使用的格式。另一个好处是,如果你的文件名以这个开头,你可以按字母顺序排序它们会按日期排序。

其他回答

下面将给出当地的日期和时间-但它确实需要互联网访问。根据所记录的内容,这可能是有益的—监视和记录连接状态?

curl -i --silent https://google.com/ 2>&1 | grep date

date: Fri, 03 Jun 2022 17:39:19 GMT

最新版本的bash不需要调用外部程序日期:

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

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

对于我的欧洲同胞,试试这个:

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

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

你调用这个变量并得到像这样的字符串表示

$timestamp

GNU bash的时间戳格式化技巧,版本4.4.20(1)-release (x86_64-pc-linux-gnu)

 echo "$(date +%Y-%m-%d_%H:%M:%S.%6N) Info >>> enter main"

输出:

 2023-01-08_23:08:48.013592 Info >>> enter main

如果你想用空格替换'_',请执行以下操作(w/o '\'得到错误消息)

 echo "$(date +%Y-%m-%d\ %H:%M:%S.%6N) Info >>> enter main"
 echo "$(date +%Y-%m-%d\ %T.%6N) Info >>> enter main"

输出:

 2023-01-08 23:10:40.692674 Info >>> enter main

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

date +"%s.%3N"

返回类似1606297368.210的内容