Was macht dieser "printf" -Befehl?

15

Ich habe gerade ein Tutorial durchgearbeitet und bin dort auf einen Befehl gestoßen:

printf "%(%s)T"

Die Ausgabe dieses Befehls lautet:

1454299615

Kann mir bitte jemand sagen, was dieser Befehl ist und was die Ausgabe bedeutet?

rtecxs
quelle
Dies scheint shellabhängig zu sein. printfBist du ein Eingebauter? /usr/bin/printfauf Ubuntu 14.04 gibt einen Fehler: printf: %(: invalid conversion specification. Wenn Sie verwenden bash. Versuchen Sie es man bashmit eingebauter Dokumentation.
Arielf

Antworten:

17

Es ist eine Möglichkeit, die formatierte Zeit durch auszudrücken printf.

Das Format ist:

%(FORMAT)T

Wo FORMATist definiert durch strftime(3).

Um die Epochenzeit (Zeit in Sekunden seit 1970-01-01 00:00:00 UTC) zu erhalten, benötigen wir das strftime(3)Format %s:

printf "%(%s)T\n"

Beachten Sie, dass Sie \nam Ende auch eine neue Zeile hinzufügen müssen, da diese printf(im Gegensatz zu echo) nicht standardmäßig hinzugefügt wird.

Beispiel:

$ 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

Der Vollständigkeit halber können Sie auch den dateBefehl in einer ähnlichen strftime(3)formatierten Weise verwenden, um die Zeit zu ermitteln:

$ 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

Hinweis : Dieses Verhalten ist spezifisch für bash‚s und ksh‘ s eingebaute Funktion printfund funktioniert nicht mit /usr/bin/printf, cshund zshEinbauten.

heemayl
quelle
@rtecxs Ich habe Ihre Bearbeitung an einen anderen Ort verschoben, nur um die Dinge klar zu halten .. trotzdem danke :)
Heemayl
Ist diese Funktion dokumentiert? Ich habe es nicht in der printf(1)Manpage gesehen.
Nate Eldredge
@ NateEldredge printfist ein Builtin hier (obwohl die externe hat das gleiche Verhalten) .. überprüfen help printf..
Heemayl