GNU/Linux >> Znalost Linux >  >> Linux

Bash printf - Jak tisknout proměnnou v Bash

Úvod

Bash printf command je nástroj používaný pro vytváření formátovaného výstupu. Je to vestavěný shell, podobný printf() funkce v C/C++, Java, PHP a dalších programovacích jazycích. Příkaz umožňuje tisknout formátovaný text a proměnné na standardní výstup.

Použijte printf v bash skriptech pro zvýšení efektivity a opětovné použitelnosti při programování.

V tomto tutoriálu se naučíte používat printf příkaz v Linuxu pro tisk proměnných a formátování výstupu.

Předpoklady

  • Počítač se systémem Linux
  • Přístup k terminálu (Ctrl + Alt + T )

Syntaxe Bash printf

printf příkaz přijímá následující syntaxi:

printf [-v var] [format specifiers] [arguments]

[-v var]

Volitelný -v flag přiřadí výstup k [var] proměnnou namísto tisku na standardní výstup.

[format specifiers]

Specifikátory formátu jsou řetězce, které určují metody formátování specifikátorů. Následující část obsahuje seznam akceptovaných specifikátorů.

[arguments]

Argumenty mohou být libovolné hodnoty nebo proměnné a [format specifiers] přejděte na [arguments] . Pokud existuje více argumentů než specifikátorů formátu, formátovací řetězec se použije znovu, dokud nebude interpretován poslední argument.

Pokud je specifikátorů formátu méně než argumentů, formáty čísel se nastaví na nulu (0 ), zatímco formáty řetězců jsou nastaveny na null (prázdné).

Specifikátory printf

Následující tabulka ukazuje běžné printf specifikátory formátu a jejich popisy:

Specifikátor formátu Popis
%c Zacházejte s argumenty jako s jedním znakem.
%d Považujte vstup za desetinné (celé číslo) (základ 10).
%e Zachází se vstupem jako s exponenciálním číslem s plovoucí desetinnou čárkou.
%f Zacházejte se vstupem jako s číslem s plovoucí desetinnou čárkou.
%i Zacházejte se vstupem jako s celým číslem (základ 10).
%o Zachází se vstupem jako s osmičkovým číslem (základ 8).
%s Zacházejte se vstupem jako s řetězcem znaků.
%u Zacházejte se vstupem jako s dekadickým číslem bez znaménka (celé číslo).
%x Zachází se vstupem jako s hexadecimálním číslem (základ 16).
%% Vytiskněte znak procenta.
%Wd Vytiskněte W celé číslo X číslice široké.
%(format)T Vytiskne řetězec data a času, který je výsledkem použití formátu jako formátovacího řetězce pro strftime . Odpovídajícím argumentem může být počet sekund od Epochy (1. ledna 1970, 00:00), -1 (aktuální čas), nebo -2 (čas spuštění shellu). Pokud argument neuvedete, použije se jako výchozí hodnota aktuální čas.
\% Vytiskněte znak procenta.
\n Vytiskne newline postava.
\t Vytiskněte tab postava.

Některé specifikátory formátu přijímají modifikátory formátu, které upravují jejich akce. Zadejte modifikátory mezi % znak a znak, který určuje formát.

Dostupné modifikátory formátu jsou:

  • <N> . Zadejte číslo, které určuje minimální šířku pole. Pokud je výstupní text kratší, je doplněn mezerami. Pokud je text delší, pole se rozšíří.
  • . (tečka) . Při použití s ​​modifikátorem šířky pole se pole pro delší text nerozšíří. Místo toho je text zkrácen.
  • - . Zarovná vytištěný text doleva. Výchozí zarovnání je správné.
  • 0 . Doplní čísla nulami místo mezer.
  • <space> . Kladné číslo doplní mezerou a záporné číslo mínus (- ).
  • + . Vytiskne všechna čísla podepsaná (+ pro kladné, - pro negativní).
  • ' . U desítkových převodů použije oddělovač seskupení tisíců na celočíselnou část výstupu podle aktuálního LC_NUMERIC soubor.

Příklady Bash printf

Níže uvedené příklady demonstrují běžné případy použití a různé způsoby formátování výstupu pomocí printf .

I když příkaz může tisknout proměnné v terminálu, je výhodnější jej používat v bash skriptech, protože umožňují opětovné použití kódu a usnadňují automatizaci.

Oddělte výstup znakem nového řádku

Na rozdíl od echo pomocí printf Chcete-li vytisknout řetězec nebo proměnnou bez jakýchkoli specifikátorů formátu, vypíše se neformátovaný text na jeden řádek. Chcete-li přidat znak nového řádku a oddělit položky, zadejte \n specifikátor formátu:

Vytištěný výstup nyní odděluje znak nového řádku.

Tisk více proměnných

Použijte printf pro tisk více proměnných na standardní výstup. Postupujte podle následujících kroků:

1. Otevřete terminál (Ctrl + Alt + T ) a vytvořte bash skript pomocí textového editoru, jako je vi/vim :

vi script.sh

2. Zadejte následující řádky:

#!/bin/bash
printf "Enter your name:\n"
read name
printf "Enter your surname:\n"
read surname 
printf 'Welcome: %s\n' "$name $surname"

%s ve formátovacím řetězci ukazuje na proměnné definované v předchozích řádcích, zatímco \n pokyn printf pro přidání znaku nového řádku.

3. Uložte skript a ukončete vi zadáním:

:wq

4. Spusťte skript:

bash script.sh

5. Zadejte požadované hodnoty pro dvě proměnné a zkontrolujte výsledek:

