English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Commande printf Shell

Dans le chapitre précédent, nous avons appris la commande echo de Shell, dans ce chapitre, nous allons étudier une autre commande d'output de Shell, à savoir printf.

La commande printf imite la fonction printf() de la bibliothèque de programmes C.

printf est défini par la norme POSIX, donc les scripts utilisant printf sont plus portables que ceux utilisant echo.

L'utilisation de printf nécessite des arguments sous forme de texte ou de séparateurs d'espace, et l'extérieur peut utiliser des chaînes de caractères formatées, ainsi que définir la largeur de la chaîne et le mode d'alignement à droite ou à gauche. Par défaut, printf ne rajoute pas automatiquement un retour à la ligne, nous pouvons l'ajouter manuellement avec \n.

Syntaxe de la commande printf :

printf  format-string  [arguments...]

Explication des paramètres :

  • format-string: Est une chaîne de contrôle de format

  • arguments: Sont des arguments de liste.

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

Ensuite, je vais utiliser un script pour illustrer la fonction puissante de printf :

#!/bin/bash
# author:基础教程网
# url:fr.oldtoolbag.com
 
printf "%"-10s %-8s %-4s\n" Nom Sexe Poidskg  
printf "%"-10s %-8s %-4.2f\n" Guo Jing Homme 66.1234 
printf "%"-10s %-8s %-4.2f\n" Yang Guo Homme 48.6543 
printf "%"-10s %-8s %-4.2f\n" Guo Fu Femme 47.9876

Exécuter le script, afficher les résultats comme suit :

Nom  Sexe  Poidskg
Guo Jing  Homme      66.12
Yang Guo  Homme      48.65
Guo Fu  Femme      47.99

%s %c %d %f sont des substituts de format,%s Afficher une chaîne de caractères,%d Sortie entière,%c Afficher un caractère,%f Afficher un nombre réel, en forme décimale.

%-10s pour une largeur de 10 de caractères (- représente l'alignement à gauche, sans quoi il représente l'alignement à droite), tout caractère sera affiché dans 10 de caractères largeur du caractère, si elle n'est pas suffisante, elle sera remplie automatiquement avec des espaces, et si elle dépasse, le contenu sera affiché intégralement.

%-4.2f pour formaté en décimal, où .2 de conserver2de décimales.

#!/bin/bash
# author:基础教程网
# url:fr.oldtoolbag.com
 
# format-La chaîne est entre guillemets doubles
printf "%d %s\n" 1 "abc"
# Les guillemets simples et doubles ont le même effet 
printf '%d %s\n' 1 "abc" 
# Il est possible de sortir sans guillemets
printf %s abcdef
# Le format ne spécifie qu'un paramètre, mais les paramètres en excès seront également affichés selon ce format, format-La chaîne est réutilisée
printf %s abc def
printf "%s\n" abc def
printf "%s %s %s\n" a b c d e f g h i j
# Si il n'y a pas d'arguments, alors %s est remplacé par NULL, %d par 0
printf "%s and %d \n"

Exécuter le script, afficher les résultats comme suit :

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

Séries d'échappement printf

SérieDescription
\aCaractère d'avertissement, généralement le caractère BEL de l'ASCII
\bRetour arrière
\cSupprimer (ne pas afficher) tout caractère de retour chariot final dans le résultat de la sortie (seulement valide dans les chaînes de paramètres contrôlées par l'indicateur de format %b), et tous les caractères restants dans le paramètre, les paramètres suivants et tous les caractères restants dans la chaîne de format sont ignorés
\fPage de formfeed (Formfeed)
\nRetour chariot (Line feed)
\rRetour chariot (Carriage return)
\tTabulation horizontale
\vTabulation verticale
\\un caractère d'antislash littéral
\dddreprésenter1à3caractère de valeur octale de bits. Seulement valide dans la chaîne de format
\0dddreprésenter1à3caractère de valeur octale
$ printf "a stringe, pas de traitement:<%s>\n" "A\nB"
a stringe, pas de traitement:<A\nB>
$ printf "a stringe, pas de traitement:<%b>\n" "A\nB"
a stringe, pas de traitement:<A
B>
$ printf "fr.oldtoolbag.com \a"
fr.oldtoolbag.com $ #Ne pas sauter de ligne