Perintah shell printf


Dalam bab sebelumnya, kita telah mempelajari tentang perintah gema Shell Dalam bab ini, kita akan mempelajari tentang perintah keluaran Shell yang lain, printf.

Arahan printf meniru program printf() dalam perpustakaan C.

ditakrifkan oleh standard, jadi skrip menggunakan printf lebih mudah alih daripada menggunakan gema.

printf menggunakan teks yang dipetik atau parameter terhad ruang Anda boleh menggunakan rentetan terformat dalam printf, dan anda juga boleh menentukan lebar, penjajaran kiri dan kanan rentetan, dsb. Secara lalai printf tidak menambah baris baharu secara automatik seperti gema, kita boleh menambah n secara manual.

Sintaks arahan Printf:

printf  format-string  [arguments...]

Perihalan parameter:

  • format-string: ialah Format rentetan kawalan

  • argumen: ialah senarai parameter.

Contohnya adalah seperti berikut:

$ echo "Hello, Shell"
Hello, Shell
$ printf "Hello, Shell\n"
Hello, Shell
$

Seterusnya, saya akan menggunakan skrip untuk mencerminkan fungsi berkuasa printf:

#!/bin/bash
# author:php中文网
# url:www.php.cn
 
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876

Laksanakan skrip , hasil output adalah seperti berikut Ditunjukkan:

姓名     性别   体重kg
郭靖     男      66.12
杨过     男      48.65
郭芙     女      47.99

%s %c %d %f adalah semua pengganti format

%-10s merujuk kepada lebar 10 aksara (- bermaksud penjajaran kiri, tanpa penjajaran kanan ), sebarang aksara akan dipaparkan dalam lebar 10 aksara Jika ia tidak mencukupi, ia akan diisi secara automatik dengan ruang Jika melebihi, semua kandungan akan dipaparkan.

%-4.2f merujuk kepada pemformatan sebagai perpuluhan, dengan .2 merujuk kepada mengekalkan 2 tempat perpuluhan.


Lagi contoh:

#!/bin/bash
# author:php中文网
# url:www.php.cn
 
# format-string为双引号
printf "%d %s\n" 1 "abc"

# 单引号与双引号效果一样 
printf '%d %s\n' 1 "abc" 

# 没有引号也可以输出
printf %s abcdef

# 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
printf %s abc def

printf "%s\n" abc def

printf "%s %s %s\n" a b c d e f g h i j

# 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替
printf "%s and %d \n"

melaksanakan skrip dan output adalah seperti berikut:

1 abc
1 abc
abcdefabcdefabc
def
a b c
d e f
g h i
j  
 and 0

Jujukan melarikan diri printf

序列说明
a警告字符,通常为ASCII的BEL字符
b后退
c抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
f换页(formfeed)
n换行
r回车(Carriage return)
t水平制表符
v垂直制表符
\一个字面上的反斜杠字符
ddd表示1到3位数八进制值的字符。仅在格式字符串中有效
ddd表示1到3位的八进制值字符

Instance

$ printf "a string, no processing:<%s>\n" "A\nB"
a string, no processing:<A\nB>

$ printf "a string, no processing:<%b>\n" "A\nB"
a string, no processing:<A
B>

$ printf "www.php.cn \a"
www.php.cn $                  #不换行