GNU/Linux >> Linux Esercitazione >  >> Linux

Comando Bash printf

In genere, quando scriviamo script bash, utilizziamo echo per stampare sullo standard output. echo è un comando semplice ma le sue capacità sono limitate.
Per avere un maggiore controllo sulla formattazione dell'output, usa il printf comando.

Il printf il comando formatta e stampa i suoi argomenti, in modo simile al C printf() funzione.

printf Comando #

printf è una shell integrata in Bash e in altre shell popolari come Zsh e Ksh. C'è anche un /usr/bin/printf autonomo binario, ma la versione incorporata della shell ha la precedenza. Tratteremo la versione incorporata di Bash di printf .

La sintassi per printf il comando è il seguente:

printf [-v var] format [arguments]

Il -v l'opzione dice a printf non per stampare l'output ma per assegnarlo alla variabile.

Il format è una stringa che può contenere tre diversi tipi di oggetti:

  • Caratteri normali che vengono semplicemente stampati sull'output così com'è.
  • Caratteri con escape barra rovesciata che vengono interpretati e quindi stampati.
  • Specifiche di conversione che descrivono il formato e sono sostituite dai valori dei rispettivi argomenti che seguono la stringa di formato.

Il comando accetta un numero qualsiasi di arguments . Se più arguments rispetto agli specificatori di formato, il format string viene riutilizzato per consumare tutti gli argomenti. Se meno arguments rispetto agli identificatori di formato forniti, gli identificatori di formato numerico extra sono impostati su zero mentre gli identificatori di formato stringa sono impostati su stringa nulla.

Di seguito sono riportati alcuni punti da considerare quando si passano argomenti al printf comando:

  • La shell sostituirà tutte le variabili, i caratteri jolly e i caratteri speciali prima di passare gli argomenti a printf comando.
  • Quando si utilizzano virgolette singole '' il valore letterale di ogni carattere racchiuso tra le virgolette verrà mantenuto. Variabili e comandi non verranno espansi.
printf "Open issues: %s\nClosed issues: %s\n" "34" "65"
Open issues: 34
Closed issues: 65

La stringa Open issues: %s\nClosed issues: %s\n è il format mentre “34” e “65” sono argomenti. La stringa di formato contiene due caratteri di nuova riga (\n ) e due identificatori di formato (%s ) che vengono sostituiti con gli argomenti.

Il printf il comando non aggiunge un carattere di nuova riga (\n ) alla fine della riga.

Caratteri con backslash-escaped #

I caratteri con escape barra rovesciata vengono interpretati quando vengono utilizzati nella stringa di formato o in un argomento corrispondente a un %b identificatore di conversione. Ecco un elenco dei caratteri di escape più comuni:

  • \\ - Visualizza un carattere barra rovesciata.
  • \b - Visualizza un carattere backspace.
  • \n - Visualizza una nuova riga.
  • \r - Visualizza un ritorno a capo.
  • \t - Visualizza una scheda orizzontale.
  • \v - Visualizza una scheda verticale.

Specifiche di conversione #

Una specifica di conversione assume la forma seguente:

%[flags][width][.precision]specifier

Ciascuna specifica di conversione è contrassegnata dal segno di percentuale (% ), include modificatori facoltativi e termina con una delle seguenti lettere che rappresentano il tipo di dati (specifier ) dell'argomento corrispondente:aAbcdeEfgGioqsuxX .

Digita l'identificatore di conversione #

La conversione del tipo specifier è un carattere che specifica come interpretare l'argomento corrispondente. Questo carattere è obbligatorio e viene posizionato dopo i campi facoltativi.

Di seguito è riportato un elenco che mostra tutte le conversioni di tipo e ciò che fanno:

  • %b - Stampa l'argomento mentre espandi le sequenze di escape della barra rovesciata.
  • %q - Stampa l'argomento shell-quoted, riutilizzabile come input.
  • %d , %i - Stampa l'argomento come un intero decimale con segno.
  • %u - Stampa l'argomento come un intero decimale senza segno.
  • %o - Stampa l'argomento come un intero ottale senza segno.
  • %x , %X - Stampa l'argomento come intero esadecimale senza segno. %x stampa lettere minuscole e %X stampa in maiuscolo.
  • %e , %E - Stampa l'argomento come numero a virgola mobile in notazione esponenziale. %e stampa lettere minuscole e %E stampa in maiuscolo.
  • %a , %A - Stampa l'argomento come numero a virgola mobile in notazione frazionaria esadecimale. %a stampa lettere minuscole e %A stampa in maiuscolo.
  • %g , %G - Stampa l'argomento come numero a virgola mobile in notazione normale o esponenziale, a seconda di quale sia più appropriato per il valore e la precisione dati. %g stampa lettere minuscole e %G stampa in maiuscolo.
  • %c - Stampa l'argomento come un singolo carattere.
  • %f - Stampa l'argomento come numero a virgola mobile.
  • %s - Stampa l'argomento come una stringa.
  • %% - Stampa un letterale % simbolo.

