GNU/Linux >> Linux Esercitazione >  >> Linux

Utilizzo del comando Bash printf per la stampa di output formattati

Il modo più semplice per stampare nella riga di comando di Linux è usare il comando echo.

echo "Value of var is $var"

Tuttavia, il comando echo non sarà adeguato quando è necessario stampare un output formattato.

È qui che il comando printf ti aiuta. Il comando bash printf funziona come il comando printf nel linguaggio di programmazione C/C++.

printf "My brother %s is %d years old.\n" Prakash 21

Riesci a indovinare l'output?

Il primo argomento %s si aspetta una stringa, %d si aspetta un numero intero decimale, proprio come C/C++. Non preoccuparti se non hai familiarità con C/C++.

Non è necessario impararlo solo per usare il comando printf nei tuoi script Bash. Lascia che ti mostri alcuni esempi del comando Bash printf.

Utilizzo del comando Bash printf

Cominciamo prima con la sintassi.

printf format [arguments]

Qui, format è una stringa che determina come verranno visualizzati i valori successivi.

Nell'esempio printf "My brother %s is %d years old.\n" Prakash 21 , l'intero "Mio fratello %s ha %d anni.\n" è formato ed è seguito dagli argomenti Prakash e 21 . Gli argomenti vengono utilizzati per sostituire gli identificatori di formato (%s, %d ecc.) che spiegherò più avanti in questo articolo.

Nella sua forma più semplice, printf può essere usato come comando echo per visualizzare una stringa.

printf "Hello World\n"

Nota il nuovo carattere di riga \n alla fine? La differenza tra il comando echo e printf è che echo aggiunge automaticamente un nuovo carattere di riga alla fine, ma per printf, devi aggiungerlo esplicitamente.

Prestare particolare attenzione al tipo e al numero di argomenti

Tieni presente che la stringa di formato tenta di essere applicata a tutti gli argomenti. Questo è il motivo per cui dovresti prestare particolare attenzione ad esso.

[email protected]:~$ printf "Hello, %s! \n" Abhishek Prakash
Hello, Abhishek! 
Hello, Prakash!

Allo stesso modo, dovresti anche prestare attenzione al tipo di identificatore di formato previsto nella stringa di formato.

Come puoi vedere nell'esempio sopra, se non trova gli argomenti desiderati, mostra i valori predefiniti che sono null per le stringhe e 0 per i numeri interi.

printf "Hi %s, your room number is %d. \n" Abhishek Prakash 131
bash: printf: Prakash: invalid number
Hi Abhishek, your room number is 0. 
Hi 131, your room number is 0.

Qui ci vuole Abhishek Prakash come primo insieme di argomenti e 131 come seconda serie di argomenti.

Quando trova una stringa (Prakash) invece di un numero intero, si lamenta ma continua a visualizzare l'output con il secondo argomento al suo valore predefinito 0.

Allo stesso modo, vede 131 come stringa nel secondo set di argomenti e poiché il secondo argomento è assente, il valore predefinito è 0.

Caratteri di specifica del formato

Sono disponibili diversi identificatori di formato per visualizzare l'output nel formato desiderato. Ecco alcuni dei più comuni:

Personaggio Utilizzo
%s Stringa
%c Singolo carattere
%d Interi
%o Interi ottali
%x Interi esadecimali
%f Virgola mobile
%b Stringa con carattere di escape barra rovesciata
%% Segno percentuale

Ora che hai familiarità con l'identificatore di formato, vediamo altri esempi che li mostrano in azione.

Esempi di comando Bash printf

Non credo che tu abbia bisogno di una spiegazione dettagliata per la maggior parte di questi esempi in quanto sono autoesplicativi.

[email protected]:~$ printf "The octal value of %d is %o\n" 30 30
The octal value of 30 is 36

Vediamo l'uso del %b specificatore per interpretare correttamente il carattere di escape della barra rovesciata.

[email protected]:~$ printf "String with backslash: %s\n" "Hello\nWorld!"
String with backslash: Hello\nWorld!

Vedi per %s , non fa differenza. Ma con %b il nuovo carattere di escape di riga verrà interpretato correttamente:

[email protected]:~$ printf "String with backslash: %b\n" "Hello\nWorld!"
String with backslash: Hello
World!

Quando usi il %c , legge solo caratteri alla volta.

[email protected]:~$ printf "Character: %c\n" a
Character: a
[email protected]:~$ printf "Character: %c\n" a b c
Character: a
Character: b
Character: c
[email protected]:~$ printf "Character: %c\n" abc
Character: a

Utilizzo dei modificatori per visualizzare l'output di printf in uno stile specifico

Ci sono modificatori per cambiare l'aspetto dell'output a tuo piacimento.

# modificatore per numeri ottali ed esadecimali

In precedenza hai visto l'uso di %o per convertire decimale in ottale. Tuttavia, non era molto chiaro che fosse un numero ottale. Puoi usare il # modificatore per visualizzare i numeri ottali ed esadecimali nel formato corretto.

[email protected]:~$ printf "%d is %#o in octal and %#x in hexadecimal\n" 30 30 30
30 is 036 in octal and 0x1e in hexadecimal

Modificatore di spazio per interi positivi

Puoi utilizzare uno spazio tra % e d in %d per visualizzare un numero intero positivo con uno spazio iniziale. Questo aiuta quando hai una colonna di numeri positivi e negativi. Guarda quale sembra più "carino":

[email protected]:~$ printf "%d \n%d \n%d \n" 10 -10 10
10 
-10 
10 
[email protected]:~$ printf "% d \n%d \n% d \n" 10 -10 10
 10 
-10 
 10 

Modificatore di larghezza

Il modificatore di larghezza è un numero intero che specifica la larghezza minima del campo dell'argomento.

Per impostazione predefinita, è allineato a destra:

[email protected]:~$ printf "%10s| %5d\n" Age 23
       Age|    23

Puoi allinearlo a sinistra aggiungendo - segnalalo:

[email protected]:~$ printf "%-10s| %-5d\n" Age 23
Age       | 23

Modificatore di precisione

È possibile utilizzare il punto modificatore di precisione (.) per specificare un numero minimo di cifre da visualizzare con %d , %u , %o , %x . Aggiunge zero padding a sinistra del valore.

[email protected]:~$ printf "Roll Number: %.5d\n" 23
Roll Number: 00023

Se usi il modificatore di precisione con una stringa, specifica la lunghezza massima della stringa. Se la stringa è più lunga, viene troncata sul display.

[email protected]:~$ printf "Name: %.4s\n" Abhishek
Name: Abhi

Puoi combinare sia la larghezza che il modificatore di precisione:

[email protected]:~$ printf "Name: %.4s\n" Abhishek
Name: Abhi
[email protected]:~$ printf "Name: %10.4s\n" Abhishek
Name:       Abhi

Esempio bonus:mostra l'output in formato tabulare con printf

Mettiamo a frutto ciò che hai imparato sul comando printf con un esempio leggermente più complicato. Questo mostrerà il vero potenziale del comando printf negli script bash.

Usiamo il comando printf per stampare la seguente tabella usando bash:

Nome ID Età Voti
Sherlock Holmes 0000122 23 A
James Bond 0000007 27 F
Ercole Poirot 0006811 59 G
Jane Marple 1234567 71 C

Ecco lo script di shell che ho scritto per questa attività. Il tuo script può variare:

#/bin/bash
seperator=--------------------
seperator=$seperator$seperator
rows="%-15s| %.7d| %3d| %c\n"
TableWidth=37

printf "%-15s| %-7s| %.3s| %s\n" Name ID Age Grades
printf "%.${TableWidth}s\n" "$seperator"
printf "$rows" "Sherlock Holmes" 122 23 A
printf "$rows" "James Bond" 7 27 F
printf "$rows" "Hercules Poirot" 6811 59 G
printf "$rows" "Jane Marple" 1234567 71 C

Ora, se eseguo questo script di shell bash, ecco cosa stampa:

Non è meraviglioso usare il comando bash printf per stampare un output splendidamente formattato per i tuoi script?

Spero che questo tutorial dettagliato sul comando printf in Linux ti sia piaciuto. Se avete domande o suggerimenti, fatemelo sapere. E non dimenticare di diventare un membro di Linux Handbook per ulteriori informazioni sull'apprendimento di Linux.


Linux
  1. Suggerimenti Bash per tutti i giorni dalla riga di comando

  2. Bash + Utilizzo di Printf per stampare in un formato speciale?

  3. Utilizzo del comando Linux Basename negli script Bash

  4. Dividi l'output del comando per colonne usando Bash?

  5. Utilizzo di grep per cercare una stringa contenente un punto

7 trucchi pratici per usare il comando wget di Linux

Suggerimenti per l'utilizzo del comando top in Linux

Comando Bash printf

Scripting Bash – Spiegazione del comando Printf con esempi

Utilizzo del comando Linux Dirname negli script Bash

usando random per generare una stringa casuale in bash