Bu “printf” komutu ne işe yarar?


15

Bir eğiticiden geçiyordum ve orada bir komutla karşılaştım:

printf "%(%s)T"

Bu komutun çıktısı:

1454299615

Birisi bana bu komutun ne olduğunu ve sonucun ne anlama geldiğini söyleyebilir mi?


1
Bu kabuğa bağımlı gibi görünüyor. Sen printfbir yerleşik misin? /usr/bin/printfUbuntu 14.04 üzerinde bir hata veriyor: printf: %(: invalid conversion specification. Eğer kullanıyorsanız bash. man bashYerleşik belgeleri deneyin .
arielf

Yanıtlar:


18

Biçimlendirilmiş zamanı şu şekilde ifade etmenin bir yoludur printf.

Biçim:

%(FORMAT)T

Nerede FORMATtarafından tanımlanır strftime(3).

Bu nedenle, çağın zamanını almak için (1970-01-01 00:00:00 UTC'den bu yana saniye cinsinden süre), strftime(3)biçime ihtiyacımız var %s:

printf "%(%s)T\n"

Not Ayrıca gerektiğini \nolarak bir yeni satır eklemek için sonunda printf(aksine echovarsayılan olarak eklenmiş olmaz).

Misal:

$ 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

Tamlık uğruna , zamanı almak için datekomutu benzer strftime(3)şekilde biçimlendirilmiş bir şekilde de kullanabilirsiniz :

$ 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

NOT : Bu davranış özgüdür bash'ın ve ksh' yerleşik s fonksiyonu printfve birlikte çalışmayı değil /usr/bin/printf, cshve zshyerleşik ins.


@rtecxs Düzenlemenizi sadece işleri açık tutmak için farklı bir yere taşıdım ... yine de teşekkürler :)
heemayl

Bu özellik belgelenmiş mi? printf(1)Adam sayfasında görmedim .
Nate Eldredge

@NateEldredge printfburada yerleşik bir yapıdır (harici davranış aynı davranışa sahip olmasına rağmen) .. kontrol edin help printf..
heemayl
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.