在终端中居中文本
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=] 已经在工作是有问题的。
我编写了以下脚本,将一个名字打印到我的终端中心。在最后一个命令中,当我使用数字时,一切正常。但是,当我使用变量 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=] 已经在工作是有问题的。