使用日期实用程序打印纪元时间

使用日期实用程序打印纪元时间

来自阅读另一个答案我知道以下命令可用于打印当前纪元时间

$ date +'%s'
1491150773

从阅读到date(1)手册页(注意:我实际上使用 macOS)我找到了一个说明用法的示例:

 Finally the command:

 date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"

 can be used to parse the output from date and express it in Epoch time.

从阅读示例来看,似乎+可以放在单引号内:

$ date '+%s'
1491150781

尽管我能够成功打印当前纪元时间,但我不明白它为什么起作用并且有一些问题:

  • 为什么要date +'%s'打印当前纪元时间?是否有一个更通用的示例来说明此示例中其用法背后的模式?
  • 为什么我可以将引号放在+引号内?

我尝试将命令放入解释shell,但这不是很有帮助:

在此输入图像描述

答案1

BSD 日期和 GNU 日期都具有以下形式:

date +FORMAT

withFORMAT是显示日期的输出格式字符串。所以你要输入的date只是一个以 开头的字符串+

在将字符串传递给 之前date,该字符串由 shell 解释。因此+%s+'%s'"+%s"两者是等效的,由所有 POSIX shell 按原样解释。

唯一的优点+'%s'是你可以快速检测使用了哪种字符串格式,或者复制、解析它,而不必担心+.

另外,+'FORMAT'当您使用某些特殊格式时,它将为您提供帮助,这些特殊格式可以解释为您的 shell 扩展。示例zsh

date +'(%s)'

会工作,同时:

date +(%s)

不会。

相关内容