打印一个字符直到行尾

时间:2014-06-23 13:22:25

标签: linux shell printing scripting echo

我想知道是否可以打印任何字符直到行尾。我知道这是一个愚蠢的问题。 但如果它可能,那么这将帮助我提高我的脚本的外观,因为人们使用不同大小的腻子窗口。

目前我根据窗口大小打印“ - ”直到EOL。但尺寸不同,“ - ”在其他终端的下一行。 如下所示:

echo“--------------------------------------------- ----------------------------------------------“

我需要在shell脚本中完成此操作。有没有办法找到屏幕宽度并相应打印?

4 个答案:

答案 0 :(得分:2)

您可以使用:

tput cols

获取屏幕宽度。

答案 1 :(得分:1)

您可以使用:

cols=$(tput cols)
for ((i=0; i<cols; i++));do printf "-"; done; echo

或在非BASH使用中:

cols=`tput cols`
i=0
while [ $i -lt $cols ]; do echo -n "-"; i=`expr $i + 1`; done; echo

答案 2 :(得分:1)

正如其他人所说,tput cols是获得终端宽度的合理标准方法。当您调整终端的大小时,现代终端应发送一个SIGWINCH,可以捕获并用于重新确定终端的大小。有些shell已经内置了对此的支持。如果您使用bash shell并打开checkwinsize shell选项,bash将尝试通过捕获此信号来保持环境变量LINESCOLUMNS的正确性。

你甚至可能会发疯并自己陷入SIGWINCH。我发现这个平等的部分具有教育性和误导性:

trap 'tput cols' SIGWINCH

以上原因导致shell在调整大小时输出当前术语宽度而不是 ,但在调整大小后输出下一个输入。我假设这不是因为信号稍后发射,而是因为这是trap运行命令的最早机会。我认为这是一个shell限制。

答案 3 :(得分:0)

它可以在zsh中运行而无需评估...

eval printf '=%.0s' {1..$(tput cols)}
  • bash eval用终端列数替换$(tput cols)
  • bash用空格分隔的整数列表替换{1..count}。
  • bash printf根据其每个参数计算格式=%。0s。
  • printf回显等号,因为它未经格式转换
  • printf%生物格式保护
  • printf%。众生宽度规范
  • printf%.0指定零个字符宽
  • printf%.0s指定结束宽度说明,并说该参数将被视为字符串,并且还结束格式序列。