Do czego służy to polecenie „printf”?

15

Przechodziłem samouczek i tam natknąłem się na polecenie:

printf "%(%s)T"

Dane wyjściowe tego polecenia to:

1454299615

Czy ktoś mógłby mi powiedzieć, co to polecenie i co oznacza wynik?

rtecxs
źródło
1
To wydaje się być zależne od powłoki. Czy jesteś printfwbudowany? /usr/bin/printfUbuntu 14.04 daje błąd: printf: %(: invalid conversion specification. Jeśli używasz bash. Wypróbuj man bashwbudowaną dokumentację.
arielf

Odpowiedzi:

18

Jest to sposób wyrażenia sformatowanego czasu printf.

Format to:

%(FORMAT)T

Gdzie FORMATjest zdefiniowany przez strftime(3).

Aby uzyskać czas epoki (czas w sekundach od 1970-01-01 00:00:00 UTC), potrzebujemy strftime(3)formatu %s:

printf "%(%s)T\n"

Pamiętaj, że \nna końcu musisz również dodać nowy wiersz, ponieważ printf(w przeciwieństwie do echo) domyślnie go nie dodaje.

Przykład:

$ 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

Ze względu na kompletność możesz również użyć datepolecenia w podobny strftime(3)sformatowany sposób, aby uzyskać czas:

$ 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

UWAGA : Takie zachowanie jest charakterystyczne dla bash„s i ksh” s wbudowaną funkcję printf, a nie działa /usr/bin/printf, cshi zshZabudowy.

heemayl
źródło
@rtecxs Przeniosłem twoją edycję w inne miejsce, żeby wszystko było jasne .. dzięki i tak :)
heemayl
Czy ta funkcja jest udokumentowana? Nie widziałem tego na printf(1)stronie podręcznika .
Nate Eldredge
@NateEldredge printfjest tu wbudowany (chociaż zewnętrzny ma to samo zachowanie) .. sprawdź help printf..
heemayl