一直很好奇shell命令行安裝腳本的時候怎么實現自動增長進度條而且不增加新輸出的問題。以前一直覺得是不斷print出來東西,但是已經輸出到命令行終端的為什么也能被覆蓋呢,於是看到別人寫的進度條,不斷嘗試,發現核心功能非常簡單,就是不斷的printf "\r"
代碼如下
#!/bin/bash processBar() { process=$1 whole=$2 printf "[%03d/%03d]\r" $process $whole } whole=100 process=0 while [ $process -lt $whole ] do let process++ processBar $process $whole sleep 0.1 done printf "\n"
然后我做了非常簡單版本的核心代碼
#!/bin/bash printf "1\r" sleep 1 printf "2\r" sleep 1 printf "3\r" sleep 1 printf "4\r" sleep 1 printf "5\r" sleep 1
我發現這樣也能從 1 一直變到 5 。很讓人費解這里面的原理是什么。
我看了一下 shell printf 解釋參數中 \r 是回車的意思,至今還沒搞懂是為什么。有網友明白的可以給我留言答疑解惑,不甚感激!
后續更新(2020-05-22)
五分鍾后 我好像有點眉目了
這個打印換行把剛剛輸出的東西覆蓋了,如果調換\r和數字順序 發現后面的覆蓋前面的最后留下來5,就是用回車進行覆蓋,實現動態變化輸出
