Acasă Studiu Cum să utilizați comanda Bash printf pe Linux

Cum să utilizați comanda Bash printf pe Linux

de Frank
Publicat: Ultima actualizare pe

Introducere

Comanda Bash printf vă oferă mai multă flexibilitate și opțiuni de formatare decât comanda echo atunci când scrieți într-o fereastră de terminal Linux. Chiar și particularitățile printf pot fi benefice.

Este unul dintre cele mai fundamentale aspecte ale lucrului cu software. Citiți ce a scris aplicația pe ecran. Chiar și cu obiceiul derivat din Unix și suportat de Linux ca programele de linie de comandă să fie cât mai scurte posibil, multe aplicații scriu pe terminal doar când ceva nu merge bine. O bază crucială în programare este informarea utilizatorului despre ceea ce se întâmplă, se va întâmpla sau s-a întâmplat recent.

Comanda echo din shell-ul Bash poate scrie text pe afișajul terminalului. Îl puteți folosi în scripturi sau pe linia de comandă și poate gestiona variabile și arăta valorile acestora dacă sunt conținute în șir. Deci, ce rost are printf? Nu este scrierea textului ceva de care se ocupă ecou? Printf, pe de altă parte, oferă mai mult decât capacitatea de a scrie șiruri în ferestrele terminalului. Vă oferă multă versatilitate atunci când vine vorba de formatarea ieșirii și are câteva trucuri suplimentare în mânecă.

Comanda printf din Bash este similară cu funcția printf din C, totuși există mai multe modificări. Va trebui să fii conștient de modificări dacă ești familiarizat cu C.

Crearea șirurilor simple

Să ne uităm la diferențele dintre echo și printf când vine vorba de scrierea șirurilor de caractere pe terminal.

ecou iată câteva cuvinte
printf iată câteva cuvinte

Folosind echo și printf cu cuvinte fără ghilimele

În timp ce echo imprimă toate cuvintele, printf îl publică pur și simplu pe primul. De asemenea, printf nu imprimă o linie nouă. Ieșirea este smack dab în mijlocul promptului de comandă. Dar, în primul rând, toate cuvintele trebuie citate pentru ca printf să acționeze asupra lor.

ecou iată câteva cuvinte
printf "iată câteva cuvinte"

Folosind echo și printf cu cuvinte citate

Este un pas înainte. Am tipărit toate cuvintele, dar încă așteptăm o nouă linie. Acest lucru se datorează faptului că printf tipărește o linie nouă doar dacă o solicitați în mod specific. Acest lucru poate suna incomod, dar vă permite să alegeți dacă adăugați sau nu unul. Trebuie să adăugați „n” în șirul dvs. pentru ca printf să emită o nouă linie. Secvența de evadare „newline” este folosită aici.

ecou iată câteva cuvinte
printf „aici sunt câteva cuvinte”

Folosind echo și printf cu cuvinte ghilimele și caracterul newline

Veți folosi o linie nouă uneori și nu altele. În acest exemplu, o comandă printf utilizează o nouă linie, în timp ce cealaltă nu.

printf „Cum se face” && printf „Geekn”

Folosind două printfs pentru a crea o singură linie de text

Deoarece primul printf nu tipărește o linie nouă, rezultatul de la al doilea printf este plasat pe aceeași linie cu „How-To”. Pentru a tipări o nouă linie, a doua printf folosește n. Linia de comandă va apărea acum pe linia de sub textul tipărit.

Personaje care au ocolit capturarea

Iată câteva caractere suplimentare care pot fi folosite ca escape. Ați văzut anterior cum funcționează „n”.

n: Comută la o linie nouă.
r: Această comandă imprimă o întoarcere de cărucior. Cursorul de ieșire este returnat la începutul liniei curente.
t: Această comandă imprimă un caracter tabulator.
v: adaugă un spațiu vertical de tab la pagină.
\: Este imprimat un caracter bară oblică inversă.
„: Afișează ghilimele.
b: Afișează caracterul backspace.

Caracterul de evadare pentru întoarcerea căruciorului este folosit pentru a readuce cursorul la începutul liniei curente.

printf „Mierea este rădăcina tuturor relelorBanii”

Folosind caracterul de întoarcere la cărucior pentru a reveni la începutul liniei

Comanda printf citește de la stânga la dreapta. Până când printf detectează caracterul de escape „r”, șirul este scris ca text obișnuit. Cursorul de ieșire este repoziționat la începutul liniei curente.

Cu litera imediat sub caracterul „r”, procesarea șirului continuă. Restul face printf să imprime „Bani”, care înlocuiește expresia „Miere”.

Caracterul backslash „” semnalează secvențele de escape, în timp ce ghilimelele „”” sunt folosite pentru a ghilimele șiruri. Dacă doriți să imprimați aceste caractere, utilizați o bară oblică inversă pentru a le scăpa. Acest lucru indică printf că ar trebui tratate ca caractere literale.

