
我想寫一個腳本來輸出我選擇的句子。我希望它們出現在螢幕中央:輸出第一個,然後使第二個出現在第一個之上。這是我的程式碼:
COLUMNS=$(tput cols)
printf "%*s\n" $((($COLUMNS)/2)) "Hey, welcome to my script!" "%\r"
sleep 2
printf "%*s" $((($COLUMNS)/2)) "This is a new line!"
我的目的是用第二行覆蓋第一行,就像telnet towel.blinkenlights.nl
他們特定的星球大戰版本的開頭一樣。我通過閱讀另一個問題設法使它們出現在中心,但我發現不可能使第二行從第一行的同一行開始。有什麼線索嗎?
答案1
問題是你\n
的第一printf
.這會使遊標移動到下一行,因此當您列印新文字時,它不會在同一行上覆蓋舊文字。如果你刪除它,你應該會很好:
COLUMNS=$(tput cols)
printf "%*s\r" $((COLUMNS/2)) "Hey, welcome to my script!"
sleep 2
printf "%*s" $((COLUMNS/2)) "This is a new line!"
printf "\n"
我修正了你對\r
錯誤的正確觀察,並稍微簡化了數學。然後我添加了最後一個\n
,將提示放在最後一行