Ú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.