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"
Proč je nastavení proměnné před příkazem v Bash legální?
Jak otestovat, zda soubor používá Crlf nebo Lf, aniž byste jej upravovali?