Come posso stampare $myvar
imbottito in modo che sia al centro del terminale e su entrambi i lati ci sono =
fino al bordo dello schermo?
Risposta accettata:
Ho trovato due informazioni qui sulla rete di stackexchange che mi hanno aiutato ad arrivare a questa risposta funzionante:
- https://stackoverflow.com/q/263890/5419599
- https://stackoverflow.com/q/4409399/5419599
Tuttavia, il codice in questa risposta è mio.
Vedi la cronologia delle modifiche se vuoi più verbosità; Ho eliminato tutti i cruft e i "passaggi lungo il percorso".
Penso che il modo migliore sia:
center() {
termwidth="$(tput cols)"
padding="$(printf '%0.1s' ={1..500})"
printf '%*.*s %s %*.*sn' 0 "$(((termwidth-2-${#1})/2))" "$padding" "$1" 0 "$(((termwidth-1-${#1})/2))" "$padding"
}
center "Something I want to print"
Output su un terminale largo 80 colonne:
========================== Something I want to print ===========================
Nota che il riempimento non deve essere un singolo carattere; infatti il padding
variabile non lo è, è lunga 500 caratteri nel codice sopra. Potresti usare un'altra forma di riempimento cambiando solo il padding
riga:
padding="$(printf '%0.2s' ^v{1..500})"
Risultati in:
^v^v^v^v^v^v^v^v^v^v^v^v^v Something I want to print ^v^v^v^v^v^v^v^v^v^v^v^v^v^
Un altro pratico utilizzo è:
clear && center "This is my header"