Il s'agit de la commande printfposix qui peut être exécutée dans le fournisseur d'hébergement gratuit OnWorks en utilisant l'un de nos multiples postes de travail en ligne gratuits tels que Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS
PROGRAMME:
Nom
printf — écrire une sortie formatée
SYNOPSIS
printf le format [argument ]
DESCRIPTION
Le printf L'utilitaire doit écrire des opérandes formatés sur la sortie standard. Les argument
les opérandes doivent être formatés sous le contrôle du le format opérande.
OPTIONS
Aucun.
OPÉRANDES
Les opérandes suivants doivent être pris en charge :
le format Une chaîne décrivant le format à utiliser pour écrire les opérandes restants. Voir le
section DESCRIPTION ÉTENDUE.
argument Les chaînes à écrire sur la sortie standard, sous le contrôle de le format. Voir
la section DESCRIPTION ÉTENDUE.
STDIN
Non utilisé.
CONTRIBUTION DES DOSSIERS
Aucun.
ENVIRONNEMENT VARIABLES
Les variables d'environnement suivantes doivent affecter l'exécution de printf:
LANGUE Fournissez une valeur par défaut pour les variables d'internationalisation qui ne sont pas définies ou
nul. (Voir le volume Définitions de base de POSIX.1‐2008, Blog 8.2,
Internationalisation Variables la préséance des variables d'internationalisation
utilisé pour déterminer les valeurs des catégories de paramètres régionaux.)
LC_TOUS S'il est défini sur une valeur de chaîne non vide, remplace les valeurs de tous les autres
variables d'internationalisation.
LC_CTYPE Déterminer la localisation pour l'interprétation des séquences d'octets de données de texte
sous forme de caractères (par exemple, des caractères à un octet par opposition aux caractères à plusieurs octets dans
arguments).
LC_MESSAGES
Déterminez les paramètres régionaux qui doivent être utilisés pour affecter le format et le contenu de
messages de diagnostic écrits dans l'erreur standard.
LC_NUMERIC
Déterminez les paramètres régionaux pour le formatage numérique. Cela affectera le format de
nombres écrits en utilisant le e, E, f, g et G caractères de spécification de conversion (si
prise en charge).
NLSPATH Déterminer l'emplacement des catalogues de messages pour le traitement des LC_MESSAGES.
ASYNCHRONE ÉVÈNEMENTS
Par défaut.
SORTIE STD
Voir la section DESCRIPTION ÉTENDUE.
STDERR
L'erreur standard ne doit être utilisée que pour les messages de diagnostic.
SORTIE DES DOSSIERS
Aucun.
ÉLARGI DESCRIPTION
Le le format l'opérande doit être utilisé comme le format chaîne décrite dans les définitions de base
tome de POSIX.1‐2008, Chapitre 5, Fichier Format Notation avec les exceptions suivantes:
1. Un dans la chaîne de format, dans tout contexte autre qu'un indicateur de conversion
spécification, doit être traité comme un caractère ordinaire qui est copié dans la sortie.
2. La '' caractère dans la chaîne de format doit être traité comme un '' caractère, pas comme un
.
3. En plus des séquences d'échappement présentées dans le volume Base Definitions de
POSIX.1-2008, Chapitre 5, Fichier Format Notation ('\\', '\une', '\b', '\F', '\n', '\r',
'\t', '\v'), "\ddd", Où ddd est un nombre octal à un, deux ou trois chiffres, doit être
écrit sous forme d'octet avec la valeur numérique spécifiée par le nombre octal.
4. La mise en œuvre ne précède ni ne suit la sortie du d or u Conversion
prescripteurs avec caractères non spécifiés par le le format opérande.
5. La mise en œuvre ne précède pas la sortie du o spécificateur de conversion avec des zéros
non spécifié par le le format opérande.
6. le a, A, e, E, f, F, g et G les spécificateurs de conversion n'ont pas besoin d'être pris en charge.
7. Un caractère de spécificateur de conversion supplémentaire, b, doit être pris en charge comme suit. Les
l'argument doit être considéré comme une chaîne pouvant contenir -Séquences d'échappement.
Ce qui suit -les séquences d'échappement doivent être prises en charge :
-- Les séquences d'échappement répertoriées dans le volume Base Definitions de POSIX.1‐2008,
Chapitre 5, Fichier Format Notation ('\\', '\une', '\b', '\F', '\n', '\r', '\t', '\v'),
qui doivent être convertis en les caractères qu'ils représentent
-- "\0ddd", Où ddd est un nombre octal à zéro, un, deux ou trois chiffres qui doit être
converti en octet avec la valeur numérique spécifiée par le nombre octal
-- '\c', qui ne sera pas écrit et causera printf ignorer tout reste
caractères dans l'opérande de chaîne qui le contient, tous les opérandes de chaîne restants, et
tout caractère supplémentaire dans le le format opérande
L'interprétation d'un suivi de toute autre séquence de caractères est
non spécifié.
Les octets de la chaîne convertie doivent être écrits jusqu'à la fin de la chaîne ou le
le nombre d'octets indiqué par la spécification de précision est atteint. Si la précision
est omis, il doit être considéré comme infini, de sorte que tous les octets jusqu'à la fin du
la chaîne convertie doit être écrite.
8. Pour chaque spécification de conversion qui consomme un argument, l'opérande d'argument suivant
doivent être évalués et convertis dans le type approprié pour la conversion comme
spécifié ci-dessous.
9. le le format l'opérande doit être réutilisé aussi souvent que nécessaire pour satisfaire l'argument
opérandes. Tout extra c or s les spécificateurs de conversion doivent être évalués comme si une valeur nulle
des arguments de chaîne ont été fournis ; d'autres spécifications de conversion supplémentaires doivent être
évalué comme si un argument zéro était fourni. Si la le format l'opérande ne contient pas
spécifications de conversion et argument opérandes sont présents, les résultats sont
non spécifié.
10. Si une séquence de caractères dans le le format l'opérande commence par un '%' caractère, mais ne
ne forment pas une spécification de conversion valide, le comportement n'est pas spécifié.
11. L'argument du c le spécificateur de conversion peut être une chaîne contenant zéro ou plus
octets. S'il contient un ou plusieurs octets, le premier octet doit être écrit et tout
les octets supplémentaires doivent être ignorés. Si l'argument est une chaîne vide, il est
non spécifié si rien n'est écrit ou si un octet nul est écrit.
Le argument les opérandes doivent être traités comme des chaînes si la conversion correspondante
le spécificateur est b, c, ou s, et doit être évalué comme si par le strtod() fonction si le
le spécificateur de conversion correspondant est a, A, e, E, f, F, g, ou G. Sinon, ils seront
évalués comme des constantes entières C sans suffixe, comme décrit par la norme ISO C, avec le
extensions suivantes :
* Un leader ou le signe moins est autorisé.
* Si le caractère de début est un guillemet simple ou un guillemet double, la valeur sera la
valeur numérique dans le jeu de codes sous-jacent du caractère suivant le guillemet simple ou
double citation.
* Les constantes entières suffixées peuvent être autorisées.
Si un opérande d'argument ne peut pas être complètement converti en une valeur interne appropriée
à la spécification de conversion correspondante, un message de diagnostic doit être écrit sur
erreur standard et l'utilitaire ne doit pas quitter avec un état de sortie zéro, mais doit continuer
traiter tous les opérandes restants et doit écrire la valeur accumulée au moment où le
une erreur a été détectée sur la sortie standard.
Ce n'est pas considéré comme une erreur si un opérande d'argument n'est pas complètement utilisé pour un c or s
la conversion.
EXIT STATUT
Les valeurs de sortie suivantes doivent être renvoyées :
0 Achèvement réussi.
>0 Une erreur s'est produite.
CONSÉQUENCES OF LES ERREURS
Par défaut.
Le Abonnement les sections are informatif.
INSCRIPTION UTILISATION
Les spécifications de conversion de formatage à virgule flottante de printf() ne sont pas obligatoires
parce que toute l'arithmétique dans le shell est une arithmétique entière. Les awk l'utilitaire effectue
calculs en virgule flottante et fournit ses propres printf fonction. le bc l'utilitaire peut
effectuer une arithmétique à virgule flottante de précision arbitraire, mais ne fournit pas
capacités de formatage. (Cette printf l'utilitaire ne peut pas vraiment être utilisé pour formater bc production;
il ne prend pas en charge la précision arbitraire.) Les implémentations sont encouragées à prendre en charge la
conversions à virgule flottante en tant qu'extension.
Notez ceci printf utilitaire, comme le printf() fonction définie dans les interfaces système
volume de POSIX.1‐2008 sur lequel il est basé, ne prévoit aucune disposition particulière pour traiter
caractères multi-octets lors de l'utilisation du %c spécification de conversion ou lorsqu'une précision est
spécifié dans un %b or %s spécification de conversion. Les candidatures doivent être extrêmement
prudent en utilisant l'une de ces fonctionnalités lorsqu'il y a des caractères multi-octets dans le
jeu de caractères.
Aucune disposition n'est faite dans ce volume de POSIX.1‐2008 qui permet des largeurs de champs et
précisions à spécifier comme '*' depuis l' '*' peut être remplacé directement dans le le format
opérande utilisant la substitution de variable shell. Les implémentations peuvent également fournir cette fonctionnalité
comme extension s'ils le souhaitent.
Les constantes de caractères hexadécimaux telles que définies dans la norme ISO C ne sont pas reconnues dans le
le format opérande car il n'existe aucun moyen cohérent de détecter la fin de la constante. Octal
les constantes de caractère sont limitées à, au plus, trois chiffres octaux, mais le caractère hexadécimal
les constantes ne se terminent que par un caractère non hexadécimal. Dans la norme ISO C, le
"##" L'opérateur de concaténation peut être utilisé pour terminer une constante et la suivre d'un
caractère hexadécimal à écrire. Dans le shell, la concaténation se produit avant le printf
l'utilitaire a une chance d'analyser la fin de la constante hexadécimale.
Le %b la spécification de conversion ne fait pas partie de la norme ISO C ; il a été ajouté ici
comme moyen portable de traiter -échappements étendus en opérandes de chaîne comme prévu
par le echo utilitaire. Voir aussi la section UTILISATION DE L'APPLICATION de echo pour les façons d'utiliser printf
en remplacement de toutes les versions traditionnelles du echo utilitaire.
Si un argument ne peut pas être analysé correctement pour la spécification de conversion correspondante,
le printf l'utilitaire est requis pour signaler une erreur. Ainsi, débordement et étranger
les caractères à la fin d'un argument utilisé pour une conversion numérique doivent être signalés
comme erreurs.
EXEMPLES
Pour alerter l'utilisateur, puis imprimer et lire une série d'invites :
printf "\aVeuillez remplir in le Suivante à la suite: \nNom : "
lire prénom
printf "Téléphone nombre: "
lire Téléphone
Pour lire une liste de bonnes et de mauvaises réponses à partir d'un fichier, calculez le pourcentage
correctement et imprimez-les. Les nombres sont justifiés à droite et séparés par un seul
. Le pourcentage est écrit avec une décimale de précision :
tout en lire bon mal ; do
pourcentage=$(écho "échelle=1;($correct*100)/($correct+$faux)" | avant JC)
printf "%2d à droite\t%2d faux\t(%s%%)\n"
$juste $mauvais $pourcentage
fait < fichier_base_de_données
La commande:
printf "%5d%4d\n" 1 21 321 4321 54321
produit:
1 21
3214321
54321 0
Notez que le le format l'opérande est utilisé trois fois pour imprimer toutes les chaînes données et
que «0 ' a été fourni par printf satisfaire le dernier %4j spécification de conversion.
Le printf l'utilitaire est requis pour informer l'utilisateur lorsque des erreurs de conversion sont détectées
tout en produisant une sortie numérique ; ainsi, les résultats suivants seraient attendus sur un
implémentation avec des entiers de complément à deux de 32 bits lorsque %d est spécifié comme le le format
opérande :
?? ??
│ Standard et repiquage │
│ Argument │ Sortie │ Diagnostique Sortie │
?? ??
│5a │ 5 │ printf : "5a" pas complètement converti │
9999999999 │ 2147483647 │ printf: "9999999999" débordement arithmétique │
│−9999999999 │ −2147483648 │ printf : "−9999999999" débordement arithmétique │
ABC 0 │ printf : "ABC" valeur numérique attendue │
?? ??
Le format du message de diagnostic n'est pas spécifié, mais ces exemples traduisent le type de
informations qui doivent être signalées. Notez que la valeur affichée sur la sortie standard est ce que
serait attendu comme valeur de retour du strol() fonction telle que définie dans le système
Volume des interfaces de POSIX.1‐2008. Une correspondance similaire existe entre %u et
stroul() et %e, %f et %g (si l'implémentation prend en charge les conversions en virgule flottante)
et strtod()
Dans un environnement local utilisant la norme ISO/IEC 646:1991 comme jeu de codes sous-jacent, la commande :
printf "%d\n" 3 +3 -3 \ '3 \"+3 "'-3"
produit:
3 Valeur numérique de la constante 3
3 Valeur numérique de la constante 3
−3 Valeur numérique de la constante −3
51 Valeur numérique du caractère «3 ' dans le jeu de codes standard ISO/IEC 646:1991
43 Valeur numérique du caractère '+' dans le jeu de codes standard ISO/IEC 646:1991
45 Valeur numérique du caractère '−' dans le jeu de codes standard ISO/IEC 646:1991
Notez que dans une locale avec des caractères multi-octets, la valeur d'un caractère est destinée à
être la valeur de l'équivalent de wchar_t représentation du personnage telle que décrite
dans le volume Interfaces système de POSIX.1‐2008.
RAISONNEMENT
Le printf l'utilitaire a été ajouté pour fournir des fonctionnalités qui ont été historiquement fournies
by echo. Cependant, en raison de différences irréconciliables entre les différentes versions de echo
existant, la version a peu de fonctionnalités spéciales, laissant celles-ci à ce nouveau printf utilitaire,
qui est basé sur un dans le système de la neuvième édition.
La section DESCRIPTION ÉTENDUE correspond presque exactement à la printf() fonction dans l'ISO C
standard, bien qu'il soit décrit en termes de notation de format de fichier dans la base
Volume des définitions de POSIX.1‐2008, Chapitre 5, Fichier Format Notation.
Les versions antérieures de cette norme spécifiaient que les arguments pour toutes les conversions autres que
b, c et s ont été évalués de la même manière (en tant que constantes C, mais avec des exceptions indiquées).
Pour les implémentations prenant en charge les conversions à virgule flottante, il n'était pas clair si
les conversions d'entiers n'ont besoin d'accepter que les constantes entières et les conversions à virgule flottante ont besoin
n'accepte que les constantes à virgule flottante, ou si les deux types de conversion doivent accepter
les deux types de constantes. Aussi en ne les distinguant pas, l'exigence relative
à un guillemet simple ou double appliqué aux conversions à virgule flottante même
bien que cela n'ait fourni aucune fonctionnalité utile aux applications qui n'étaient pas déjà
disponible via les conversions d'entiers. La norme actuelle clarifie la situation en
spécifiant que les arguments pour les conversions en virgule flottante sont évalués comme si par
strtod(), et les arguments pour les conversions d'entiers sont évalués comme des constantes entières C,
avec le traitement spécial des guillemets simples et doubles de premier plan s'appliquant uniquement aux
conversions d'entiers.
FUTUR DIRECTIONS
Aucun.
Utilisez printfposix en ligne en utilisant les services onworks.net