GNU/Linux >> Tutoriels Linux >  >> Linux

Commande Bash printf

Généralement, lors de l'écriture de scripts bash, nous utilisons echo pour imprimer sur la sortie standard. echo est une commande simple mais ses capacités sont limitées.
Pour avoir plus de contrôle sur le formatage de la sortie, utilisez le printf commande.

Le printf la commande formate et imprime ses arguments, similaire au C printf() fonction.

printf Commande #

printf est un shell intégré dans Bash et dans d'autres shells populaires comme Zsh et Ksh. Il existe également un /usr/bin/printf autonome binaire, mais la version intégrée du shell est prioritaire. Nous couvrirons la version intégrée de Bash de printf .

La syntaxe du printf commande est la suivante :

printf [-v var] format [arguments]

Le -v l'option indique printf de ne pas imprimer la sortie mais de l'affecter à la variable.

Le format est une chaîne qui peut contenir trois types d'objets différents :

  • Caractères normaux qui sont simplement imprimés tels quels dans la sortie.
  • Caractères échappés par une barre oblique inverse qui sont interprétés puis imprimés.
  • Spécifications de conversion qui décrivent le format et sont remplacées par les valeurs des arguments respectifs qui suivent la chaîne de format.

La commande accepte n'importe quel nombre d'arguments . Si plus d'arguments plus de spécificateurs de format sont fournis, le format chaîne est réutilisée pour consommer tous les arguments. Si moins d'arguments plus de spécificateurs de format sont fournis, les spécificateurs de format numérique supplémentaires sont définis sur une valeur nulle tandis que les spécificateurs de format de chaîne sont définis sur une chaîne nulle.

Vous trouverez ci-dessous quelques points à prendre en compte lors du passage d'arguments au printf commande :

  • Le shell substituera toutes les variables, les correspondances génériques et les caractères spéciaux avant de transmettre les arguments au printf commande.
  • Lorsque vous utilisez des guillemets simples '' la valeur littérale de chaque caractère entre guillemets sera conservée. Les variables et les commandes ne seront pas développées.
printf "Open issues: %s\nClosed issues: %s\n" "34" "65"
Open issues: 34
Closed issues: 65

La chaîne Open issues: %s\nClosed issues: %s\n est le format tandis que "34" et "65" sont des arguments. La chaîne de format contient deux caractères de saut de ligne (\n ) et deux spécificateurs de format (%s ) qui sont remplacés par les arguments.

Le printf la commande n'ajoute pas de caractère de saut de ligne (\n ) à la fin de la ligne.

Caractères échappés par une barre oblique inverse #

Les caractères échappés par une barre oblique inverse sont interprétés lorsqu'ils sont utilisés dans la chaîne de format ou dans un argument correspondant à un %b spécificateur de conversion. Voici une liste des caractères d'échappement les plus courants :

  • \\ - Affiche un caractère barre oblique inverse.
  • \b - Affiche un caractère de retour arrière.
  • \n - Affiche une nouvelle ligne.
  • \r - Affiche un retour chariot.
  • \t - Affiche un onglet horizontal.
  • \v - Affiche un onglet vertical.

Spécifications de conversion #

Une spécification de conversion prend la forme suivante :

%[flags][width][.precision]specifier

Chaque spécification de conversion commence par le signe de pourcentage (% ), inclut des modificateurs facultatifs et se termine par l'une des lettres suivantes qui représentent le type de données (specifier ) de l'argument correspondant :aAbcdeEfgGioqsuxX .

Spécificateur de conversion de type #

La conversion de type specifier est un caractère qui spécifie comment interpréter l'argument correspondant. Ce caractère est obligatoire, et il est placé après les champs optionnels.

Vous trouverez ci-dessous une liste montrant toutes les conversions de type et ce qu'elles font :

  • %b - Afficher l'argument tout en développant les séquences d'échappement antislash.
  • %q - Affiche l'argument shell-quoted, réutilisable en entrée.
  • %d , %i - Affiche l'argument sous la forme d'un entier décimal signé.
  • %u - Afficher l'argument sous la forme d'un entier décimal non signé.
  • %o - Afficher l'argument sous la forme d'un entier octal non signé.
  • %x , %X - Affiche l'argument sous la forme d'un entier hexadécimal non signé. %x imprime les lettres minuscules et %X imprime en majuscules.
  • %e , %E - Afficher l'argument sous la forme d'un nombre à virgule flottante en notation exponentielle. %e imprime les lettres minuscules et %E imprime en majuscules.
  • %a , %A - Affiche l'argument sous la forme d'un nombre à virgule flottante en notation fractionnaire hexadécimale. %a imprime les lettres minuscules et %A imprime en majuscules.
  • %g , %G - Affiche l'argument sous la forme d'un nombre à virgule flottante en notation normale ou exponentielle, selon ce qui est le plus approprié pour la valeur et la précision données. %g imprime les lettres minuscules et %G imprime en majuscules.
  • %c - Affiche l'argument sous la forme d'un seul caractère.
  • %f - Afficher l'argument sous la forme d'un nombre à virgule flottante.
  • %s - Afficher l'argument sous forme de chaîne.
  • %% - Imprimer un % littéral symbole.

Un nombre non signé représente des nombres nuls et positifs, tandis qu'un nombre signé représente des nombres négatifs, nuls et positifs.

La commande suivante imprime le nombre 100 dans trois systèmes de numération différents :

printf "Decimal: %d\nHex: %x\nOctal: %o\n" 100 100 100
Decimal: 100
Hex: 64
Octal: 144

Directive des drapeaux #

Les drapeaux sont les premiers modificateurs facultatifs et sont utilisés pour définir la justification, les zéros non significatifs, les préfixes, etc.

Voici les plus courantes :

  • - - Alignez à gauche le texte imprimé dans le champ. Par défaut, le texte est aligné à droite.
  • + - Préfixez les chiffres avec un + ou - panneaux. Par défaut, seuls les nombres négatifs sont précédés d'un signe négatif.
  • 0 - Remplit les nombres avec des zéros non significatifs plutôt qu'avec des espaces.
  • vide - Préfixez les nombres positifs avec un espace blanc et les nombres négatifs avec un moins (- ).
  • # - Un format alternatif pour les nombres.

Directive de largeur #

La width La directive déposée est placée après tout caractère d'indicateur et spécifie le nombre minimum de caractères que la conversion doit entraîner.

Si la largeur du texte généré est inférieure à la largeur spécifiée, il est rempli d'espaces. La largeur peut être spécifiée sous la forme d'un entier décimal non négatif ou d'un astérisque (* ).

Voici un exemple :

printf "%20s %d\n" Mark 305

%20s signifie que le champ doit contenir au moins 20 caractères. Des blancs sont ajoutés avant le texte car, par défaut, la sortie est justifiée à droite. Pour aligner le texte à gauche, utilisez le - indicateur (%-20s ).

      Mark 305

Lorsqu'un astérisque (* ) est utilisé comme width directive, la largeur du champ de conversion est définie par un argument de largeur qui précède l'argument en cours de formatage.

Dans l'exemple ci-dessous, nous définissons la largeur sur 10 :

printf "%0*d" 10 5

0 est un indicateur qui complète le nombre avec des zéros non significatifs au lieu de blancs. Le texte de sortie comportera au moins 10 caractères :

0000000005

Directive de précision #

Le .precision le modificateur consiste en un point (. ) suivi d'un entier positif ou d'un astérisque (* ) qui, selon le type de spécificateur, définit le nombre de caractères de chaîne ou de chiffres ou le nombre de décimales à imprimer.

La précision a l'effet suivant :

  • Si le type de conversion est un entier, la précision spécifie le nombre minimum de chiffres à imprimer. Si le nombre de chiffres dans l'argument est inférieur à la précision, des zéros non significatifs sont imprimés.
  • Si le type de conversion est une virgule flottante, la précision spécifie le nombre de chiffres qui suivent le caractère décimal. La précision par défaut est 6.
  • Si le type de conversion est une chaîne, la précision spécifie le nombre maximum de caractères à imprimer. Si le nombre de caractères dans l'argument est supérieur à la précision, les caractères en excès sont tronqués.

Voici un exemple montrant comment arrondir un nombre à virgule flottante à 3 décimales :

printf "%.3f" 1.61803398
1.618

Lorsque la précision est définie sur un astérisque (* ), sa valeur est définie par l'argument de précision qui précède l'argument en cours de formatage.

printf "%.*f" 3 1.61803398
1.618

Conclusion #

Le printf La commande prend un format et des arguments et imprime un texte formaté.

Si vous avez des questions ou des commentaires, n'hésitez pas à laisser un commentaire.


Linux
  1. La commande "eval" dans Bash ?

  2. printf :commande introuvable

  3. Exemples de commandes printf sous Linux

  4. démarrer apachectl à partir de bash

  5. bash sh - commande introuvable

Commande d'historique sous Linux (historique de bash)

Commande de sortie Bash et codes de sortie

Bash Scripting - Commande Printf expliquée avec des exemples

Script bash (II)

Script bash (III)

Utilisation de la commande Bash printf pour imprimer des sorties formatées