1

我编写了以下脚本,将一个名称打印到终端的中心。在最后一个命令中,当我使用数字时,一切正常。但是,当我使用变量 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 "\033[$x_center;$y_centerf" $name
4

1 回答 1

3

最后一行看起来好像是为了移动光标:

echo -n "\033[$x_center;$y_centerf" $name

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

tput cup $x_center $y_center
echo "$name"

意思是“cup光标位置”,可以在terminfo(5)手册页中找到。 CUP同样可以在XTerm Control Sequences中找到。指示的片段可能是使用类似的示例从某些示例中复制的HVP

CSI Ps ; Ps f
      Horizontal and Vertical Position [row;column] (default =
      [1,1]) (HVP).

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

于 2015-05-31T18:06:38.220 回答