Apa yang dilakukan perintah "printf" ini?

15

Saya telah melalui tutorial dan saya menemukan sebuah perintah:

printf "%(%s)T"

Output dari perintah ini adalah:

1454299615

Adakah yang bisa memberi tahu saya apa perintah ini dan apa artinya output?

rtecxs
sumber
Ini tampaknya tergantung pada shell. Apakah Anda printfseorang builtin? /usr/bin/printfpada Ubuntu 14.04 memberikan kesalahan: printf: %(: invalid conversion specification. Jika Anda menggunakan bash. Coba man bashuntuk dokumentasi bawaan.
arielf

Jawaban:

17

Ini cara untuk mengekspresikan waktu yang diformat printf.

Formatnya adalah:

%(FORMAT)T

Di mana FORMATdidefinisikan oleh strftime(3).

Jadi untuk mendapatkan waktu jaman (Waktu dalam detik sejak 1970-01-01 00:00:00 UTC), kita perlu strftime(3)format %s:

printf "%(%s)T\n"

Perhatikan bahwa \npada akhirnya Anda perlu menambahkan baris baru karena printf(tidak seperti echo) tidak menambahkannya secara default.

Contoh:

$ 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

Hanya demi kelengkapan, Anda juga dapat menggunakan dateperintah dengan strftime(3)cara yang diformat serupa untuk mendapatkan waktu:

$ 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

CATATAN : Perilaku ini khusus untuk bash's dan ksh' s built-in fungsi printf, dan tidak bekerja dengan /usr/bin/printf, cshdan zshbuilt-in.

heemayl
sumber
@rtecxs Saya telah memindahkan hasil edit Anda di tempat yang berbeda hanya untuk membuat semuanya menjadi jelas..terimakasih :)
heemayl
Apakah fitur ini didokumentasikan? Saya tidak melihatnya di printf(1)halaman manual.
Nate Eldredge
@NateEldredge printfadalah builtin di sini (meskipun yang eksternal memiliki perilaku yang sama) .. periksa help printf..
heemayl