Indice dei contenuti
Toggleintroduzione
Il comando Bash printf offre maggiore flessibilità e scelte di formattazione rispetto al comando echo quando si scrive su una finestra di terminale Linux. Anche le peculiarità di printf possono essere utili.
È uno degli aspetti più fondamentali del lavoro con il software. Leggi ciò che l'applicazione ha scritto sullo schermo. Anche con l'abitudine derivata da Unix e supportata da Linux di programmi da riga di comando il più brevi possibile, molte applicazioni scrivono sul terminale solo quando qualcosa va storto. Una base di programmazione fondamentale è informare l'utente di ciò che sta accadendo, sta per accadere o è accaduto di recente.
Il comando echo nella shell Bash può scrivere del testo sul display del terminale. Puoi usarlo negli script o sulla riga di comando e può gestire variabili e mostrare i loro valori se sono contenuti nella stringa. Allora, qual è il punto di printf? La scrittura del testo non è qualcosa di cui si occupa l'eco? Printf, d'altra parte, fornisce più della semplice possibilità di scrivere stringhe su finestre di terminale. Ti dà molta versatilità quando si tratta di formattare l'output e ha alcuni assi aggiuntivi nella manica.
Il comando printf in Bash è simile alla funzione printf in C, tuttavia ci sono diverse modifiche. Dovrai essere a conoscenza delle modifiche se hai familiarità con C.
Creazione di stringhe semplici
Diamo un'occhiata alle differenze tra echo e printf quando si tratta di scrivere stringhe sul terminale.
eco ecco alcune parole
printf ecco alcune parole
Mentre echo stampa tutte le parole, printf pubblica semplicemente la prima. Inoltre, printf non stampa una nuova riga. L'output è proprio dab nel mezzo del prompt dei comandi. Ma prima di tutto, tutte le parole devono essere citate affinché printf agisca su di esse.
eco ecco alcune parole
printf "ecco alcune parole"
Questo è un passo avanti. Abbiamo stampato tutte le parole, ma stiamo ancora aspettando una nuova riga. Questo perché printf stampa una nuova riga solo se ne richiedi specificamente una. Questo può sembrare scomodo, ma ti consente di scegliere se aggiungerne uno o meno. Devi aggiungere "n" nella tua stringa affinché printf emetta una nuova riga. Qui viene utilizzata la sequenza di escape "newline".
eco ecco alcune parole
printf "ecco alcune parolen"
Utilizzerai una nuova riga a volte e non altre. In questo esempio, un comando printf utilizza una nuova riga mentre l'altro no.
printf "Come fare per" && printf "Geekn"
Poiché la prima printf non stampa una nuova riga, l'output della seconda printf viene posizionato sulla stessa riga di "Come fare per". Per stampare una nuova riga, la seconda printf utilizza n. Il prompt dei comandi verrà ora visualizzato sulla riga sotto il testo stampato.
Personaggi che sono sfuggiti alla cattura
Ecco alcuni caratteri aggiuntivi che possono essere usati come escape. In precedenza hai visto come funziona "n".
n: passa a una nuova riga.
r: questo comando stampa un ritorno a capo. Il cursore di output viene riportato all'inizio della riga corrente.
t: questo comando stampa un carattere di tabulazione.
v: aggiunge uno spazio di tabulazione verticale alla pagina.
\: Viene stampato un carattere barra rovesciata.
“: Visualizza tra virgolette.
b: Visualizza il carattere backspace.
Il carattere di escape del ritorno a capo viene utilizzato per riportare il cursore all'inizio della riga corrente.
printf "Il miele è la radice di tutti i maliMoneyn"
Il comando printf legge da sinistra a destra. Fino a quando printf non rileva il carattere di escape "r", la stringa viene scritta come un normale testo. Il cursore di output viene riposizionato all'inizio della riga corrente.
Con la lettera immediatamente sotto il carattere “r”, l'elaborazione della stringa continua. Il resto fa sì che printf stampi "Money", che sostituisce la frase "Honey".
Il carattere backslash “” segnala le sequenze di escape, mentre le virgolette “”” vengono utilizzate per citare le stringhe. Se desideri stampare questi caratteri, usa una barra rovesciata per evitarli. Questo indica a printf che dovrebbero essere trattati come caratteri letterali.
printf "Questa è una tTab, questa è una virgoletta ", e questa \ è una barra rovesciata"
Variabili in azione
L'uso di variabili con printf è abbastanza simile all'uso di variabili con echo. Per includere una variabile, come questa variabile di ambiente, utilizzare il simbolo del dollaro "$" come di consueto prima di essa.
printf "Cartella principale: $HOMEn"
Formattazione delle stringhe
Le stringhe di formato sono stringhe che specificano il formato di output. Fornisci il testo della stringa di formato e valori aggiuntivi con cui lavorare come argomenti.
Testo, sequenze di escape e identificatori di formato possono essere tutti inclusi nella stringa di formato.
Gli specificatori di formato di Printf lo informano sul tipo di argomento che dovrebbe accettare, come stringhe, numeri o caratteri.
Di seguito sono riportati gli identificatori di formato più frequenti. Un simbolo di percentuale "percentuale" li precede tutti. È possibile stampare un segno di percentuale combinando due segni di percentuale "percentuale percentuale".
- %s: stampa una stringa.
- %c: stampa un singolo carattere.
- %d: stampa un numero intero.
- %f: stampa un numero in virgola mobile.
- %u: stampa un numero intero senza segno.
- 1TP2A: stampa un valore in ottale.
- %x: Prints a value in esadecimale, in minuscolo.
- %X: stampa un valore in esadecimale, in maiuscolo.
- %e: stampa un numero in virgola mobile in notazione scientifica, in minuscolo.
- %E: stampa un numero in virgola mobile in notazione scientifica, in maiuscolo.
- %%: Prints a percent “%” symbol.
printf "Come fare %sn" "Geek"
printf "%s%s %sn" "Come" "-A" "Geek"
La stringa di formato del primo comando contiene del proprio contenuto. La stringa "Geek" viene inviata a printf come argomento. L'identificatore di formato "%s" lo abbina e lo stampa. Tra la stringa di formato e la stringa di argomento c'è solo uno spazio. In C, sarebbe necessaria una virgola per separarli, ma con la versione Bash di printf, uno spazio è sufficiente.
Solo gli identificatori di formato e la sequenza di escape di nuova riga sono inclusi nella seconda stringa di formato. Ciascuno degli identificatori di formato "%s" utilizza a turno i tre parametri di stringa. Ancora una volta, in C, è richiesta una virgola tra ogni parametro, ma la funzione Bash printf ci consente di ignorare questo requisito.
Usa semplicemente l'identificatore di formato appropriato per generare vari tipi di argomenti. Ecco una semplice funzione di conversione dei numeri basata su printf. In notazione decimale, ottale ed esadecimale, stamperemo il numero 15.
printf "Dec: %dnOct: %onHex: %xn" 15 15 15
Riduciamolo un po' per rendere l'esempio meno disordinato.
printf "Esadecimale: %xn" 15
La maggior parte di noi è abituata a vedere i numeri esadecimali resi in maiuscolo e con valori inferiori a 0x10 preceduti da uno zero iniziale. Possiamo farlo inserendo un identificatore di larghezza tra il segno di percentuale "%" e il carattere "X" e utilizzando l'identificatore di formato esadecimale maiuscolo "% X".
Questo specifica la dimensione del campo in cui l'argomento deve essere stampato su printf. Gli spazi sono stati aggiunti al campo. I numeri a due cifre verrebbero presentati senza alcun riempimento in questo stile.
printf "Esadecimale: %2Xn" 15
Ora abbiamo un valore maiuscolo con uno spazio iniziale scritto su di esso. Mettendo uno zero davanti ai due, possiamo fare in modo che printf riempia il campo con zeri anziché spazi:
printf "Hex: %02Xn" 15
L'identificatore di precisione consente di specificare quanti punti decimali devono essere inclusi nell'output.
printf "Floating point: %08.3fn" 9.243546
Questo rende la creazione di tabelle di risultati con output perfettamente allineato un gioco da ragazzi. Questo comando mostra anche un'altra delle idiosincrasie di Bash printf. Se sono presenti più argomenti rispetto agli specificatori di formato, gli argomenti vengono inseriti nella stringa di formato in batch finché non vengono utilizzati tutti. La quantità di identificatori di formato nella stringa di formato determina la dimensione del batch che viene elaborato in un determinato momento. Gli argomenti aggiuntivi inviati alla funzione printf in C vengono ignorati.
printf "Mobile: %8.3fn" 9.243546 23.665 8.0021
Le stringhe possono anche utilizzare gli specificatori di larghezza e precisione. Le stringhe vengono stampate in un campo largo 10 caratteri utilizzando questo comando.
printf "%10s %dn" "coats" 7 "shoes" 22 "Umbrellas" 3
By default, values are right-justified in their fields. To left-justify them, use a minus sign “-
” immediately behind the percent “%
” sign.
printf "%-10s %d" "cappotti" 7 "scarpe" 22 "Ombrelli" 3
L'identificatore di precisione consente di scegliere il numero massimo di caratteri che verranno stampati. Le lettere dei due punti “:” sono usate per indicare i limiti del campo di larghezza. Non nel modo in cui il termine “ombrelli” è abbreviato.
printf ":%10.6s:n" "coats" "shoes" "Umbrellas"
printf ":%-10.6s:n" "cappotti" "scarpe" "Ombrelli"
Anche come argomento, è possibile utilizzare l'identificatore di larghezza. Invece di uno specificatore numerico, utilizzare un asterisco "*" e fornire la larghezza come input intero.
printf "%*sn" 20 "Più a destra" 12 "Medio" 5 "Più a sinistra"
Altre stranezze ed espedienti
Gli identificatori di formato nella stringa di formato funzioneranno con valori del tipo corretto, indipendentemente dal fatto che vengano forniti come argomenti ordinari sulla riga di comando o creati come risultato di un'espressione.
Questo mostra il risultato della somma di due numeri:
printf "23+32=%dn" $((23+32))
Il numero di cartelle nella directory di lavoro corrente viene stampato da questo comando:
printf "Ci sono directory %d" $(ls -d */ | wc -l)
Il comando printf stampa una stringa che è stata restituita da un altro programma.
printf "Utente corrente: %sn" $(whoami)
Se l'identificatore di formato della stringa "percent s" non viene fornito con un argomento, printf restituisce null.
printf "Uno: %s due: %sn" "Alfa"
Se per errore viene fornito un valore numerico per l'identificatore di formato stringa "% s", lo stampa come stringa e non si lamenta. Se lo fai usando C printf, ti ritroverai con molti problemi. Il tuo software quasi sicuramente andrà in crash. Il Bash printf, d'altra parte, non sembra preoccupare.
printf "Uno: %s due: %sn" "Alfa" 777
Se all'identificatore di formato intero "% d" non viene fornito un argomento, viene stampato zero.
printf "Intero: %dn"
Bash emetterà un messaggio di errore e printf stamperà zero se l'identificatore di formato intero "% d" riceve un input di stringa per errore.
printf "Intero: %dn" "Sette"
I simboli scomodi possono essere creati inserendo il loro numero Unicode, noto anche come "punto di codice". La lettera "u" viene utilizzata per sfuggire a determinati caratteri, seguita dal loro valore Unicode.
printf "Il simbolo dell'Euro: u20ACn"
Per adattare le sequenze di escape nelle stringhe di argomenti, utilizzare l'identificatore di formato "% b" invece dell'identificatore di formato stringa "% s" nella stringa di formato.
printf "%s" "u20ACn"
printf "%b" "u20ACn"
Il comando printf iniziale non riconosce la sequenza di escape di nuova riga e non elabora il valore Unicode. L'identificatore di formato "% b" viene utilizzato nel secondo comando printf. Il carattere Unicode viene gestito in modo appropriato e viene visualizzata una nuova riga.
Cavalli per Corsi
A volte potresti aver solo bisogno di fare eco del testo nella finestra del terminale. Tuttavia, printf è lo strumento ideale per l'attività quando è necessario applicare alcuni posizionamenti e formattazioni.
printf "%b" "Tha-" "tha-" "tha-" "questo è tutto gente.n"
- Come eliminare le interruzioni di paragrafo in Google Docs in blocco
- Come modificare le variabili di ambiente di Windows 10 o 11
- Come disattivare lo stato attivo di Facebook
- Come installare Kali Linux su qualsiasi dispositivo Android senza root
- Come inviare iMessage da un indirizzo e-mail anziché da un numero di telefono
- Come includere un file PDF in un documento Google