printf „Acesta este un tTab, acesta este un ghilimele „, iar acesta \ este un Backslashn”

Evadând personaje, astfel încât acestea să fie tratate la propriu

Variabile în acțiune

Utilizarea variabilelor cu printf este destul de similară cu utilizarea variabilelor cu echo. Pentru a include o variabilă, cum ar fi această variabilă de mediu, utilizați semnul dolar „$” în mod normal înaintea acesteia.

printf "Directorul principal: $HOMEn"

Folosind printf cu o variabilă de mediu

Formatarea șirurilor

Șirurile de format sunt șiruri care specifică formatul de ieșire. Furnizați textul șirului de format și valori suplimentare cu care să lucrați ca argumente.

Textul, secvențele de escape și specificatorii de format pot fi toate incluse în șirul de format.

Specificatorii de format de la Printf îl informează ce fel de argument ar trebui să accepte, cum ar fi șiruri de caractere, numere sau caractere.

Cei mai frecventi specificatori de format sunt afișați mai jos. Un simbol „procent” le precede pe toate. Puteți imprima un semn de procente combinând semnele de două procente „procent procent”.

  • %s: Imprimă un șir.
  • %c: Imprimă un singur caracter.
  • %d: Imprimă un număr întreg.
  • %f: tipărește un număr în virgulă mobilă.
  • %u: Imprimă un întreg fără semn.
  • %o: Imprimă o valoare în octal.
  • %x: Imprimă o valoare înhexazecimal, cu litere mici.
  • %X: Imprimă o valoare în hexazecimal, cu majuscule.
  • %e: Tipărește un număr în virgulă mobilă în notație științifică, cu litere mici.
  • %E: Tipărește un număr în virgulă mobilă în notație științifică, cu majuscule.
  • %%: Imprimă un simbol procentual „%”.
printf „Cum se face %sn” „Geek”
printf „%s%s %sn” „Cum” „-To” „Geek”

Se afișează printf care acceptă „prea multe” argumente

Șirul de format al primei comenzi conține un conținut propriu. Șirul „Geek” este trimis la printf ca argument. Specificatorul de format „%s” îl potrivește și îl imprimă. Între șirul de format și șirul de argument, există doar un spațiu. În C, ar fi necesară o virgulă pentru a le separa, dar cu versiunea Bash a printf, un spațiu este suficient.

Doar specificatorii de format și secvența de escape newline sunt incluse în al doilea șir de format. Fiecare dintre specificatorii de format „%s” consumă pe rând cei trei parametri de șir. Din nou, în C, este necesară o virgulă între fiecare parametru, dar funcția Bash printf ne permite să ignorăm această cerință.

Pur și simplu utilizați specificatorul de format adecvat pentru a scoate diferite tipuri de argumente. Iată o funcție simplă de conversie a numerelor bazată pe printf. În notație zecimală, octală și hexazecimală, vom tipări numărul 15.

printf "Dec: %dnOct: %onHex: %xn" 15 15 15

folosind printf pentru a imprima valori numerice în diferite notații de bază

Să o reducem puțin pentru a face exemplul mai puțin aglomerat.

printf „Hex: %xn” 15

Imprimarea unei valori hexazecimale

Majoritatea dintre noi suntem obișnuiți să vedem numere hexazecimale redate cu litere mari și cu valori mai mici de 0x10 precedate de un zero înainte. Putem face acest lucru plasând un specificator de lățime între semnul de procent „%” și caracterul „X” și utilizând specificatorul de format hexazecimal majuscule „% X”.

Aceasta specifică dimensiunea câmpului în care argumentul ar trebui să fie tipărit la printf. S-au adăugat spații pe teren. Numerele din două cifre vor fi prezentate fără nicio umplutură în acest stil.

printf „Hex: %2Xn” 15

imprimarea unei valori hexazecimale cu majuscule într-un câmp de 2 caractere

Acum avem o valoare majuscule cu un spațiu de început scris pe ea. Prin plasarea unui zero în fața celor două, putem avea printf pad câmpul cu zerouri în loc de spații:

printf "Hex: %02Xn" 15

imprimarea unei valori hexazecimale cu majuscule într-un câmp cu lățimea de 2 caractere completat cu zerouri

Specificatorul de precizie vă permite să specificați câte puncte zecimale trebuie incluse în rezultat.

printf "Floating point: %08.3fn" 9.243546

Utilizarea modificatorilor de lățime și precizie cu un număr în virgulă mobilă

Acest lucru face ca crearea de tabele de rezultate cu rezultate perfect aliniate este o simplă simplă. Această comandă afișează și o altă idiosincrazie a lui Bash printf. Dacă există mai multe argumente decât specificatorii de format, argumentele sunt introduse în șirul de format în loturi până când sunt toate epuizate. Cantitatea de specificatori de format din șirul de format determină dimensiunea lotului care este procesat la un moment dat. Argumentele suplimentare trimise la funcția printf în C sunt ignorate.

printf „Float: %8.3fn” 9.243546 23.665 8.0021

