2012-09-18 99 views
5

我使用shell脚本创建一个简单的基于控制台的脚本。它将运行在我的bash shell上 其基于驱动的简单菜单显示一些选项集。文本对齐中心 - shell脚本

现在我想根据屏幕大小来对齐文本。 如何对齐文本在屏幕的中央,请阿西斯我

回答

11

最后我找到了解决办法:)

COLUMNS=$(tput cols) 
title="Hello world!" 
printf "%*s\n" $(((${#title}+$COLUMNS)/2)) "$title" 
+1

如果您需要一行代码,它从命令行参数获取输入: '''printf“%* s \ n”$((($(echo $ * | wc -c)+ 80)/ 2 ))“$ *”''' 接受来自命令行参数的输入,使用wc来计算字符数,默认值为80个字符。 – thewisenerd

0

简单的Perl的解决方案:

perl -pe '$sp = " " x (($ENV{COLUMNS} - length)/2); s/^/$sp/' 
+0

它可以在shell脚本上工作吗? –

+0

试试看。只需将该行添加到脚本中,将文本以管道形式居中('generate-text | perl ...')或将其用作参数('perl ... text.txt') – choroba

+0

最后,我找到了解决方案: COLUMNS = $(输入cols) title =“Hello world!” printf“%* s \ n”$((($ {#title} + $ COLUMNS)/ 2))“$ title” –

5

在基于BSD的系统,包括MacOS,fmt实用程序有一个-c标志来居中文本。

echo $text | fmt -c -w $COLUMNS 

不幸的是,GNU fmt有一个不兼容的-c标志和无可奈何的中心。