Bash

如何在使用者插入提示的右側顯示字元串

  • October 13, 2016

我有簡單的腳本

#!/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

假設最簡單的情況(一個簡短的單詞,沒有換行,不用擔心滾動到螢幕的末尾),你可以這樣做

#!/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[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

引用自:https://unix.stackexchange.com/questions/316061