Cosa fa questo comando "printf"?


15

Stavo seguendo un tutorial e lì mi sono imbattuto in un comando:

printf "%(%s)T"

L'output di questo comando è:

1454299615

Qualcuno potrebbe dirmi cos'è questo comando e cosa significa l'output?


Questo sembra essere dipendente dalla shell. È il vostro printfun incorporato? /usr/bin/printfsu Ubuntu 14.04 dà un errore: printf: %(: invalid conversion specification. Se stai usando bash. Prova man bashper la documentazione integrata.
Ariete

Risposte:


17

È un modo per esprimere il tempo formattato di printf.

Il formato è:

%(FORMAT)T

Dove FORMATè definito da strftime(3).

Quindi per ottenere il tempo (tempo in secondi dal 1970-01-01 00:00:00 UTC), abbiamo bisogno del strftime(3)formato %s:

printf "%(%s)T\n"

Si noti che \nalla fine è necessario anche aggiungere una nuova riga poiché printf(diversamente echo) non la aggiunge per impostazione predefinita.

Esempio:

$ 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 per completezza, puoi anche usare il datecomando in un strftime(3)modo formattato simile per ottenere il 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 : Questo comportamento è specifico per bash's e ksh' s built-in funzione printf, e non funziona con /usr/bin/printf, cshe zshbuilt-in.


@rtecxs Ho spostato la tua modifica in un posto diverso solo per chiarire le cose..grazie comunque :)
heemayl

Questa funzione è documentata? Non l'ho visto nella printf(1)pagina man.
Nate Eldredge,

@NateEldredge printfè incorporato qui (anche se quello esterno ha lo stesso comportamento) .. controlla help printf..
heemayl
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.