如何在用户插入提示的右侧显示字符串

如何在用户插入提示的右侧显示字符串

我有简单的脚本

#!/bin/bash
SENTENCE=""
while read word
do
    SENTENCE="$SENTENCE $word"
done

其与用户的交互可能会导致以下结果:

a
a
b
a b
c
a b c
d
a b c d

如何将字符串显示在与用户同一行的右侧,以便获得输出

a                                 a
b                                 a b
c                                 a b c
d                                 a b c d

答案1

假设最简单的情况(一个短单词,没有换行,不用担心滚动到屏幕末尾),你可以这样做

#!/bin/bash
SENTENCE=""
tput sc
while read word
do
    SENTENCE="$SENTENCE $word"
    tput rc
    tput hpa 20
    printf '%s\n' "$SENTENCE"
    tput sc
done

它使用了您将使用的大多数终端描述中的两个终端功能:

  • 保存/恢复光标位置(scrc参数),以及
  • 水平位置(hpa范围)。

您可以对相应的转义序列进行硬编码,但会牺牲可读性......

顺便说一句,有些人可能建议使用向上箭头转义,但这与在屏幕末尾滚动有同样的问题,也会出现同样的问题\e[FCPL,这不在您的终端描述中)。

要水平移动,您可以使用带有参数的右光标,例如,

tput cuf 20

这将是\e[20C

问题的最后有评论\e[1a,但 ANSI 转义序列取决于大小写,这与\e[1A(将光标向上移动一行)。这可能就是您的想法:

#!/bin/bash
SENTENCE=""
while read word
do
    SENTENCE="$SENTENCE $word"
    tput cuu1
    tput hpa 20
    printf '%s\n' "$SENTENCE"
done

这比更容易阅读

#!/bin/bash
SENTENCE=""
while read word
do
    SENTENCE="$SENTENCE $word"
    echo -en '\e[A'
    echo -en '\e[20C'
    echo "$SENTENCE"
done

相关内容