Bash
如何在使用者插入提示的右側顯示字元串
我有簡單的腳本
#!/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
這使用了您將使用的大多數終端描述中的兩個終端功能:
- 保存/恢復游標位置(**
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