¿Qué hace este comando "printf"?


15

Estaba pasando por un tutorial y allí encontré un comando:

printf "%(%s)T"

El resultado de este comando es:

1454299615

¿Alguien podría decirme qué es este comando y qué significa la salida?


Esto parece ser dependiente de la cáscara. ¿ printfEres un constructor? /usr/bin/printfen Ubuntu 14.04 da un error: printf: %(: invalid conversion specification. Si lo estas usando bash. Prueba man bashcon la documentación integrada.
arielf

Respuestas:


17

Es una forma de expresar el tiempo formateado por printf.

El formato es:

%(FORMAT)T

Donde FORMATse define por strftime(3).

Entonces, para obtener el tiempo de la época (Tiempo en segundos desde 1970-01-01 00:00:00 UTC), necesitamos strftime(3)formato %s:

printf "%(%s)T\n"

Tenga en cuenta que también necesita \nal final agregar una nueva línea ya que printf(a diferencia de echo) no la agrega de manera predeterminada.

Ejemplo:

$ 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

Solo en aras de la exhaustividad, también puede usar el datecomando de forma similar strftime(3)para obtener el tiempo:

$ 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

NOTA : Este comportamiento es específico bash's y kshque está incorporado en la función printf, y no funciona con /usr/bin/printf, cshy zshmuebles empotrados.


@rtecxs He movido tu edición a un lugar diferente solo para mantener las cosas claras ... gracias de todos modos :)
heemayl

¿Está documentada esta característica? No lo vi en la printf(1)página del manual.
Nate Eldredge

@NateEldredge printfestá incorporado aquí (aunque el externo tiene el mismo comportamiento) ... verifique help printf...
heemayl
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.