English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
上一章节我们学习了 Shell 的 echo 命令,本章节我们来学习 Shell 的另一个输出命令 printf。
printf 命令模仿 C 程序库(library)里的 printf() 程序。
printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。
printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以指定字符串的宽度、左右对齐方式等。默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。
printf 命令的语法:
printf format-string [arguments...]
参数说明:
format-string: 为格式控制字符串
arguments: Per la stringa di controllo del formato.
arguments: $ echo "Hello, Shell" Per la lista dei parametri. $ echo "Hello, Shell" $ printf "Hello, Shell\n"
Hello, Shell
.2 Ritieni due cifre decimali. #!/bin/bash $ In seguito, utilizzerò uno script per illustrare la funzione potente di printf: printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
Esegui lo script, i risultati di output sono come segue:
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876 姓名 性别 体重kg 郭靖 男 66.12
杨过 男 48.65郭芙 女 47.99 %s %c %d %f sono tutti i segni di formattazione,%s Output di una stringa,%d Output di un numero intero,%c Output di un carattere,
%fOutput di numeri reali, in forma decimale. -10s indica una larghezza di 10 caratteri (
- Significa allineamento a sinistra, senza allineamento significa allineamento a destra), qualsiasi carattere verrà visualizzato in un riquadro di 10 caratteri, se non è sufficiente verrà riempito automaticamente con spazi, se è superiore verrà visualizzato tutto il contenuto. -4.2f indica la formattazione decimale, dove
.2 Ritieni due cifre decimali. #!/bin/bash # author:基础教程网 # url:it.oldtoolbag.com # Il format-string è in virgolette doppie # I singoli e doppi apici hanno lo stesso effetto # Anche senza virgolette può essere output printf %s abcdef # Se il formato specifica solo un parametro, ma ci sono parametri in eccesso, questi verranno ancora output secondo il formato, il format-string viene riutilizzato printf %s abc def printf "%s\n" abc def printf "%s %s %s\n" a b c d e f g h i j # Se non ci sono arguments, sostituisci %s con NULL e %d con 0 printf "%s and %d \n"
Esegui lo script, i risultati di output sono come segue:
1 abc 1 abc abcdefabcdefabc def a b c d e f g h i j and 0
序列 | 说明 |
---|---|
\a | 警告字符,通常为ASCII的BEL字符 |
\b | 后退 |
\c | 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略 |
\f | 换页(formfeed) |
\n | 换行 |
\r | 回车(Carriage return) |
\t | 水平制表符 |
\v | 垂直制表符 |
\\ | 一个字面上的反斜杠字符 |
\ddd | 表示1到3位数八进制值的字符。仅在格式字符串中有效 |
\0ddd | 表示1到3位的八进制值字符 |
$ 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 "it.oldtoolbag.com \a" it.oldtoolbag.com $ # 不换行