printf příkaz uloží vstup do dvou proměnných a poté vypíše proměnné na standardní výstup.

Vytisknout proměnnou v simulované tabulce

Pomocí printf můžete automaticky přidat dynamické odsazení nebo změnit zarovnání proměnného výstupu . Chcete-li vytisknout proměnnou ve falešné tabulce, postupujte podle následujících kroků:

1. Vytvořte soubor skriptu:

vi table.sh

2. Zadejte následující řádky a skript uložte:

#!/bin/bash
var='hello'
printf '|%10s|\n' "$var"

%10 zajišťuje, že v symbolech potrubí je deset znaků, čímž se výstup proměnné vyplní mezerami na tuto délku. s zachází se vstupní proměnnou jako s řetězcem.

3. Spusťte skript a zkontrolujte výsledek:

bash table.sh

Příkaz vypíše proměnnou uzavřenou do svislých symbolů a ve výchozím nastavení ji zarovná doprava. Chcete-li zarovnat výstup na levou stranu, přidejte - modifikátor za % znak ve formátovacím řetězci:

#!/bin/bash
var='hello'
printf '|%-10s|\n' "$var"

Přidat desetinné čárky

Použijte printf pomocí %f specifikátor formátu, aby se vstup považoval za číslo s plovoucí desetinnou čárkou a přidal se přesnost na dvě desetinná místa. Postupujte podle následujících kroků:

1. Vytvořte bash skript:

vi precision.sh

2. Zadejte následující řádky a skript uložte:

#!/bin/bash
printf "Enter a decimal number:\n"
read number
printf "%5.2f\n" "$number"

3. Spusťte skript:

bash precision.sh

Výstup vypíše proměnnou jako číslo s plovoucí desetinnou čárkou zaokrouhlené na dvě desetinná místa.

Ukládání dat do proměnné

Použijte -v příznak pomocí printf přiřadit proměnnou shellu pro uložení dat namísto jejich tisku na standardní výstup.

Postupujte podle následujících kroků:

1. Vytvořte bash skript:

vi variable.sh

2. Zadejte následující řádky a skript uložte:

#!/bin/bash
printf -v var 'Welcome'
printf '%s\n' "$var"

3. Spusťte skript:

bash variable.sh

Výstup vytiskne obsah uložené proměnné.

Převod hexadecimálních čísel

%d specifikátor formátu instruuje printf zacházet se vstupem jako s desetinným (celým) číslem. Pomocí specifikátoru vytvořte skript, který převede hexadecimální čísla na desítková.

Postupujte podle následujících kroků:

1. Vytvořte bash skript:

vi convert.sh

2. Zadejte následující řádky a skript uložte:

#!/bin/bash
printf 'Enter a hexadecimal number:\n'
read number
printf "%d\n" "$number"

3. Spusťte skript:

bash convert.sh

Skript převede vstupní hexadecimální číslo na desítkové.

Převod desetinných čísel na osmičkové

Použijte %o specifikátor formátu pro převod desetinných čísel na osmičková. Postupujte podle následujících kroků:

1. Vytvořte skript:

vi octal.sh

2. Zadejte následující řádky a skript uložte:

#!/bin/bash
printf "Enter a decimal number:\n"
read number
printf "The octal number of "$number" is %o\n" "$number"

3. Spusťte skript:

bash octal.sh

Skript převede zadanou desítkovou hodnotu na osmičkovou.

Datum tisku

Vytvořte skript, který využívá printf pro zobrazení aktuálního data. Postupujte podle následujících kroků:

1. Vytvořte skript:

vi datetime.sh

2. Zadejte následující řádky a skript uložte:

#!/bin/bash
printf 'Today is %(%F)T\n' -1

%F zachází se vstupem jako s číslem s plovoucí desetinnou čárkou, zatímco -1 označuje aktuální datum.

3. Spusťte skript a zkontrolujte, zda funguje:

bash datetime.sh

Výstup uvádí aktuální datum a čas.

Přidejte čárky k tisícům

Při práci s čísly použijte ' modifikátor, aby byl výstup čitelnější přidáním čárek k označení tisíců. Postupujte podle následujících kroků:

1. Vytvořte bash skript:

vi decimals.sh

2. Zadejte následující řádky:

#!/bin/bash
printf "Enter a number:\n"
read number
printf "%'d\n" $number

3. Spusťte skript:

bash decimals.sh

Po zadání čísla skript použije printf pro automatické přidání čárek ke vstupní hodnotě.

Získejte znakový ASCII kód

Vytvořte skript, který používá printf pro výstup ASCII vstupního znaku hodnota. Postupujte podle následujících kroků:

1. Vytvořte skript:

vi character.sh

2. Zadejte následující řádky a skript uložte:

#!/bin/bash
printf "Enter a character to get character code:\n"
read character
printf "%d\n" "'$character"

3. Spusťte skript a otestujte, zda funguje:

bash character.sh

Skript vypíše hodnotu ASCII vstupního znaku.


Linux
  1. Jak vytisknout řádky číslo 15 a 25 z každých 50 řádků?

  2. Jak číst řetězec jako hexadecimální číslo v Bash?

  3. Bash + Použití Printf za účelem tisku ve speciálním formátu?

  1. Jak otestuji, zda je proměnná číslo v Bash?

  2. Jak porovnat dva řetězce ve formátu verze oddělené tečkami v Bash?

  3. Jak vytisknout číslo v sestavě NASM?

  1. Jak zapsat celé číslo do binárního souboru pomocí Bash?

  2. Jak přidat ikonu do výzvy bash

  3. Jak mohu spočítat počet znaků v proměnné Bash