
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"
Egyszerű és könnyű. Vegye figyelembe, hogy használhattunk volna változót a helyett "100.304"
:
VAR1=100.304 printf "%3.2fn" ${VAR1}
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}
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}
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}
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!