Utilizarea modificatorilor de lățime și precizie pentru a crea o masă îngrijită

Șirurile pot folosi, de asemenea, specificatorii de lățime și precizie. Șirurile sunt tipărite într-un câmp lat de 10 caractere folosind această comandă.

printf "%10s %dn" "coats" 7 "shoes" 22 "Umbrellas" 3

Folosind modificatorul de lățime cu șiruri

În mod implicit, valorile sunt justificate la dreapta în câmpurile lor. Pentru a le justifica la stânga, folosiți semnul minus „-„imediat în urma procentului”%" semn.

printf "%-10s %d" "paltoane" 7 "pantofi" 22 "Umbrele" 3

Folosind un specificator de lățime justificat la stânga cu șiruri

Specificatorul de precizie vă permite să alegeți numărul maxim de caractere care vor fi imprimate. Literele două puncte „:” sunt folosite pentru a indica limitările câmpului de lățime. Nu în modul în care termenul „umbrele” este scurtat.

printf ":%10.6s:n" "coats" "shoes" "Umbrellas"
printf ":%-10.6s:n" "paltoane" "pantofi" "umbrele"

Utilizarea modificatorului de precizie pentru a limita numărul de caractere care sunt tipărite dintr-un șir

Chiar și ca argument, specificatorul de lățime poate fi folosit. În loc de un specificator numeric, utilizați un asterisc „*” și furnizați lățimea ca intrare întreg.

printf „%*sn” 20 „Cel mai din dreapta” 12 „Mijloc” 5 „Cel mai din stânga”

Trecerea specificatorului de lățime ca argument pentru printf

Alte ciudatenii si trucuri

Specificatorii de format din șirul de format vor funcționa cu valori de tipul adecvat, indiferent dacă sunt furnizate ca argumente obișnuite pe linia de comandă sau creați ca rezultat al unei expresii.

Aceasta afișează rezultatul adunării a două numere:

printf „23+32=%dn” $((23+32))

Tipărirea sumei a două numere

Numărul de foldere din directorul de lucru curent este tipărit de această comandă:

printf „Există %d directoaren” $(ls -d */ | wc -l)

Numărarea directoarelor cu printf

Comanda printf afișează un șir care a fost returnat de la un alt program.

printf „Utilizator curent: %sn” $(whoami)

Imprimarea rezultatului de la o altă comandă

Dacă specificatorul de format de șir „procent s” nu este dat cu un argument, printf returnează null.

printf „Unul: %s doi: %sn” „Alfa”

Cum se ocupă printf cu argumentele șir lipsă

Dacă o valoare numerică este dată accidental pentru specificatorul de format de șir „% s”, aceasta o tipărește ca șir și nu se plânge. Dacă faceți acest lucru folosind C printf, veți ajunge cu o mulțime de probleme. Software-ul dvs. se va prăbuși aproape sigur. Bash printf, pe de altă parte, nu pare să-l deranjeze.

printf „Unul: %s doi: %sn” „Alpha” 777

Cum printf acceptă în tăcere numerele întregi ca valori de șir

Dacă specificatorul de format întreg „% d” nu primește un argument, este tipărit zero.

printf „Număr întreg: %dn”

Cum printf gestionează argumentele întregi lipsă

Bash va afișa un mesaj de eroare și printf va imprima zero dacă specificatorul de format întreg „% d” primește un șir de caractere introdus accidental.

printf "Integer: %dn" "Șapte"

Cum tratează printf șirurile care sunt furnizate în loc de argumente întregi

Simbolurile incomode pot fi create prin introducerea numărului lor Unicode, cunoscut și ca „punct de cod”. Litera „u” este folosită pentru a evada anumite caractere, urmată de valoarea lor Unicode.

printf "Simbolul euro: u20ACn"

Se imprimă o valoare Unicode escape

Pentru a acomoda secvențele de escape în șirurile de argumente, utilizați specificatorul de format „% b” în loc de specificatorul de format de șir „% s” din șirul de format.

printf "%s" "u20ACn"
printf „%b” „u20ACn”

Folosind specificatorul de format %b pentru a gestiona secvențele de escape în argumente șir

Comanda inițială printf nu recunoaște secvența de escape newline și nu procesează valoarea Unicode. Specificatorul de format „% b” este utilizat în a doua comandă printf. Caracterul Unicode este tratat corespunzător și este afișată o nouă linie.

Cai pentru curse

S-ar putea să fie nevoie să introduceți ocazional un text în fereastra terminalului. Cu toate acestea, printf este instrumentul ideal pentru sarcina în care trebuie să aplicați poziționare și formatare.

printf "%b" "Tha-" "tha-" "tha-" "asta-i tot oameni buni.n"

Ați putea dori, de asemenea

Navhow este dedicată învățării oamenilor din întreaga lume cum să facă orice.

 

Abonati-va

Cel mai bun buletin informativ de oriunde

©2022 Navhow, Toate drepturile rezervate