Commande Shell printf
Dans le chapitre précédent, nous avons découvert la commande echo de Shell. Dans ce chapitre, nous découvrirons une autre commande de sortie Shell, printf.
La commande printf imite le programme printf() de la bibliothèque C.
est défini par la norme, donc les scripts utilisant printf sont plus portables que ceux utilisant echo.
printf utilise du texte entre guillemets ou des paramètres délimités par des espaces. Vous pouvez utiliser des chaînes formatées dans printf, et vous pouvez également spécifier la largeur, l'alignement à gauche et à droite de la chaîne, etc. Par défaut, printf n'ajoute pas automatiquement de nouvelles lignes comme echo, nous pouvons ajouter n manuellement.
Syntaxe de la commande Printf :
printf format-string [arguments...]
Description du paramètre :
format-string : est Format chaîne de contrôle
arguments : est la liste des paramètres.
L'exemple est le suivant :
$ echo "Hello, Shell" Hello, Shell $ printf "Hello, Shell\n" Hello, Shell $
Ensuite, j'utiliserai un script pour refléter la fonction puissante de 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
Exécuter le script , le résultat de sortie est le suivant Montré :
姓名 性别 体重kg 郭靖 男 66.12 杨过 男 48.65 郭芙 女 47.99
%s %c %d %f sont tous des substituts de format
%-10s fait référence à une largeur de 10 caractères (- signifie un alignement à gauche, sans signifie alignement à droite), tous les caractères seront affichés dans la largeur de 10 caractères. Si elle est insuffisante, elle sera automatiquement remplie d'espaces. Si elle est dépassée, tout le contenu sera affiché.
%-4.2f fait référence au formatage en décimal, où .2 fait référence à la conservation de 2 décimales.
Plus d'exemples :
#!/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"
exécute le script et le résultat est le suivant :
1 abc 1 abc abcdefabcdefabc def a b c d e f g h i j and 0
La séquence d'échappement de printf
序列 | 说明 |
---|---|
a | 警告字符,通常为ASCII的BEL字符 |
b | 后退 |
c | 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略 |
f | 换页(formfeed) |
n | 换行 |
r | 回车(Carriage return) |
t | 水平制表符 |
v | 垂直制表符 |
\ | 一个字面上的反斜杠字符 |
ddd | 表示1到3位数八进制值的字符。仅在格式字符串中有效 |