GNU/Linux >> Znalost Linux >  >> Linux

Příkaz Bash printf

Při psaní bash skriptů obvykle používáme echo pro tisk na standardní výstup. echo je jednoduchý příkaz, ale jeho možnosti jsou omezené.
Chcete-li mít větší kontrolu nad formátováním výstupu, použijte printf příkaz.

printf příkaz formátuje a vypisuje své argumenty, podobně jako C printf() funkce.

printf Příkaz #

printf je shell zabudovaný v Bash a dalších populárních shellech jako Zsh a Ksh. K dispozici je také samostatný /usr/bin/printf binární, ale přednost má verze vestavěná do shellu. Budeme se zabývat verzí printf vestavěnou do Bash .

Syntaxe pro printf příkaz je následující:

printf [-v var] format [arguments]

-v volba říká printf ne vytisknout výstup, ale přiřadit jej k proměnné.

format je řetězec, který může obsahovat tři různé typy objektů:

  • Normální znaky, které se jednoduše vytisknou na výstup tak, jak jsou.
  • Znaky s vynecháním zpětného lomítka, které jsou interpretovány a poté vytištěny.
  • Specifikace převodu, které popisují formát a jsou nahrazeny hodnotami příslušných argumentů, které následují za formátovacím řetězcem.

Příkaz přijímá libovolný počet arguments . Pokud více arguments než jsou k dispozici specifikátory formátu, format řetězec je znovu použit ke spotřebě všech argumentů. Pokud je méně arguments než jsou dodávány specifikátory formátu, další specifikátory numerického formátu jsou nastaveny na nulovou hodnotu, zatímco specifikátory formátu řetězce jsou nastaveny na null řetězec.

Níže je uvedeno několik bodů, které je třeba vzít v úvahu při předávání argumentů printf příkaz:

  • Shell nahradí všechny proměnné, shodu zástupných znaků a speciální znaky, než předá argumenty do printf příkaz.
  • Při použití jednoduchých uvozovek '' doslovná hodnota každého znaku v uvozovkách bude zachována. Proměnné a příkazy nebudou rozbaleny.
printf "Open issues: %s\nClosed issues: %s\n" "34" "65"
Open issues: 34
Closed issues: 65

Řetězec Open issues: %s\nClosed issues: %s\n je format zatímco „34“ a „65“ jsou argumenty. Formátovací řetězec obsahuje dva znaky nového řádku (\n ) a dva specifikátory formátu (%s ), které jsou nahrazeny argumenty.

printf příkaz nepřidává znak nového řádku (\n ) na konci řádku.

Postavy bez zpětného lomítka #

Znaky uvozené zpětným lomítkem jsou interpretovány při použití ve formátovacím řetězci nebo v argumentu odpovídajícím %b specifikátor konverze. Zde je seznam nejběžnějších únikových znaků:

  • \\ - Zobrazí znak zpětného lomítka.
  • \b - Zobrazí znak backspace.
  • \n - Zobrazí nový řádek.
  • \r - Zobrazí návrat vozíku.
  • \t – Zobrazí vodorovnou kartu.
  • \v – Zobrazí svislou kartu.

Specifikace konverze #

Specifikace převodu má následující formu:

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

Každá specifikace konverze je označena znakem procenta (% ), obsahuje volitelné modifikátory a končí jedním z následujících písmen, která představují datový typ (specifier ) odpovídajícího argumentu:aAbcdeEfgGioqsuxX .

Specifikátor konverze typu #

Převod typu specifier je znak, který určuje, jak interpretovat odpovídající argument. Tento znak je povinný a je umístěn za volitelná pole.

Níže je uveden seznam všech typů konverzí a jejich funkce:

  • %b - Vytiskněte argument a zároveň rozbalte sekvence escape zpětného lomítka.
  • %q - Vytiskněte argument v uvozovkách shellu, znovu použitelný jako vstup.
  • %d , %i - Vytiskněte argument jako celé číslo se znaménkem v desítkové soustavě.
  • %u - Vytiskněte argument jako celé desítkové číslo bez znaménka.
  • %o - Vytiskněte argument jako celé osmičkové číslo bez znaménka.
  • %x , %X - Vytiskněte argument jako hexadecimální celé číslo bez znaménka. %x vytiskne malá písmena a %X tiskne velkými písmeny.
  • %e , %E - Vytiskněte argument jako číslo s plovoucí desetinnou čárkou v exponenciálním zápisu. %e vytiskne malá písmena a %E tiskne velkými písmeny.
  • %a , %A - Vytiskněte argument jako číslo s plovoucí desetinnou čárkou v hexadecimálním zlomkovém zápisu. %a vytiskne malá písmena a %A tiskne velkými písmeny.
  • %g , %G - Vytiskněte argument jako číslo s plovoucí desetinnou čárkou v normálním nebo exponenciálním zápisu, podle toho, co je pro danou hodnotu a přesnost vhodnější. %g vytiskne malá písmena a %G tiskne velkými písmeny.
  • %c - Vytiskněte argument jako jeden znak.
  • %f - Vytiskněte argument jako číslo s plovoucí desetinnou čárkou.
  • %s - Vytiskněte argument jako řetězec.
  • %% - Vytiskněte doslovné % symbol.

