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?

rtecxs
la source
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.

heemayl
la source
@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