O que esse comando "printf" faz?

15

Eu estava passando por um tutorial e lá me deparei com um comando:

printf "%(%s)T"

A saída deste comando é:

1454299615

Alguém poderia me dizer qual é esse comando e qual o resultado?

rtecxs
fonte
Isso parece ser dependente do shell. Você é printfum construtor? /usr/bin/printfno Ubuntu 14.04 dá um erro: printf: %(: invalid conversion specification. Se você estiver usando bash. Tente man basha documentação interna.
Arielf # 6/16

Respostas:

17

É uma maneira de expressar a hora formatada printf.

O formato é:

%(FORMAT)T

Onde FORMATé definido por strftime(3).

Portanto, para obter o tempo da época (tempo em segundos desde 1970-01-01 00:00:00 UTC), precisamos do strftime(3)formato %s:

printf "%(%s)T\n"

Observe que você também precisa \nadicionar uma nova linha no final, pois printf(ao contrário echo) não a adiciona por padrão.

Exemplo:

$ 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

Por uma questão de integridade, você também pode usar o datecomando de uma strftime(3)maneira formatada semelhante para obter o tempo:

$ 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 comportamento é específico para bash'se ksh' s built-in função printf, e não trabalha com /usr/bin/printf, cshe zshbuilt-ins.

heemail
fonte
@rtecxs Mudei a sua edição em um lugar diferente apenas para manter as coisas clear..thanks qualquer maneira :)
heemayl
Esse recurso está documentado? Eu não vi isso na printf(1)página de manual.
Nate Eldredge
@NateEldredge printfé um incorporado aqui (embora a um externa tem o mesmo comportamento) .. verificação help printf..
heemayl