Lệnh in print này làm gì?


15

Tôi đã trải qua một hướng dẫn và ở đó tôi bắt gặp một lệnh:

printf "%(%s)T"

Đầu ra của lệnh này là:

1454299615

Ai đó có thể vui lòng cho tôi biết lệnh này là gì và đầu ra có nghĩa là gì không?


Điều này dường như là phụ thuộc vỏ. Là printfmột nội dung của bạn ? /usr/bin/printftrên Ubuntu 14.04 có lỗi : printf: %(: invalid conversion specification. Nếu bạn đang sử dụng bash. Hãy thử man bashtài liệu dựng sẵn.
arielf 6/2/2016

Câu trả lời:


17

Đó là một cách để thể hiện thời gian được định dạng bằng printf.

Định dạng là:

%(FORMAT)T

Trường hợp FORMATđược xác định bởi strftime(3).

Vì vậy, để có được thời gian kỷ nguyên (Thời gian tính bằng giây kể từ 1970-01-01 00:00:00 UTC), chúng ta cần strftime(3)định dạng %s:

printf "%(%s)T\n"

Lưu ý rằng bạn cũng cần \nở cuối để thêm một dòng mới vì printf(không giống như echo) không thêm nó theo mặc định.

Thí dụ:

$ 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

Để hoàn thiện, bạn cũng có thể sử dụng datelệnh strftime(3)theo cách được định dạng tương tự để có thời gian:

$ 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

LƯU Ý : Hành vi này là cụ thể cho bash's và ksh' s built-in chức năng printf, và không làm việc với /usr/bin/printf, cshzshbuilt-in.


@rtecxs Tôi đã di chuyển bản chỉnh sửa của bạn ở một nơi khác chỉ để giữ mọi thứ rõ ràng..cảm ơn :)
heemayl

Là tính năng này được ghi nhận? Tôi đã không nhìn thấy nó trong printf(1)trang người đàn ông.
Nate Eldredge

@NateEldredge printflà một nội dung dựng sẵn ở đây (mặc dù bên ngoài có hành vi tương tự) .. kiểm tra help printf..
heemayl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.