Wednesday, 24 December 2014

[CLI] printf

printf là gì?
$ whatis printf
printf (1)           - format and print data
$ which printf
/usr/bin/printf
Chú ý các shell thường implement hàm printf có tính năng tương tự, để nâng cao hiệu năng do thường được sử dụng thường xuyên và sẽ không cần chạy printf ở process con. Về cở bản thì chức năng giống nhau và có thể dùng lẫn. Để đảm bảo đúng bài tut này, hãy gõ đầy đủ /usr/bin/printf

Cú pháp
printf FORMAT ARGUMENTS
printf sẽ in ra terminal các argument đã định dạng theo với < FORMAT >. Tất cả các tham số truyền vào sau FORMAT đó đều là các ARGUMENTS.
FORMAT có thể chứa:
- Format specifiers:
  + %s: format cho string.
  + %d: format cho integer numbers.
  + %f: format cho float numbers.

- Escape characters: \n (newline), \t (tab space)...

Xét một ví dụ đơn giản:
thanhnt@Thanhnt:~$ printf 'hello world'
hello worldthanhnt@Thanhnt:~$
Trong ví dụ trên, không có ký tự xuống dòng nào sau từ "world",
Để in ra ký tự newline (xuống dòng), bạn cần sử dụng escape character "\n":
thanhnt@Thanhnt:~$ printf '%s\n' 'hello world'
hello world
Chú ý rằng format '%s\n' sẽ được áp dụng với tất cả các arguments.
thanhnt@Thanhnt:~$ printf '%s\n' 'hello world' 'thanhnt' 'have a nice day'
hello world
thanhnt
have a nice day
Khi  sử dụng nhiều format specifiers để format output, các format specifiers này sẽ format lần lượt các argument và quay vòng cho đến hết.
thanhnt@Thanhnt:~$ printf '%s\t %s\n' '20' '2 3' '43' '50'
20     2 3 # (20\t2 2\n)
43     50
Sử dụng \b để biến đổi các ký tự đặc biêt sau dấu \ trong các argument:
$ /usr/bin/printf "%s\n" '1' '\t4'
1
\t4
$ /usr/bin/printf "%b\n" '1' '\t4'
1
    4
sử dụng %d và %f để print ra các số nguyên và các số thực.
Mặc định, khi sử dụng %f để format số thực, số đó sẽ được in ra 6 chữ số ở phần thập phân:
thanhnt@Thanhnt:~$ printf "%f\n" 1 2
1.000000
2.000000
Tuy nhiên, có thể sử dụng '%.N' (với N là số chữ số cần hiển thị ở phần thập phân):
$ /usr/bin/printf "%.1f\n" 1.1234
1.1
$ /usr/bin/printf "%.5f\n" 1.1234
1.12340
Tham khảo thêm tại:
man 1 printf
http://wiki.bash-hackers.org/commands/builtin/printf