【发布时间】:2012-09-18 07:04:44
【问题描述】:
我正在使用 shell 脚本创建一个简单的基于控制台的脚本。它将在我的 bash shell 上运行 它是一个简单的基于菜单的驱动显示一些选项集。
现在我想根据屏幕大小对文本进行居中对齐。 如何在屏幕中心对齐文本?请帮助我
【问题讨论】:
我正在使用 shell 脚本创建一个简单的基于控制台的脚本。它将在我的 bash shell 上运行 它是一个简单的基于菜单的驱动显示一些选项集。
现在我想根据屏幕大小对文本进行居中对齐。 如何在屏幕中心对齐文本?请帮助我
【问题讨论】:
终于找到解决办法了:)
COLUMNS=$(tput cols)
title="Hello world!"
printf "%*s\n" $(((${#title}+$COLUMNS)/2)) "$title"
【讨论】:
printf "%*s\n" $(( ( $(echo $* | wc -c ) + 80 ) / 2 )) "$*" 从命令行参数中获取输入,使用 wc 来计算字符数,默认为80 个字符。
$COLUMNS/2 对我来说非常有用。
在基于 BSD 的系统上,包括 MacOS,fmt 实用程序有一个 -c 标志来居中文本。
echo $text | fmt -c -w $COLUMNS
不幸的是,GNU fmt 有一个不兼容的 -c 标志,并且没有用于居中的替代方法。
【讨论】:
简单的 Perl 解决方案:
perl -pe '$sp = " " x (($ENV{COLUMNS} - length) / 2); s/^/$sp/'
【讨论】:
generate-text | perl ...) 或将其用作参数 (perl ... text.txt)
在中心打印文本:
echo "Some Text" | sed -e :a -e "s/^.\{1,$(tput cols)\}$/ & /;ta" | tr -d '\n' | head -c $(tput cols)
输出:
Some Text
【讨论】: