Commandes d'affichage

La commande print

En KSH, la commande print apporte des fonctionnalités supplémentaires à la commande echo.

Exemple :

Utilisation simple

$ print coucou
coucou
$

Supprimer le saut de ligne

$ print -n coucou
coucou$

Afficher des arguments commançant par le caractère "-"

$ print - "-i : Option invalide"
-i : Option invalide
$

Ecrire sur un descripteur particulier

$ print -u2 "Message d'erreur"
Message d'erreur
$

Comparaison avec la commande echo

$ echo "Message d'erreur" 1>&2
Message d'erreur
$

 

La commande printf

En BASH, cette commande est identique à celle du langage C.
Elle permet de formater les affichages.

Syntaxe :

printf chaine expr1 expr2 ..... exprn

chaine représente la chaîne qui sera affichée à l'écran.
Elle peut contenir des formats qui seront substitués par la valeur des expressions citées à sa suite.
Il doit y avoir autant de formats que d'expressions.

Exemple de formats utilisés.

%20s Affichage d'une chaine (string) sur 20 positions avec cadrage à droite
%-20s Affichage d'une chaine (string) sur 20 positions avec cadrage à gauche
%3d Affichage d'un entier (décimal) sur 3 positions avec cadrage à droite
%03d Affichage d'un entier (décimal) sur 3 positions avec cadrage à droite et complété avec des 0 à gauche
%-3d Affichage d'un entier (décimal) sur 3 positions avec cadrage à gauche
%+3d Affichage d'un entier (décimal) sur 3 positions avec cadrage à droite et affichage systématique du signe (un nombre négatif est toujours affiché avec son signe)
%10.2f Affichage d'un nombre flottant sur 10 positions dont 2 décimales
%+010.2f Affichage d'un nombre flottant sur 10 positions dont 2 décimales, complété par des 0 à gauche, avec cadrage à droite et affichage systématique du signe

Exemple :

$ article="Livres"
$ quantite=3
$ prix=3,5
$ printf "%-20s***%03d***%+10.2f\n" $article $quantite $prix
Livres              ***003***     +3,50
$

En utilisant un tableau

$ liste=(livre 10 3,5 cd 5 10,65 dvd 7 19,70 bd 80 5,25)
$ printf "%-20s***%03d***%+10.2f\n" ${liste[*]}
livre               ***010***     +3,50
cd                  ***005***    +10,65
dvd                 ***007***    +19,70
bd                  ***080***     +5,25
$