Commande printf sous Linux
Référence complète des commandes Linux
1. Aperçu de la commande printf
printf est une puissante commande de sortie formatée dans les systèmes Linux/Unix, dérivée de la fonction printf() du langage C. Par rapport à la commande echo, printf offre un contrôle de sortie et des capacités de formatage plus précis.
Caractéristiques clés
- Formatage précis: Contrôle l'alignement de la sortie, la largeur, la précision, etc.
- Pas de saut de ligne automatique: N'ajoute pas de saut de ligne à la fin de la sortie par défaut (contrairement à echo)
- Prise en charge multilingue: Prend en charge la sortie de caractères Unicode
- Insertion de variables: Peut insérer des valeurs de variables dans des chaînes de caractères
2. Syntaxe de base
printf format-string [arguments...]
Description du paramètre
- format-string: Chaîne de format, contenant des caractères ordinaires et des spécificateurs de format
- arguments: Liste d'arguments correspondant aux spécificateurs de format
3. Explication détaillée des spécificateurs de format
Les spécificateurs de format commencent par%; la forme de base est :
%[flags][width][.precision]specifier
Spécificateurs de format courants
| Spécificateur | Description | Exemple |
|---|---|---|
| %s | String | printf "%s" "hello" |
| %d | Entier décimal | printf "%d" 123 |
| %f | Nombre à virgule flottante | printf "%f" 3.14 |
| %x | Entier hexadécimal (minuscules) | printf "%x" 255 |
| %X | Entier hexadécimal (majuscules) | printf "%X" 255 |
| %o | Entier octal | printf "%o" 8 |
| %c | Caractère unique | printf "%c" 65 |
Options de modificateur
1. Drapeaux
| Option | Description | Exemple |
|---|---|---|
| - | Aligner à gauche | printf "%-10s" "hi" |
| + | Afficher le signe plus/moins | printf "%+d" 123 |
| 0 | Remplir avec des zéros | printf "%05d" 12 |
| Espace | Laisser un espace avant les nombres positifs | printf "% d" 123 |
| # | Format spécial (par exemple, préfixe 0x) | printf "%#x" 255 |
2. Largeur
Spécifie la largeur minimale du champ, effectue un remplissage si la largeur est insuffisante
Exemple
printf "%-10s\n" "hello" # Aligné à gauche, largeur 10
3. Précision (.precision)
Pour les nombres à virgule flottante, spécifie le nombre de chiffres après la virgule décimale ; pour les chaînes, spécifie le nombre maximal de caractères
Exemple
printf "%.5s\n" "abcdefg" # Sortie abcde
4. Exemples pratiques
Exemple 1 : Sortie formatée de base
Exemple
Sortie :
Name: Alice, Age: 25, Height: 1.68
Exemple 2 : Sortie alignée en tableau
Exemple
printf "%-10s %-10d %-10.2f\n" "Alice" 25 89.5
printf "%-10s %-10d %-10.2f\n" "Bob" 23 92.3
Sortie :
Name Age Score Alice 25 89.50 Bob 23 92.30
Exemple 3 : Gestion des caractères spéciaux
Exemple
printf "Chemin : %s\n" "/home/user"
printf "Alerte : \a\n" # Caractère de sonnerie
Exemple 4 : Insertion de variable
Exemple
age=30
printf "Utilisateur : %s, %d ans\n" "$name" "$age"
5. Utilisation avancée
1. Formatage de la sortie de date
Exemple
2. Sortie couleur
Exemple
printf "\e[32mTexte vert\e[0m\n"
3. Spécification dynamique de la largeur
Exemple
printf "%*s\n" $width "Aligné à droite"
6. Problèmes courants et considérations
Problème de saut de ligne: printf n'ajoute pas de saut de ligne par défaut ; il faut l'ajouter manuellement\n
Exemple
printf "Ajouter un saut de ligne\n"
Incohérence du nombre d'arguments: Lorsqu'il y a moins d'arguments que de spécificateurs de format, des valeurs indéfinies seront affichées
Exemple
Gestion des guillemets: Il est recommandé d'entourer la chaîne de format de guillemets doubles, et d'utiliser également des guillemets doubles pour les variables
Exemple
Échappement des caractères spéciaux: Les caractères spéciaux doivent être échappés avec des barres obliques inverses dans la chaîne de format
7. printf vs echo
| Fonctionnalité | printf | echo |
|---|---|---|
| Nouvelle ligne | Il faut ajouter explicitement \n | Ajouté automatiquement |
| Formatage | Prend en charge le formatage complexe | Sortie simple |
| Cohérence | Comportement cohérent entre les systèmes | Peut varier selon les systèmes |
| Expansion des variables | Doit être explicitement spécifié | Expansion automatique |
| Caractères spéciaux | Nécessite un échappement | Certaines versions prennent en charge l'option -e |