printf(1p)

Från Wiki.linux.se -Linux wikipedia på Svenska.
Version från den 25 april 2026 kl. 11.24 av Admin (diskussion | bidrag) (→‎printf(1p))
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök


NAMN

printf — skriv formaterad utdata

SYNOPSIS

printf format [argument...]

BESKRIVNING

Verktyget printf skriver formaterade argument till standard ut. Operanderna argument formateras enligt styrningen från operanden format.

ALTERNATIV

Inga.

OPERANDER

format
En sträng som beskriver vilket format som ska användas för att skriva
 återstående operander.
argument
Strängar som ska skrivas till standard ut, styrda av format.

STDIN

Används inte.

INDATAFILER

Inga.

MILJÖVARIABLER

Följande miljövariabler påverkar körningen av printf:

LANG
Ger standardvärde för internationaliseringsvariabler som är tomma
 eller ej satta.
LC_ALL
Åsidosätter alla andra internationaliseringsvariabler om den är satt
 till en icke-tom sträng.
LC_CTYPE
Bestämmer hur byteföljder ska tolkas som tecken.
LC_MESSAGES
Bestämmer språk och format för felmeddelanden till standard error.
LC_NUMERIC
Bestämmer numerisk formatering. Påverkar utskrift med
 konverteringsspecifikationerna e, E, f, g och G
 om de stöds.
NLSPATH
Bestämmer var meddelandekataloger ska sökas.

STDOUT

Se avsnittet om utökad beskrivning.

STDERR

Standard error används endast för diagnostiska meddelanden.

UTDATAFILER

Inga.

UTÖKAD BESKRIVNING

Operanden format används som formatsträng ungefär enligt samma modell som printf() i C, men med några POSIX-specifika regler och undantag.

Grundläggande regler

  • Ett vanligt mellanslag i formatsträngen behandlas som ett vanligt
 tecken, utom när det används som flagga i en konverteringsspecifikation.
  • Ett enkelt citationstecken behandlas som ett vanligt tecken.
  • Förutom vanliga escape-sekvenser som \\, \n,
 \t, \r och liknande stöds även \ddd, där
 ddd är ett ett-, två- eller tresiffrigt oktaltal.
  • Implementationen får inte lägga till extra blanktecken eller nollor
 utöver vad formatsträngen anger för vissa numeriska konverteringar.
  • Konverteringarna a, A, e, E, f, F, g
 och G behöver inte stödjas.

Konverteringen %b

En extra konverteringsspecifikation, %b, ska stödjas.

Argumentet behandlas då som en sträng som kan innehålla backslash-escapes.

Stödda escape-sekvenser i %b:

  • \\, \a, \b, \f,
 \n, \r, \t, \v
  • \0ddd, där ddd är ett oktaltal med 0 till 3 siffror
  • \c, som gör att inget mer skrivs ut: resten av den aktuella
 strängen, återstående strängargument och resten av formatsträngen
 ignoreras

Tolkningen av backslash följt av andra tecken är ospecificerad.

Återanvändning av formatsträngen

Formatoperanden återanvänds så många gånger som behövs för att konsumera alla argument.

Om det finns fler konverteringar än argument:

  • %b, %c och %s behandlas som om tom sträng hade givits
  • övriga konverteringar behandlas som om värdet noll hade givits

Om formatsträngen inte innehåller några konverteringsspecifikationer men argument ändå finns, är resultatet ospecificerat.

%c

Argumentet till %c kan vara en sträng.

  • Om strängen innehåller ett eller flera byte skrivs det första bytet ut
  • eventuella ytterligare byte ignoreras
  • om strängen är tom är det ospecificerat om ingenting skrivs eller om en
 nollbyte skrivs

Hur argument tolkas

Argument behandlas som strängar om motsvarande konvertering är:

  • %b
  • %c
  • %s

Argument till flyttalskonverteringar (om de stöds) ska tolkas som om de hade skickats till strtod().

Övriga argument tolkas som C-heltalskonstanter, med vissa tillägg:

  • inledande + eller - är tillåtet
  • om första tecknet är enkel- eller dubbelcitat används tecknets numeriska
 värde i den underliggande teckenkodningen
  • suffigerade heltalskonstanter kan tillåtas

Om ett argument inte kan konverteras fullständigt till rätt intern typ ska ett felmeddelande skrivas till standard error. Verktyget ska då inte avslutas med exit-status 0, men det ska fortsätta bearbeta återstående operander.

Det är inte ett fel om ett argument inte används helt för %b, %c eller %s.

EXIT STATUS

0
Lyckad körning.
>0
Ett fel inträffade.

KONSEKVENSER AV FEL

Standardbeteende.

ANVÄNDNING

printf används ofta som ett portabelt och mer förutsägbart alternativ till echo.

POSIX kräver inte stöd för flyttalsformat som %f och %e, eftersom shellaritmetik normalt är heltalsbaserad. Många implementationer stöder dem ändå som utökning.

För flerbytes-teckenkodningar bör man vara försiktig med:

  • %c
  • precision för %b eller %s

Ingen särskild mekanism finns i POSIX-varianten för att ange fältbredd eller precision med *; detta kan normalt lösas med skalvariabler.

%b är inte en del av ISO C, utan finns här som ett portabelt sätt att skriva strängar med escape-sekvenser.

EXEMPEL

Enkel interaktiv prompt

printf "\aPlease fill in the following: \nName: "
read name
printf "Phone number: "
read phone

Beräkna procent med bc och skriv ut formaterat

while read right wrong ; do
    percent=$(echo "scale=1;($right*100)/($right+$wrong)" | bc)
    printf "%2d right\t%2d wrong\t(%s%%)\n" \
        $right $wrong $percent
done < database_file

Återanvändning av formatsträngen

printf "%5d%4d\n" 1 21 321 4321 54321

Detta ger:

    1  21
  3214321
54321   0

Formatet användes tre gånger, och ett implicit nollvärde användes för den sista %4d-konverteringen.

Teckenvärden

printf "%d\n" 3 +3 -3 \'3 \"+3 "'-3"

I en teckenuppsättning kompatibel med ISO/IEC 646:1991 motsvarar detta numeriska värden för talen och tecknen 3, + och -.

MOTIVERING

printf lades till för att erbjuda funktionalitet som historiskt ofta hanterats av echo, men på ett tydligare och mer portabelt sätt.

Specifikationen följer i stort printf() från ISO C, men med vissa POSIX-anpassningar.

Tidigare versioner var mindre tydliga om hur argument skulle tolkas för heltal respektive flyttal. Den nuvarande beskrivningen klargör detta.

FRAMTIDA RIKTNING

Inga.

SE ÄVEN

awk(1p), bc(1p), echo(1p), fprintf(3p), strtod(3p)

COPYRIGHT

Delar av denna text bygger på IEEE Std 1003.1-2017 (POSIX). Originalstandarden från IEEE och The Open Group är den auktoritativa referensen.

Sidslut

Orginalhemsidan på Engelska https://man7.org/linux/man-pages/man1/printf.1p.html Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till PC Service som har sponsrat Linux.se med webbhotell.