此“ printf”命令有什么作用?


15

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

printf "%(%s)T"

该命令的输出为:

1454299615

有人可以告诉我这个命令是什么,输出是什么意思?


这似乎与外壳相关。你printf是内建的吗? /usr/bin/printf在Ubuntu 14.04上给出错误:printf: %(: invalid conversion specification。如果您使用bash。尝试man bash获取内置文档。
arielf

Answers:


17

这是一种通过以下方式表达格式化时间的方法 printf

格式为:

%(FORMAT)T

FORMAT被定义strftime(3)

因此,要获取纪元时间(自1970-01-01 00:00:00 UTC以来的时间,以秒为单位),我们需要使用以下strftime(3)格式%s

printf "%(%s)T\n"

请注意,您还需要\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

为了完整起见,您还可以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

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


@rtecxs我将您的编辑移到了另一个地方,目的只是为了使内容保持清楚..谢谢:)
heemayl 2016年

是否记录了此功能?我在printf(1)手册页中没有看到它。
Nate Eldredge

@NateEldredge printf是一个内置函数(尽管外部函数具有相同的行为).. check help printf..
heemayl 2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.