这个“printf”命令有什么作用?

rte*_*cxs 16 command-line bash

我正在学习一个教程,在那里我遇到了一个命令:

printf "%(%s)T"
Run Code Online (Sandbox Code Playgroud)

此命令的输出是:

1454299615
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这个命令是什么以及输出是什么意思?

hee*_*ayl 19

这是一种用 来表示格式化时间的方式printf

格式为:

%(FORMAT)T
Run Code Online (Sandbox Code Playgroud)

其中FORMAT由 定义strftime(3)

因此,要获得纪元时间(自 1970-01-01 00:00:00 UTC 以来的秒数),我们需要strftime(3)格式%s

printf "%(%s)T\n"
Run Code Online (Sandbox Code Playgroud)

请注意,您还需要\n在最后添加一个换行符,因为printf(与 不同echo)默认情况下不会添加它。

例子:

$ printf "%(%s)T\n"
1454300377

$ printf "%(%Y-%m-%d)T\n"
2016-02-01

$ printf "%(%Y-%m-%d %H:%M:%S)T\n"
2016-02-01 10:20:27
Run Code Online (Sandbox Code Playgroud)

为了完整起见,您还可以date以类似的strftime(3)格式使用命令来获取时间:

$ date '+%s'
1454300542

$ date '+%Y-%m-%d'    ## Short form: date -I
2016-02-01

$ date '+%Y-%m-%d %H:%M:%S'
2016-02-01 10:22:47
Run Code Online (Sandbox Code Playgroud)

:此行为是特定bash的和ksh的内置功能printf,并且不工作与/usr/bin/printfcshzsh内置插件。