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位数八进制值的字符。仅在格式字符串中有效
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 $                  #不换行