Číslo bez znaménka představuje nulu a kladná čísla, zatímco číslo se znaménkem představuje záporná, nula a kladná čísla.

Následující příkaz vytiskne číslo 100 ve třech různých číselných soustavách:

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

Příkaz příznaků #

Příznaky jsou prvními volitelnými modifikátory a používají se k nastavení zarovnání, úvodních nul, předpon atd.

Zde jsou ty nejběžnější:

  • - - Zarovnat vytištěný text v poli doleva. Ve výchozím nastavení je text zarovnán vpravo.
  • + - Před čísly uveďte + nebo - znamení. Ve výchozím nastavení jsou pouze záporná čísla uvozena záporným znaménkem.
  • 0 - Doplňuje čísla úvodními nulami místo mezer.
  • prázdné - Před kladná čísla vložte mezeru a záporná čísla minus (- ).
  • # - Alternativní formát čísel.

Direktiva šířky #

width direktiva filed se umístí za všechny příznakové znaky a specifikuje minimální počet znaků, ve kterých by konverze měla vést.

Pokud je výstupní šířka textu menší než zadaná šířka, doplní se mezerami. Šířku lze zadat jako nezáporné desítkové celé číslo nebo hvězdičku (* ).

Zde je příklad:

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

%20s znamená nastavit pole alespoň 20 znaků dlouhé. Před text jsou přidány mezery, protože ve výchozím nastavení je výstup zarovnán vpravo. Chcete-li zarovnat text doleva, použijte - příznak (%-20s ).

      Mark 305

Když je hvězdička (* ) se používá jako width direktiva, pak je šířka pole převodu nastavena argumentem šířky, který předchází argumentu, který se formátuje.

V příkladu níže nastavujeme šířku na 10:

printf "%0*d" 10 5

0 je příznak, který doplní číslo úvodními nulami místo mezer. Výstupní text bude mít alespoň 10 znaků:

0000000005

Příkaz pro přesnost #

.precision modifikátor se skládá z tečky (. ) následované kladným celým číslem nebo hvězdičkou (* ), který v závislosti na typu specifikátoru nastavuje počet znaků řetězce nebo číslic nebo počet desetinných míst, které se mají vytisknout.

Přesnost má následující účinek:

  • Pokud je typem převodu celé číslo, přesnost určuje minimální počet číslic, které se mají vytisknout. Pokud je počet číslic v argumentu menší než přesnost, vytisknou se úvodní nuly.
  • Pokud je typem převodu plovoucí desetinná čárka, přesnost určuje počet číslic, které následují za znakem desetinné čárky. Výchozí přesnost je 6.
  • Pokud je typem převodu řetězec, přesnost určuje maximální počet znaků, které se mají vytisknout. Pokud je počet znaků v argumentu větší než přesnost, přebytečné znaky budou zkráceny.

Zde je příklad ukazující, jak zaokrouhlit číslo s plovoucí desetinnou čárkou na 3 desetinná místa:

printf "%.3f" 1.61803398
1.618

Když je přesnost nastavena na hvězdičku (* ), jeho hodnota je nastavena argumentem přesnosti, který předchází argumentu, který se formátuje.

printf "%.*f" 3 1.61803398
1.618

Závěr č.

printf příkaz převezme formát a argumenty a vytiskne formátovaný text.

Pokud máte nějaké dotazy nebo zpětnou vazbu, neváhejte zanechat komentář.


Linux
  1. Základy příkazů Linuxu:printf

  2. bash sh - příkaz nenalezen

  3. Bash - příkaz Datum a mezera

  1. Příkaz „eval“ v Bash?

  2. printf:příkaz nenalezen

  3. Příklady příkazů printf v Linuxu

  1. Vysvětlení příkazu Bash trap

  2. spouštění apachectl z bash

  3. příkaz pro export bash