Cuprins
ToggleIntroducere
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
Î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"
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”
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”
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”
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”
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"
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”
Ș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
Să o reducem puțin pentru a face exemplul mai puțin aglomerat.
printf „Hex: %xn” 15
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
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
Specificatorul de precizie vă permite să specificați câte puncte zecimale trebuie incluse în rezultat.
printf "Floating point: %08.3fn" 9.243546
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
Ș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
Î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
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"
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”
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))
Numărul de foldere din directorul de lucru curent este tipărit de această comandă:
printf „Există %d directoaren” $(ls -d */ | wc -l)
Comanda printf afișează un șir care a fost returnat de la un alt program.
printf „Utilizator curent: %sn” $(whoami)
Dacă specificatorul de format de șir „procent s” nu este dat cu un argument, printf returnează null.
printf „Unul: %s doi: %sn” „Alfa”
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
Dacă specificatorul de format întreg „% d” nu primește un argument, este tipărit zero.
printf „Număr întreg: %dn”
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"
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"
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”
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"
- Cum să trimiteți iMessage de la o adresă de e-mail în loc de un număr de telefon
- Cum să includeți un fișier PDF într-un document Google
- Cum să derulați înapoi fișierele și folderele individuale în Git
- Cum se activează Windows 11
- Cum se modifică serverul DNS în Windows 10
- Cum se calculează media în Foi de calcul Google