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

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

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

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

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

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

timestamp=$(date +%s)

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

但是这个变量只会保存变量启动时的值,对吗?

我想这会得到很多赞成,因为它回答了问题的标题,但它没有回答问题正文:D OP希望每次都得到一个不同的时间戳,而这将为整个脚本存储一个。

我来到这里正是在寻找这个。即从date获取unix时间戳的正确格式字符串。但是,我也赞成了"正确"的答案。我不是那么想,但这是对原始问题的一个更好的答案,它对我来说也很有用。

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

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

根据您打算如何使用它,您仍然需要使用命令替换:echo"$(timestamp): something happened"。

至于格式化,这里有一组最常见的格式:zxq9.com/archives/795

对我来说,我想要date +"%Y-%m-%d_%H-%M-%S"

很高兴知道为什么有人认为这个答案是错误的:6个downvotes,但没有人愿意解释原因。通过阅读问题,我真的看不出答案有什么问题。

由于某种原因,这并没有给我时间戳,而是当前时间与":"之间。

我想很多人都会在这个问题上找到一种方法来生成一个unix时间戳(正如我所知)并找到dchakarov的答案更有用,即使这个答案能更好地解决提问者的问题。

@erikbwork或任何想要unix时间戳的人只需使用date +%s即可

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

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

谢谢,这就是我想要的:一个时间戳作为在我的脚本中重复使用的变量! shell语法非常混乱。

+1用于添加毫秒部分。这echo $(date +"%Y-%m-%dT%T.%3N%z")但是我不能让它在Mac终端上工作。如何在Mac中做同样的事情。谢谢

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

2018-12-23_12-34-56

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

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

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

谢谢这对我的版本控制脚本很有用

使用命令替换:

timestamp=$( date +%T )

这是我已经尝试过的,它只打印出变量初始化的时间。

@ dan08:这就是变量的工作原理。如果需要动态输出,请使用函数。

我正在使用ubuntu 14.04。

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

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

您可以使用

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

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

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

至于它到达的时间,应该在包含在屏幕输出之前立即执行,或者在列出输出时间的日志文件中执行。

由于输出中的空间,这不是理想的时间戳格式。一定要在使用中引用它"$ timestamp",否则你会得到两个参数。例如touch $timestamp将生成两个文件。

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

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

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

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

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

为什么不使用简单的date命令?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值