Pertanyaan Apa yang dilakukan perintah "printf" ini?


Saya sedang menjalani tutorial dan di sana saya menemukan sebuah perintah:

printf "%(%s)T"

Output dari perintah ini adalah:

1454299615

Adakah yang bisa memberitahu saya apa perintah ini dan apa artinya output?


15
2018-02-01 04:08


asal


Ini tampaknya bergantung pada shell. Itu kamu printf sebuah builtin? /usr/bin/printf pada Ubuntu 14.04 memberikan kesalahan: printf: %(: invalid conversion specification. Jika Anda menggunakan bash. Mencoba man bash untuk dokumentasi bawaan. - arielf


Jawaban:


Ini adalah cara untuk mengekspresikan waktu yang diformat oleh printf.

Formatnya adalah:

%(FORMAT)T

Dimana FORMAT didefinisikan oleh strftime(3).

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

printf "%(%s)T\n"

Perhatikan bahwa Anda juga perlu \n di bagian akhir untuk menambahkan baris baru sebagai 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 bisa menggunakannya date perintah serupa strftime(3) cara diformat 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 bashdan kshfungsi bawaan printf, dan tidak berfungsi /usr/bin/printf , csh, dan zsh built-in.


17
2018-02-01 04:18



@rtecxs Saya telah memindahkan suntingan Anda di tempat yang berbeda hanya untuk menjaga hal-hal yang jelas .. terima kasih pula :) - heemayl
Apakah fitur ini didokumentasikan? Saya tidak melihatnya di printf(1) halaman manual. - Nate Eldredge
@NateEldredge printf adalah builtin di sini (meskipun yang eksternal memiliki perilaku yang sama) .. periksa help printf .. - heemayl