Gibt einen String zurück, der durch die üblichen printf-Konventionen der C-Bibliotheksfunktion sprintf formatiert ist. Siehe unten für weitere Details und siehe Sprintf (3) oder printf (3) auf Ihrem System für eine Erläuterung der allgemeinen Grundsätze. Perl macht seine eigene Sprintf-Formatierung: Es emuliert die C-Funktion sprintf (3). Aber nutzt es nicht, außer für Gleitkommazahlen, und selbst dann sind nur Standard-Modifikatoren erlaubt. Nicht-Standard-Erweiterungen in Ihrem lokalen Sprintf (3) sind daher von Perl nicht verfügbar. Im Gegensatz zu printf. Sprintf tut nicht was du wahrscheinlich meinst, wenn du es als Array als dein erstes Argument passierst. Das Array wird skalarer Kontext gegeben, und anstatt das 0. Element des Arrays als das Format zu verwenden, verwendet Perl die Anzahl der Elemente im Array als das Format, das fast niemals sinnvoll ist. Perls sprintf erlaubt die folgenden allgemein bekannten Konvertierungen: Darüber hinaus erlaubt Perl die folgenden weit verbreiteten Conversions: Schließlich erlaubt Perl für rückwärts (und wir bedeutet rückwärts) Kompatibilität, Perl erlaubt diese unnötigen, aber weit verbreiteten Conversions: Beachten Sie, dass die Anzahl der Exponenten-Ziffern in der wissenschaftlichen Notation von e. E. g und G für Zahlen mit dem Modul des Exponenten weniger als 100 ist systemabhängig: Es kann drei oder weniger sein (null-gepolstert als notwendig). Mit anderen Worten, 1,23 mal zehn bis 99. kann entweder 1.23e99 oder 1.23e099 sein. Ähnlich für a und A. der Exponent oder die hexadezimalen Ziffern können schwimmen: vor allem die lange doppelte Perl Konfiguration Option kann Überraschungen verursachen. Zwischen dem und dem Formatbuchstaben können Sie mehrere zusätzliche Attribute angeben, die die Interpretation des Formats steuern. In dieser Reihenfolge handelt es sich um einen expliziten Formatparameter-Index, wie z. B. 2. In der Vorlage sprintf wird das nächste unbenutzte Argument in der Liste formatiert, aber damit können Sie die Argumente nicht in Ordnung bringen: Wenn ein Leerzeichen und ein Pluszeichen angegeben sind Wie die Fahnen auf einmal, wird der Raum ignoriert. Wenn die Fahne und eine Präzision in der o-Umwandlung gegeben sind, wird die Präzision inkrementiert, wenn sie für die führenden 0 notwendig ist. Diese Markierung teilt Perl mit, die gelieferte Zeichenkette als Vektor von ganzen Zahlen zu interpretieren, eine für jedes Zeichen in der Zeichenfolge. Perl wendet das Format auf jede ganze Zahl an und verbindet dann die resultierenden Strings mit einem Trennzeichen (standardmäßig ein Punkt). Dies kann nützlich sein, um Ordinalwerte von Zeichen in beliebigen Zeichenfolgen anzuzeigen: Setzen Sie einen Sternchen vor dem v, um die Zeichenfolge zu überschreiben, die verwendet werden soll, um die Zahlen zu trennen: Sie können auch explizit die Argumentnummer angeben, die für die Verknüpfungszeichenfolge verwendet wird, die etwas wie 2v für verwendet Beispiel: Argumente sind normalerweise so formatiert, dass sie nur so breit sind wie erforderlich, um den angegebenen Wert anzuzeigen. Sie können die Breite überschreiben, indem Sie hier eine Zahl setzen oder die Breite aus dem nächsten Argument (mit) oder aus einem angegebenen Argument erhalten (zB mit 2): Wenn eine durchlaufende Feldbreite negativ ist, hat sie die gleiche Wirkung wie die - Flagge: linksbündigung Sie können eine Präzision (für numerische Konvertierungen) oder eine maximale Breite (für String-Conversions) angeben, indem Sie eine. Gefolgt von einer Nummer. Für Gleitkomma-Formate außer g und G. Hier legen Sie fest, wie viele Stellen direkt vom Dezimalpunkt zu zeigen (die Voreinstellung ist 6). Zum Beispiel: Für g und G gibt dies die maximal zulässige Anzahl von Ziffern an, einschließlich derjenigen, die vor dem Dezimalpunkt liegen, und die nach ihm zum Beispiel: Für ganzzahlige Konvertierungen bedeutet die Angabe einer Präzision, dass die Ausgabe der Nummer selbst Null sein sollte Auf diese Breite gelegt, wo das 0-Flag ignoriert wird: Bei String-Conversions schneidet die Präzision die Zeichenfolge an die angegebene Breite an: Sie können auch die Präzision aus dem nächsten Argument mit .. oder aus einem angegebenen Argument (zB mit .2): Wenn eine durchgeführte Präzision negativ ist, zählt sie überhaupt keine Präzision. Bei numerischen Konvertierungen können Sie die Größe angeben, um die Zahl mit l zu interpretieren. H. V. q L. oder ll. Für Integer-Conversions (Duox X bi DUO) werden in der Regel immer die angenommen, was die Standard-Integer-Größe auf deiner Plattform ist (in der Regel 32 oder 64 Bits), aber du kannst dies überschreiben, um stattdessen einen der Standard-C-Typen zu verwenden, wie unterstützt Durch den Compiler verwendet, um Perl zu bauen: Ab 5.14, keiner von ihnen wirft eine Ausnahme, wenn sie nicht auf Ihrer Plattform unterstützt werden. Wenn jedoch Warnungen aktiviert sind, wird eine Warnung der printf Warnungsklasse auf einem nicht unterstützten Konvertierungsflag ausgegeben. Sollten Sie stattdessen eine Ausnahme bevorzugen, dann tun Sie dies: Wenn Sie über eine Versionsabhängigkeit wissen möchten, bevor Sie das Programm starten, legen Sie so etwas an die Spitze: Sie können herausfinden, ob Ihr Perl Quads über Config unterstützt: Für Floating - Punkt-Conversions (efg EFG), Zahlen werden in der Regel als die Standard-Gleitkomma-Größe auf Ihrer Plattform (Doppel-oder Lang-Doppel), aber Sie können zwingen, lange Doppel mit q. L. oder ll, wenn deine Plattform sie unterstützt. Sie können herausfinden, ob Ihr Perl lange Dritte über Config unterstützt: Sie können herausfinden, ob Perl langes Doppel gilt, um die Standard-Gleitkommagröße zu sein, die auf Ihrer Plattform über Config verwendet werden soll: Es kann auch sein, dass lange doppelte und doppelte gleich sind Ding: Der Größen-Spezifizierer V hat keine Wirkung für Perl-Code, wird aber für die Kompatibilität mit XS-Code unterstützt. Es bedeutet, die Standardgröße für eine Perl-Ganzzahl oder Gleitkommazahl zu verwenden, die die Voreinstellung ist. Normalerweise nimmt sprintf das nächste unbenutzte Argument als den Wert für jede Format-Spezifikation zu formatieren. Wenn die Formatspezifikation verwendet wird, um zusätzliche Argumente zu erfordern, werden diese aus der Argumentliste in der Reihenfolge verbraucht, in der sie in der Formatspezifikation vor dem Formatformat erscheinen. Wenn ein Argument durch einen expliziten Index angegeben wird, hat dies keinen Einfluss auf die normale Reihenfolge für die Argumente, auch wenn der explizit angegebene Index das nächste Argument gewesen wäre. Verwendet eine für die Breite, b für die Präzision und c als den Wert zu formatieren, während: würde eine für die Breite und Präzision und b als den Wert zu formatieren. Hier sind einige Beispiele, die bei der Verwendung eines expliziten Indexes eventuell entkommen müssen: Wenn das Gebietsschema (einschließlich des Gebietsschemas 39: notcharacters39) in Kraft ist und POSIX :: setlocale aufgerufen wurde, wurde das Zeichen für den Dezimaltrennzeichen verwendet Formatierte Gleitkommazahlen werden durch das LCNUMERIC-Gebietsschema beeinflusst. Siehe Perllocale und POSIX. printf und scanf Format Codes Nummer mit bis zu sechs Ziffern der Präzision, wissenschaftliche Notation Fußnote: In printf () werden die Ausdruckstyp Promotions erwartet - in einem Ausdruck werden char und short in int konvertiert und float Wird in doppelte umgewandelt. Also entspricht c tatsächlich einem Parameter vom Typ int und f und g entspricht eigentlich den Parametern des Typs double. Also in printf () gibt es keinen Unterschied zwischen f und lf oder zwischen g und lg. Allerdings ist bei scanf () was passiert ist ein Zeiger auf die Variable, so dass keine Typ Promotions auftreten oder erwartet werden. Also f und lf sind ganz anders in scanf, aber das gleiche in printf. Persönlich habe ich verwendet, um lg routinemäßig für doppelte in printf und scanf, aber das ist aus Gunst in diesen Tagen und in der Tat gcc wird Ihnen eine Warnmeldung für die Verwendung von lg in printf. Die übliche Prozedur in diesen Tagen ist, g für doppeltes in printf und lg für doppeltes in scanf zu verwenden. Es spielt keine Rolle, die Sie für printf verwenden, weil die printf-Bibliothek Funktion behandelt sie auch als, aber es ist entscheidend, um es richtig für scanf. Printf-Format-Modifikatoren Modifikatoren erscheinen zwischen dem und dem Schlüsselbrief. Eine Zahl ist eine Feldbreite. Und eine Zahl ist eine Präzision Beispiel: printf (6.3f, 2.8) ergibt 2.800 (mit einem Leerzeichen vor dem 2) Beachten Sie, dass 6 die 3 Dezimalstellen und die 1 enthält. - 6 Zeichen insgesamt. Also 6-3-1 2 Zeichen links vom Dezimalpunkt. 0 (die Ziffer Null) bedeutet Pad mit Nullen bis Feldbreite (gewöhnlich nur mit ganzen Zahlen verwendet) l (der Buchstabe) bedeutet lang, z. B. Ld, um eine lange int in dezimal zu formatieren Beispiel für 0: 2. 3 (ein Leerzeichen zwischen und 3) In 02d ist das 0 nicht Teil der Feldbreite. Es ist ein Modifikator Charakter. Und wenn du eine Feldbreite hast, musst du so schreiben, dass es nicht mit einer Null anfängt (und dann kannst du eine Null als Modifikatorzeichen vorsetzen, wenn du das willst).Der printf Befehl Stranger, das ist ein sehr großes Thema Das braucht Erfahrung - fülle bitte fehlende Informationen aus, verlängere die Beschreibungen und korrigiere die Details, wenn du achtet. Achtung: Hier geht es um den Bash-builtin-Befehl printf - aber die Beschreibung sollte für einen externen Befehl, der POSIX folgt, fast identisch sein. GNU Awk erwartet ein Komma nach dem Formatstring und zwischen jedem der Argumente eines printf-Befehls. Beispiele finden Sie unter: Code-Snippet. Im Gegensatz zu anderen Dokumentationen möchte ich Sie nicht zur manuellen Seite für die printf () C-Funktionsfamilie umleiten. Allerdings, wenn you039re mehr erfahren, das sollte die detaillierteste Beschreibung für die Format-Strings und Modifikatoren sein. Aufgrund widersprüchlicher historischer Implementierungen des Echo-Befehls empfiehlt POSIX, dass printf über Echo bevorzugt wird. Der Befehl printf bietet eine Methode zum Drucken von vorformatierten Texten ähnlich der printf () Systemschnittstelle (C-Funktion). It039s meinte als Nachfolger für Echo und hat weit mehr Features und Möglichkeiten. Neben anderen Gründen hat POSIX ein sehr gutes Argument, es zu empfehlen: Beide historischen Hauptaromen des Echokommandos sind gegenseitig exklusiv, sie kollidieren. Ein Quellbefehl musste erfunden werden, um das Problem zu lösen. Das Textformat ist in ltFORMATgt angegeben. Während alle Argumente, auf die der Formatstring hindeuten kann, nachher gegeben werden, hier, angeführt durch ltARGUMENTSgt. So sieht ein typischer printf - call folgendermaßen aus: wo nameSname: snName: snquot ist die formatangabe und die beiden Variablen werden als argumente übergeben, die s im formatstring zeigt an (für jeden format spezifizierer gibt es printf auf ein argument) . Wenn gegeben, wird die Ausgabe der Variablen VAR zugewiesen, anstatt in stdout gedruckt zu werden (vergleichbar mit sprintf () in irgendeiner Weise) Die Option - v Option kann direkt in Array-Indizes in Bash-Versionen älter als Bash 4.1 zuweisen. In Versionen, die jünger als 4.1 sind, muss man bei der Ausführung von Erweiterungen in das erste Nicht-Option-Argument von printf vorsichtig sein, da dies die Möglichkeit einer einfachen Code-Injection-Schwachstelle eröffnet. Wo das Echo natürlich mit jedem beliebigen Befehl ersetzt werden kann. Wenn Sie müssen, geben Sie entweder einen hartcodierten Formatstring an oder verwenden Sie - um das Ende der Optionen zu signalisieren. Das genaue gleiche gilt auch für gelesen. Und ein ähnliches zu mapfile. Obwohl die Ausführung von Erweiterungen in ihre Argumente ist weniger häufig. Natürlich in der Shell-Bedeutung der Argumente sind nur Strings, aber die gemeinsamen C-Notationen plus einige Ergänzungen für Anzahl-Konstanten werden erkannt, um ein Zahlen-Argument zu printf zu geben.
No comments:
Post a Comment