Table des matières
ToggleIntroduction
La commande Bash printf vous offre plus de flexibilité et de choix de formatage que la commande echo lors de l'écriture dans une fenêtre de terminal Linux. Même les particularités de printf peuvent être bénéfiques.
C'est l'un des aspects les plus fondamentaux du travail avec les logiciels. Vous lisez ce que l'application a écrit à l'écran. Même avec l'habitude dérivée d'Unix et prise en charge par Linux des programmes de ligne de commande aussi brefs que possible, de nombreuses applications n'écrivent sur le terminal que lorsque quelque chose ne va pas. Une base de programmation cruciale est d'informer l'utilisateur de ce qui se passe, va se passer ou s'est récemment produit.
La commande echo dans le shell Bash peut écrire du texte sur l'affichage du terminal. Vous pouvez l'utiliser dans des scripts ou sur la ligne de commande, et il peut gérer des variables et afficher leurs valeurs si elles sont contenues dans la chaîne. Alors, quel est l'intérêt de printf ? L'écriture de texte n'est-elle pas quelque chose dont l'écho s'occupe ? Printf, d'autre part, offre plus que la simple possibilité d'écrire des chaînes dans les fenêtres de terminal. Il vous donne beaucoup de polyvalence en ce qui concerne le formatage de la sortie, et il a quelques astuces supplémentaires dans sa manche.
La commande printf dans Bash est similaire à la fonction printf en C, mais il y a plusieurs changements. Vous devrez être au courant des changements si vous êtes familier avec C.
Création de chaînes simples
Examinons les différences entre echo et printf lorsqu'il s'agit d'écrire des chaînes sur le terminal.
echo voici quelques mots
printf voici quelques mots
Alors que echo imprime tous les mots, printf publie simplement le premier. De plus, printf n'imprime pas de nouvelle ligne. La sortie est en plein milieu de l'invite de commande. Mais d'abord et avant tout, tous les mots doivent être cités pour que printf agisse en conséquence.
echo voici quelques mots
printf "voici quelques mots"
C'est un pas en avant. Nous avons imprimé tous les mots, mais nous attendons toujours une nouvelle ligne. C'est parce que printf n'imprime une nouvelle ligne que si vous en demandez spécifiquement une. Cela peut sembler gênant, mais cela vous permet de choisir d'en ajouter ou non. Vous devez ajouter "n" dans votre chaîne pour que printf émette une nouvelle ligne. La séquence d'échappement "newline" est utilisée ici.
echo voici quelques mots
printf "voici quelques mots"
Vous utiliserez parfois une nouvelle ligne et pas d'autres. Dans cet exemple, une commande printf utilise une nouvelle ligne tandis que l'autre ne le fait pas.
printf "Comment faire" && printf "Geek"
Étant donné que le premier printf n'imprime pas de nouvelle ligne, la sortie du deuxième printf est placée sur la même ligne que "How-To". Pour imprimer une nouvelle ligne, le deuxième printf utilise n. L'invite de commande s'affichera maintenant sur la ligne sous le texte imprimé.
Personnages qui ont échappé à la capture
Voici quelques caractères supplémentaires qui peuvent être utilisés comme échappements. Vous avez déjà vu comment "n" fonctionne.
n : Passe à une nouvelle ligne.
r : cette commande imprime un retour chariot. Le curseur de sortie revient au début de la ligne courante.
t : cette commande imprime un caractère de tabulation.
v : ajoute un espace de tabulation vertical à la page.
\ : Un caractère barre oblique inverse est imprimé.
“ : Affiche un guillemet.
b : affiche le caractère de retour arrière.
Le caractère d'échappement retour chariot est utilisé pour ramener le curseur au début de la ligne courante.
printf "Le miel est la racine de tout malrMoneyn"
La commande printf se lit de gauche à droite. Jusqu'à ce que printf détecte le caractère d'échappement "r", la chaîne est écrite comme du texte normal. Le curseur de sortie est repositionné au début de la ligne courante.
Avec la lettre immédiatement sous le caractère "r", le traitement de la chaîne continue. Le reste force printf à imprimer "Money", qui remplace l'expression "Honey".
Le caractère barre oblique inverse "" signale des séquences d'échappement, tandis que le guillemet """ est utilisé pour citer des chaînes. Si vous souhaitez imprimer ces caractères, utilisez une barre oblique inverse pour les échapper. Cela indique à printf qu'ils doivent être traités comme des caractères littéraux.
printf "Ceci est un tTab, ceci est un guillemet ", et ceci \ est un Backslashn"
Variables en action
L'utilisation de variables avec printf est assez similaire à l'utilisation de variables avec echo. Pour inclure une variable, telle que cette variable d'environnement, utilisez le signe dollar "$" comme d'habitude avant.
printf "Répertoire d'accueil : $HOMEn"
Formatage de chaîne
Les chaînes de format sont des chaînes qui spécifient le format de sortie. Vous fournissez le texte de la chaîne de format et des valeurs supplémentaires à utiliser comme arguments.
Le texte, les séquences d'échappement et les spécificateurs de format peuvent tous être inclus dans la chaîne de format.
Les spécificateurs de format de Printf l'informent du type d'argument qu'il doit accepter, comme des chaînes, des nombres ou des caractères.
Les spécificateurs de format les plus fréquents sont indiqués ci-dessous. Un symbole de pourcentage "pourcentage" les précède tous. Vous pouvez imprimer un signe de pourcentage en combinant deux signes de pourcentage « pourcentage pour cent ».
- %s: Imprime une chaîne.
- %c: Imprime un seul caractère.
- %d: Imprime un entier.
- %f: imprime un nombre à virgule flottante.
- %u: imprime un entier non signé.
- %o: Imprime une valeur en octal.
- %x: Prints a value in hexadécimal, en minuscule.
- %X: Imprime une valeur en hexadécimal, en majuscule.
- %e: Affiche un nombre à virgule flottante en notation scientifique, en minuscules.
- %E: Affiche un nombre à virgule flottante en notation scientifique, en majuscules.
- %%: Prints a percent “%” symbol.
printf "Comment faire %sn" "Geek"
printf "%s%s %sn" "Comment" "-À" "Geek"
La chaîne de format de la première commande contient son propre contenu. La chaîne "Geek" est envoyée à printf comme argument. Le spécificateur de format « %s » y correspond et l'imprime. Entre la chaîne de format et la chaîne d'argument, il y a juste un espace. En C, une virgule serait nécessaire pour les séparer, mais avec la version Bash de printf, un espace suffit.
Seuls les spécificateurs de format et la séquence d'échappement de nouvelle ligne sont inclus dans la deuxième chaîne de format. Chacun des spécificateurs de format « %s » consomme les trois paramètres de chaîne à tour de rôle. Encore une fois, en C, une virgule est requise entre chaque paramètre, mais la fonction printf de Bash nous permet d'ignorer cette exigence.
Utilisez simplement le spécificateur de format approprié pour générer différents types d'arguments. Voici une simple fonction de conversion de nombre basée sur printf. En notation décimale, octale et hexadécimale, nous imprimerons le nombre 15.
printf "Déc : %dnOct : %onHex : %xn" 15 15 15
Réduisons-le un peu pour rendre l'exemple moins encombré.
printf "Hex : %xn" 15
La majorité d'entre nous sommes habitués à voir des nombres hexadécimaux rendus en majuscules et avec des valeurs inférieures à 0x10 précédées d'un zéro non significatif. Nous pouvons le faire en plaçant un spécificateur de largeur entre le signe de pourcentage « % » et le caractère « X » et en utilisant le spécificateur de format hexadécimal majuscule « % X ».
Cela spécifie la taille du champ dans lequel l'argument doit être imprimé à printf. Des espaces ont été ajoutés au champ. Les nombres à deux chiffres seraient présentés sans aucun rembourrage dans ce style.
printf "Hex : %2Xn" 15
Nous avons maintenant une valeur majuscule avec un espace de tête écrit dessus. En plaçant un zéro devant les deux, nous pouvons demander à printf de remplir le champ avec des zéros au lieu d'espaces :
printf "Hex: %02Xn" 15
Le spécificateur de précision vous permet de spécifier le nombre de décimales à inclure dans la sortie.
printf "Floating point: %08.3fn" 9.243546
Cela facilite la création de tableaux de résultats avec une sortie parfaitement alignée. Cette commande affiche également une autre particularité de Bash printf. S'il y a plus d'arguments que de spécificateurs de format, les arguments sont introduits dans la chaîne de format par lots jusqu'à ce qu'ils soient tous utilisés. Le nombre de spécificateurs de format dans la chaîne de format détermine la taille du lot qui est traité à un moment donné. Les arguments supplémentaires envoyés à la fonction printf en C sont ignorés.
printf "Flottant : %8.3fn" 9.243546 23.665 8.0021
Les chaînes peuvent également utiliser les spécificateurs de largeur et de précision. Les chaînes sont imprimées dans un champ large de 10 caractères à l'aide de cette commande.
printf "%10s %dn" "coats" 7 "shoes" 22 "Umbrellas" 3
By default, values are right-justified in their fields. To left-justify them, use a minus sign “-
” immediately behind the percent “%
” sign.
printf "%-10s %d" "manteaux" 7 "chaussures" 22 "Parapluies" 3
Le spécificateur de précision vous permet de choisir le nombre maximum de caractères qui seront imprimés. Les lettres ":" sont utilisées pour indiquer les limites du champ de largeur. Pas dans la façon dont le terme « parapluies » est raccourci.
printf ":%10.6s:n" "coats" "shoes" "Umbrellas"
printf ":%-10.6s:n" "manteaux" "chaussures" "Parapluies"
Même comme argument, le spécificateur de largeur peut être utilisé. Au lieu d'un spécificateur numérique, utilisez un astérisque "*" et fournissez la largeur sous forme d'entrée entière.
printf "%*sn" 20 "Le plus à droite" 12 "Le milieu" 5 "Le plus à gauche"
Autres bizarreries et gadgets
Les spécificateurs de format dans la chaîne de format fonctionneront avec des valeurs du type approprié, qu'elles soient fournies en tant qu'arguments ordinaires sur la ligne de commande ou créées à la suite d'une expression.
Ceci affiche le résultat de l'addition de deux nombres :
printf "23+32=%dn" $((23+32))
Le nombre de dossiers dans le répertoire de travail courant est imprimé par cette commande :
printf "Il y a %d répertoiresn" $(ls -d */ | wc -l)
La commande printf imprime une chaîne renvoyée par un autre programme.
printf "Utilisateur actuel : %sn" $(whoami)
Si le spécificateur de format de chaîne "percent s" n'est pas donné avec un argument, printf renvoie null.
printf "Un : %s deux : %sn" "Alpha"
Si une valeur numérique est donnée par accident pour le spécificateur de format de chaîne " % s ", il l'imprime sous forme de chaîne et ne se plaint pas. Si vous faites cela en utilisant le C printf, vous vous retrouverez avec beaucoup de problèmes. Votre logiciel va presque certainement planter. Le Bash printf, d'autre part, ne semble pas s'en soucier.
printf "Un : %s deux : %sn" "Alpha" 777
Si le spécificateur de format entier "% d" ne reçoit pas d'argument, zéro est imprimé.
printf "Entier : %dn"
Bash affichera un message d'erreur et printf imprimera zéro si le spécificateur de format entier " % d " reçoit une entrée de chaîne par accident.
printf "Entier : %dn" "Sept"
Des symboles maladroits peuvent être créés en saisissant leur numéro Unicode, également appelé « point de code ». La lettre « u » est utilisée pour échapper certains caractères, suivie de leur valeur Unicode.
printf "Le symbole de l'euro : u20ACn"
Pour prendre en charge les séquences d'échappement dans les chaînes d'arguments, utilisez le spécificateur de format « % b » au lieu du spécificateur de format de chaîne « % s » dans la chaîne de format.
printf "%s" "u20ACn"
printf "%b" "u20ACn"
La commande printf initiale ne reconnaît pas la séquence d'échappement de saut de ligne et ne traite pas la valeur Unicode. Le spécificateur de format « % b » est utilisé dans la deuxième commande printf. Le caractère Unicode est traité de manière appropriée et une nouvelle ligne s'affiche.
Chevaux de course
Vous devrez peut-être juste faire écho du texte dans la fenêtre du terminal à l'occasion. Cependant, printf est l'outil idéal pour la tâche lorsque vous devez appliquer un positionnement et un formatage.
printf "%b" "Tha-" "tha-" "tha-" "c'est tout le monde.n"
- Comment inclure un fichier PDF dans un document Google
- Comment envoyer des iMessages à partir d'une adresse e-mail au lieu d'un numéro de téléphone
- Comment calculer la moyenne dans Google Sheets
- Comment supprimer des données d'un lecteur Windows 10 ou Windows 11
- Comment activer Windows 11
- Comment modifier le serveur DNS dans Windows 10