在终端中居中文本

Center a Text in terminal

我编写了以下脚本,将一个名字打印到我的终端中心。在最后一个命令中,当我使用数字时,一切正常。但是,当我使用变量 x_center 和 y_center 时,我遇到了麻烦...

#!/bin/sh
`clear`

num_lines=`tput lines`
num_cols=`tput cols`

echo "Enter your Name: "
read name

length_name=`echo $name | wc -c `
length_name=`expr $length_name - 1`

offset=`expr $length_name / 2`
x_center=`expr $num_lines / 2`
y_center=`expr $num_cols / 2`
y_center=`expr $offset + $x_center`

printf "%s = %d, %s = %d\n" "X" "$x_center" "Y" "$y_center"

echo -n "3[$x_center;$y_centerf" $name

最后一行看起来好像是用来移动光标的:

echo -n "3[$x_center;$y_centerf" $name

但是不会,因为这个片段$y_centerf没有定义,并且没有以控制序列的适当的最终字符结束。与其这样做,不如这样做

tput cup $x_center $y_center
echo "$name"

cup表示"cursor position",可以在terminfo(5) manual page. CUP likewise can be found in XTerm Control Sequences中找到。指示的片段可能是使用类似 HVP:

从某个示例中复制的
CSI Ps ; Ps f
      Horizontal and Vertical Position [row;column] (default =
      [1,1]) (HVP).

花括号可以修复它,例如 ${y_center}f),但是 (a) HVP 不如 CUP 常见,并且 (b) 在 [= 时使用硬编码转义20=] 已经在工作是有问题的。