Un numero senza segno rappresenta zero e numeri positivi, mentre un numero con segno rappresenta numeri negativi, zero e positivi.

Il comando seguente stampa il numero 100 in tre diversi sistemi di numerazione:

printf "Decimal: %d\nHex: %x\nOctal: %o\n" 100 100 100
Decimal: 100
Hex: 64
Octal: 144

Direttiva Flag #

I flag sono i primi modificatori opzionali e vengono utilizzati per impostare la giustificazione, gli zeri iniziali, i prefissi, ecc.

Ecco i più comuni:

  • - - Allineare a sinistra il testo stampato all'interno del campo. Per impostazione predefinita, il testo è allineato a destra.
  • + - Prefissa i numeri con un + o - segni. Per impostazione predefinita, solo i numeri negativi sono preceduti da un segno negativo.
  • 0 - Riempi i numeri con zeri iniziali anziché spazi.
  • vuoto - Prefissare i numeri positivi con uno spazio vuoto e i numeri negativi con un meno (- ).
  • # - Un formato alternativo per i numeri.

Direttiva larghezza #

La width la direttiva archiviata viene posizionata dopo qualsiasi carattere flag e specifica il numero minimo di caratteri in cui dovrebbe risultare la conversione.

Se la larghezza del testo emesso è inferiore alla larghezza specificata, viene riempita con spazi. La larghezza può essere specificata come un intero decimale non negativo o un asterisco (* ).

Ecco un esempio:

printf "%20s %d\n" Mark 305

%20s significa impostare il campo lungo almeno 20 caratteri. Gli spazi vuoti vengono aggiunti prima del testo perché, per impostazione predefinita, l'output è giustificato a destra. Per allineare il testo a sinistra, usa - flag (%-20s ).

      Mark 305

Quando un asterisco (* ) viene utilizzato come width direttiva, quindi la larghezza del campo di conversione viene impostata da un argomento larghezza che precede l'argomento che viene formattato.

Nell'esempio seguente impostiamo la larghezza su 10:

printf "%0*d" 10 5

0 è una bandiera che riempie il numero con zeri iniziali invece di spazi vuoti. Il testo di output avrà almeno 10 caratteri:

0000000005

Direttiva sulla precisione #

Il .precision modificatore è costituito da un punto (. ) seguito da un numero intero positivo o da un asterisco (* ) che, a seconda del tipo di specificatore, imposta il numero di caratteri stringa o cifre o il numero di cifre decimali da stampare.

La precisione ha il seguente effetto:

  • Se il tipo di conversione è un intero, la precisione specifica il numero minimo di cifre da stampare. Se il numero di cifre nell'argomento è inferiore alla precisione, vengono stampati degli zeri iniziali.
  • Se il tipo di conversione è a virgola mobile, la precisione specifica il numero di cifre che seguono il carattere a virgola decimale. La precisione predefinita è 6.
  • Se il tipo di conversione è una stringa, la precisione specifica il numero massimo di caratteri da stampare. Se il numero di caratteri nell'argomento è maggiore della precisione, i caratteri in eccesso vengono troncati.

Ecco un esempio che mostra come arrotondare un numero a virgola mobile a 3 decimali:

printf "%.3f" 1.61803398
1.618

Quando la precisione è impostata su un asterisco (* ), il suo valore è impostato dall'argomento precision che precede l'argomento che viene formattato.

printf "%.*f" 3 1.61803398
1.618

Conclusione #

Il printf il comando prende un formato e argomenti e stampa un testo formattato.

Se hai domande o feedback, sentiti libero di lasciare un commento.


Linux
  1. Nozioni di base sui comandi di Linux:printf

  2. Il comando "eval" in Bash?

  3. printf:comando non trovato

  4. bash sh - comando non trovato

  5. Bash - Comando data e spazio

Comando della cronologia in Linux (Cronologia di Bash)

Comando di uscita Bash e codici di uscita

Scripting Bash – Spiegazione del comando Printf con esempi

Script Bash(II)

Scripting Bash(III)

Utilizzo del comando Bash printf per la stampa di output formattati