Que fait cette commande «printf»?


15

Je suivais un tutoriel et là je suis tombé sur une commande:

printf "%(%s)T"

Le résultat de cette commande est:

1454299615

Quelqu'un pourrait-il me dire quelle est cette commande et ce que signifie la sortie?


Cela semble dépendre du shell. Êtes-vous printfun intégré? /usr/bin/printfsur Ubuntu 14.04 donne une erreur: printf: %(: invalid conversion specification. Si vous utilisez bash. Essayez la man bashdocumentation intégrée.
arielf

Réponses:


17

C'est une façon d'exprimer l'heure formatée par printf.

Le format est:

%(FORMAT)T

FORMATest défini par strftime(3).

Donc, pour obtenir l'heure de l'époque (temps en secondes depuis le 1970-01-01 00:00:00 UTC), nous avons besoin du strftime(3)format %s:

printf "%(%s)T\n"

Notez que vous devez également \nà la fin ajouter une nouvelle ligne car printf(contrairement à echo) ne l'ajoute pas par défaut.

Exemple:

$ 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

Dans un souci d'exhaustivité, vous pouvez également utiliser la datecommande d'une strftime(3)manière formatée similaire pour obtenir l'heure:

$ 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

NOTE : Ce comportement est spécifique à bash's et kshest intégré dans la fonction printf, et ne fonctionne pas avec /usr/bin/printf, cshet zshbuilt-ins.


@rtecxs J'ai déplacé votre montage dans un endroit différent juste pour que les choses soient claires .. merci quand même :)
heemayl

Cette fonctionnalité est-elle documentée? Je ne l'ai pas vu dans la printf(1)page de manuel.
Nate Eldredge

@NateEldredge printfest une fonction intégrée ici (bien que celle externe ait le même comportement) .. vérifiez help printf..
heemayl
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.