GNU/Linux >> Znalost Linux >  >> Linux

Jak vytisknout proměnnou s vycpaným zarovnáním na střed?

Jak mohu vytisknout $myvar polstrovaný tak, aby byl ve středu terminálu a na obou stranách jsou = k okraji obrazovky?

Přijatá odpověď:

Našel jsem zde na síti stackexchange dvě informace, které mi pomohly dospět k této funkční odpovědi:

  • https://stackoverflow.com/q/263890/5419599
  • https://stackoverflow.com/q/4409399/5419599

Kód v této odpovědi je však můj vlastní.

Chcete-li více podrobností, podívejte se na historii úprav; Vymazal jsem všechny cruft a "kroky na cestě."

Myslím, že nejlepší způsob je:

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"

Výstup na terminálu o šířce 80 sloupců:

========================== Something I want to print ===========================

Všimněte si, že výplň nemusí být jeden znak; ve skutečnosti padding proměnná není, ve výše uvedeném kódu je dlouhá 500 znaků. Mohli byste použít nějakou jinou formu odsazení změnou pouze padding řádek:

padding="$(printf '%0.2s' ^v{1..500})"

Výsledky v:

^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^

Další praktické použití je:

clear && center "This is my header"

Linux
  1. Linux – jak zkombinovat strom s velikostí adresáře?

  2. Jak nastavit proměnnou $Path v Linuxu

  3. Jak vytisknout aktuální čas (v milisekundách) pomocí C++ / C++11

  1. Jak provést nepřímé vyhodnocení proměnných?

  2. Jak vytisknu zprávu na stderr v Go?

  3. Jak podložit soubor pomocí FF pomocí dd?

  1. Jak vytisknout pthread_t

  2. Alias ​​s proměnnou v bash

  3. Jak vytisknout číslo v sestavě NASM?