A printf használata a Bash-ban – CloudSavvy IT

Avatar Gadam | 2021.01.23. 60 Views 0 Likes 0 Ratings

60 Views 0 Ratings Rate it

[ad_1]

Shutterstock / gilangtristiano

A szöveg formázása érdekes téma, különösen, ha a Bash-ról van szó. Míg a szövegformázáshoz számos eszköz létezik, a printf egyedi és univerzális. Tudjon meg mindent a printf fájlról a Bash-ban, hogy a szövegét a megfelelő módon formázhassa!

Használata printf Bash-ban

A C ++ és más fejlesztők már ismerik a printf programot, mint a szöveg kimenetének nagyszerű formázását programozáskor. Nagy előny, ha ugyanaz az eszköz elérhető a Bash-ban. A printf lehetővé teszi komplex kimeneti formátumok vezérlését és előállítását, éppen úgy, ahogyan szeretné. A printf kézikönyv oldala a printf-et „formátum és nyomtatási adatok” eszközként definiálja, ami pontosan ez.

Például szeretne egy decimális alapú számot kinyomtatni, amelynek pontos hossza 3 bájt (vagy karakter / szám) az egész részre (a tizedes pont vagy vessző előtti részre, attól függően, hogy a világ hol él és mi a területi beállítás) és 2 bájt (vagy karakter / szám) a szám tizedes részéhez? Nincs mit, a printf képes rá és még sok minden másra. Kimeneti a szöveget a képernyő egy adott oszlopába stb.

Bár a printf szintaxisa egy új fejlesztő számára zavarónak vagy összetettnek tűnhet, valójában meglehetősen egyszerű. Csak egy korlátozott számú általánosan használt formázási karakter használható, amelyek a printf kimenet definíciójában használhatók. Először nézzük meg ezeket.

Szintaxis: printf

Ezek a leggyakrabban használtak printf szintaxis számformázási idiómák:

%d or %i  a signed decimal integer
%u        an unsigned decimal integer
%f        a decimal floating point number
%e        a scientific notation number
%g        will let printf use %e or %f, whichever is shorter
%c        a single character
%s        a string of characters
%%        a literal '%'

Ezután jó tudni, hogyan adhatunk meg konkrét opciókat ezekkel a formázási idiómákkal kapcsolatban. Az ezekre vonatkozó opciók megadásának formátuma a következő:

%[flag(s)][width][.precision][length]number_formatting_idiom

Példák: printf

Tehát például egy 3 szélességű és 2 pontosságú úszóhoz meg kell adnia:

%3.2f

Nézzünk meg egy példát:

printf "%3.2fn" "100.304" 

Jól formázott úszó nyomtatása printf segítségével

Egyszerű és könnyű. Vegye figyelembe, hogy használhattunk volna változót a helyett "100.304":

VAR1=100.304
printf "%3.2fn" ${VAR1}

Formázott úszó nyomtatása printf segítségével Bash változóval

Vegye figyelembe azt is, hogyan adtunk hozzá új sort az a használatával n újsoros sorrend. A rendelkezésre álló értelmezett szekvenciák teljes listáját lásd: man printf. A leggyakoribbak azok n newline-hoz, t fülre és \ egy visszavágáshoz.

A fenti opció formátumban azt is láttuk, hogyan adhatunk meg zászlókat. Korlátozott mennyiségű közös jelző létezik:

-   Left-justify text (right-justify is the default)
+   Forces the use of a sign, even if positive
' ' A space is inserted if no sign will be used
0   Left-pad the number with zeroes instead of spaces when padding is specified

Így például:

VAR1=-100.304
VAR2=100.304
printf "% 3.2ftt%+3.2fn" ${VAR1} ${VAR2}

Negatív számok nyomtatása printf-vel és formázás

Itt két változót használtunk, és a kimenetet két füllel választottuk el, kettőt használva t fül szekvenciák. Szóköztünk közé (zászlóként) is % és a szélesség meghatározása. Ez a negatív számhoz vezetett VAR1 negatív előjellel nyomtatni. Ha a szám pozitív lett volna, nem nyomtattak volna előjelet, helyette egy helyet nyomtattak ugyanabban a helyzetben.

Végül a + zászló, és valóban a mi számunk adódik előnnyel + jel, függetlenül attól, hogy a szám már pozitív, és ezért (általában) nem nyomtatnak jelet.

Tehát hogyan biztosíthatjuk, hogy legyenek nulláink vagy szóközeink, még mindig meghatározott hosszúságúak? Először is meg kell győződnünk arról, hogy a definíciónk szélessége hosszabb, mint a változó tartalom, és másodszor használhatjuk a 0 zászló a vezető nullák megjelenítéséhez:

VAR1=-100.304
VAR2=100.304
printf "% 13.2fn%013.2fn%13.2f" ${VAR1} ${VAR2} ${VAR1}

Kimeneti formázás a printf és a vezető nullák meghatározásához

Ebben a példában 3 sort nyomtatunk, amelyeket kétszer választ el a n újsoros sorrend. Rögtön megjegyezzük, hogy ha a kimenet végén nincs új sor, akkor a Bash parancs kifejezetten a 3. kimeneti sorunk végén tér vissza.

Lehet, hogy ez nem egy szép vagy praktikus formátum interaktív módban a terminálban, hanem egy szkript belsejéből (gondoljon például egy olyan szekvenciára, mint például 1...2...3... amely lépésről lépésre épít a képernyőn, miközben előrehalad a kódon belül), ez nagyon hasznos lehet.

A kimenet második sorában a 0 jelző jelzi, hogy a kezdő nullákat szeretnénk használni VAR2. A kimenet valóban vezető nullákat eredményez, a megadott hosszúságig.

A kimenet első sorába szóközt illesztettünk, míg a harmadik kimeneti sorba (mindkettő a VAR1 változó) nem tettük. A kimenet ugyanaz, ami az egyetlen furcsaság, amit valaha is tapasztaltam munka közben printf; azt lehetne várni, hogy lesz egy további karakter, ha a printf space flag meghatározása. Ez akkor is ugyanaz marad, ha vezető nullákat használnánk. Az is változatlan marad, ha nincs megadva hossz.

Az űrzászló használhatósága ezért bizonyos esetekben (negatív számok) korlátozott lehet. Ez nem vonatkozik a pozitív számokra:

VAR1=100.304
printf "% fn%0fn" ${VAR1} ${VAR1}

Pozitív számban vezető tér a speciális űrzászló alapján

Ebben az esetben (pozitív számok) a űrzászló a várakozásoknak megfelelően működik, és az első esetében egy extra szóköz kerül be VAR1 Kimenet.

Következtetés

A printf használata a Bash parancsfájlokból vagy a parancssorból tiszta, jól definiált kimenetet eredményezhet. Ha helyesen méretezi a változókat (és esetleg a tartományt is ellenőrizze, hogy azok biztonságban vannak-e), akkor használja printf rugalmas módszert ad a kimenet formázására (és a nagyobb alkalmazások általános képernyőelrendezésére).

Ebben a cikkben megvizsgáljuk az általánosan használt számformázási idiómákat, hogyan definiálhatjuk a számok egész és tizedes részének szélességét, valamint áttekintjük a printf leggyakrabban használt jelzőit. Élvezze a jól formázott adatok nyomtatását a printf segítségével!

[ad_2]
Source link