如何打印带有填充中心对齐的变量?

Wil*_*ard 8 bash tput printf text-formatting

如何打印$myvar填充以使其位于终端的中心,并且任一侧都=位于屏幕的边缘?

Wil*_*ard 13

我在 stackexchange 网络上找到了两条信息,这些信息帮助我得出了这个有效的答案:

然而,这个答案中的代码是我自己的。

如果您想要更详细的内容,请查看编辑历史记录;我已经删除了所有的琐碎和“沿途的步骤”。


我认为最好的方法是:

center() {
  termwidth="$(tput cols)"
  padding="$(printf '%0.1s' ={1..500})"
  printf '%*.*s %s %*.*s\n' 0 "$(((termwidth-2-${#1})/2))" "$padding" "$1" 0 "$(((termwidth-1-${#1})/2))" "$padding"
}
center "Something I want to print"
Run Code Online (Sandbox Code Playgroud)

在 80 列宽的终端上输出:

========================== Something I want to print ===========================
Run Code Online (Sandbox Code Playgroud)

请注意,填充不必是单个字符;实际上padding变量不是,它在上面的代码中有 500 个字符长。您可以通过仅更改padding行来使用其他形式的填充:

padding="$(printf '%0.2s' ^v{1..500})"
Run Code Online (Sandbox Code Playgroud)

结果是:

^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^
Run Code Online (Sandbox Code Playgroud)

另一个方便的用法是:

clear && center "This is my header"
Run Code Online (Sandbox Code Playgroud)