Chức năng Bash printf : 7 Ví dụ cho Linux | Học trực tuyến CNTT, học lập trình từ cơ bản đến nâng cao

Chức năng Bash printf : 7 Ví dụ cho Linux

Chia sẻ kiến thức 15/03/2022

Dưới đây là mọi thứ bạn cần biết về hàm printf trong Linux Bash.

Dưới đây là mọi thứ bạn cần biết về hàm printf trong Linux Bash.

Nếu bạn đã sử dụng Bash shell một thời gian, bạn có thể đã biết cách in các chuỗi trong terminal Linux bằng lệnh echo. Tuy nhiên, lệnh printf giúp cho việc in văn bản có định dạng cụ thể dễ dàng hơn nhiều.

Hôm nay chúng ta sẽ học cách sử dụng hàm printf.

Hàm Bash printf là gì?

Hàm printf là một hàm in các chuỗi văn bản được định dạng. Điều đó có nghĩa là bạn có thể viết một cấu trúc chuỗi (format/định dạng) và sau đó điền các giá trị (các đối số) vào.

Nếu bạn đã quen thuộc với các ngôn ngữ lập trình C/C ++, bạn có thể đã biết cách printf hoạt động. Printf trong Bash shell cũng giống vậy, nhưng nó có một vài khác biệt nhỏ.

Cách sử dụng printf trong Bash Shell

Cú pháp cơ bản cho printf là:

printf format [argument]

Printf sẽ in chuỗi format trong khi thực hiện escapes (\) và directives (%) thông qua việc sử dụng các  đối số (argument) được chỉ định. Lưu ý kết quả đầu ra của lệnh sau:

$ printf "Hello, %s" world
Hello, world

Printf đã lấy đối số world và thay thế ký tự % s trong chuỗi được chỉ định bằng nó.

Bạn có thể nhận thấy rằng sau khi xuất, Bash không tạo một dòng mới cho bạn. Không giống như lệnh echo, printf sẽ không cho rằng bạn muốn một dòng mới sau khi in đầu ra. Do đó, bạn sẽ cần sử dụng ký tự dòng mới  \n.

Để in một chuỗi và sau đó chuyển sang một dòng mới, gõ printf “Hello, world\n”.

Hello, world

Điều quan trọng cần lưu ý là printf sẽ cố gắng sử dụng lại định dạng cho tất cả các đối số của bạn. Bạn có thể tận dụng điều này, nhưng nếu không cẩn thận, bạn có thể nhận được kết quả như sau:

$ printf "My name is %s " Jordan Gloor
My name is Jordan My name is Gloor

Bạn cũng nên biết rằng nếu thiếu một đối số, printf sẽ diễn giải bất kỳ chỉ thị nào là 0 (đối với một số) và  null (đối với một chuỗi).

$ printf "Hello, %s."
Hello, .

Bây giờ bạn đã biết cách hoạt động của tập lệnh Bash với printf trong Linux, bạn đã sẵn sàng để bắt đầu sử dụng nó trong các lệnh của mình.

Ví dụ về Linux Bash printf

Printf có nhiều format specifier (thông số định dạng) mà bạn có thể sử dụng trong các tập lệnh của mình. Nhưng hôm nay chúng ta sẽ chỉ dùng một số mã phổ biến. 

1. Định dạng đầu ra bằng chuỗi

Để định dạng đầu ra bằng chuỗi văn bản, hãy sử dụng chỉ thị (directive) %s.

$ printf "%s is one of the largest online %s." MUO "technology publications"
MUO is one of the largest online technology publications.

2. Định dạng chuỗi đầu ra với số thập phân

Để định dạng một chuỗi với một số nguyên, bạn có thể sử dụng chỉ thị %d cho một số thập phân có dấu.

$ printf "MUO was founded in %d." 2007
MUO was founded in 2007.

Lưu ý rằng nếu bạn muốn sử dụng một số thập phân không có dấu trong đầu ra, bạn sẽ phải sử dụng chỉ thị % u để thay thế.

3. Định dạng đầu ra các hàm toán học

Dễ dàng định dạng các hàm toán học bằng lệnh printf. Chỉ cần đặt biểu thức (expression) của bạn bên trong dấu ngoặc kép như bạn thường làm trong Bash và chỉ định biểu thức trong danh sách đối số.

$ printf "1 + 1 is %d" $((1+1))
1 + 1 is 2

4. Định dạng số thập lục phân

Nếu bạn cần định dạng số thập lục phân, hãy sử dụng %x cho chữ thường và  %X cho chữ hoa.

$ printf %X 1000
3E8C

Để in ngày và giờ hiện tại, bạn có thể kết hợp printf với lệnh date và chuyển các chỉ thị (directive) sau.

$ printf "%(%m-%d-%Y %H:%M:%S)T" $(date +%s)
03-26-2021 15:27:57

Bạn có thể thấy các thông số định dạng cho tháng, ngày, năm, giờ, phút và giây trong đầu ra nói trên.

6. Định dạng chuỗi bằng ký tự Unicode

Để in các ký tự Unicode với printf, hãy sử dụng \u Escape cho Unicode 16-bit và \U cho Unicode 32-bit.

Ví dụ: bạn có thể in biểu tượng copyright bằng lệnh sau:

$ printf "\u00A9"
©

7. Thêm khoảng cách vào đầu ra

Bạn có thể thêm khoảng trắng (space) vào dạng chuỗi của mình bằng cách xác định một số ký tự được in tối thiểu trước directive specifier (chỉ định chỉ thị). Các ký tự không sử dụng sẽ được điền bằng khoảng trắng.

Ví dụ: nhập printf “%s:%5d\n” “Value 1” 25 “Value 2” 120  sẽ xuất ra:

Value 1:   25
Value 2:  120

Thông số định dạng (format specifier) %5d trong đầu ra biểu thị rằng chuỗi được định dạng sẽ chứa tối thiểu năm ký tự. Vì 25 chỉ có hai chữ số nên khoảng trắng được thêm vào các ký tự còn lại.

Nếu bạn định một số âm làm chiều rộng, chỉ thị sẽ được căn trái thay vì căn phải.

$ printf "%-10s: %d " "Circles" 25 "Boxes" 120
Circles   : 25 Boxes     : 120

Nếu bạn muốn chiều rộng có thể thay đổi, bạn có thể chuyển một dấu hoa thị (*) thay vì một số và printf sẽ sử dụng số tiếp theo mà nó tìm thấy trong danh sách đối số.

$ printf "%*s: %d " -10 "Circles" 25 -10 "Boxes" 120
Circles   : 25 Boxes     : 120

Kết luận

Hy vọng, với kiến thức cung cấp trong bài viết này, giờ đây bạn đã sẵn sàng bắt đầu in các chuỗi phức tạp và khác nhau trong terminal của mình.

Vân Nguyễn

Dịch từ: https://www.makeuseof.com/bash-printf-examples/

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        
Chat Button
FUNiX V2 GenAI Chatbot ×

yêu cầu gọi lại