我有简单的脚本
#!/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
它使用了您将使用的大多数终端描述中的两个终端功能:
- 保存/恢复光标位置(
sc
和rc
参数),以及 - 水平位置(
hpa
范围)。
您可以对相应的转义序列进行硬编码,但会牺牲可读性......
顺便说一句,有些人可能建议使用向上箭头转义,但这与在屏幕末尾滚动有同样的问题,也会出现同样的问题\e[F
(CPL
,这不在您的终端描述中)。
要水平移动,您可以使用带有参数的右光标,例如,
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