进度指示器-掉落的牌组(Bash)

进度指示器-掉落的牌组(Bash)

我编写了一个进度指示器,形式是一副下落的纸牌(我妻子的想法)。

它还不是最终版本。代码如下:

vdeck="| | | | | "
hdeck[1]="__ | | | |"
hdeck[2]="__ __ | | |"
hdeck[3]="__ __ __ | |"
hdeck[4]="__ __ __ __ |"
hdeck[5]="__ __ __ __ __"

while true
do
    clear
    echo -n -e "\r$vdeck"
    sleep 0.8

    for i in 1 2 3 4 5
    do
        echo -n -e "\r${hdeck[$i]}"
        sleep 0.2
    done
    clear
done

是否有可能在没有 hdeck 数组的情况下优化此代码并获得相同的效果?增加“|”意味着增加“hdeck”数组组合,这并不好。

答案1

像这样吗?

#!/bin/bash
LEN=5
echo 'start';
for (( i=0; i<((${LEN}+1)); i++ )); do
echo -ne '\r' 
        for (( j=0; j<${i}; j++ )); do
                 echo -n '_'
        done
        for (( j=${i}; j<${LEN}; j++ )); do
                 echo -n '|'
        done
sleep 0.5
done
echo -e '\ndone'

答案2

那么,为什么你不使用单个字符串(全部为“|”)并尝试在循环的每次迭代中用“-”替换(第一个)“|”?

字符串替换示例:

stringZ=abcABC123ABCabc

echo ${stringZ/abc/xyz}       # xyzABC123ABCabc
                              # Replaces first match of 'abc' with 'xyz'.

这样,您就不需要没有 hdeck 数组的多个字符串。

尝试这个:

deck="| | | | | "

while true
do
    clear
    echo -n -e "\r$deck"
    sleep 0.8

    for ((i=1; i<=`expr length $deck`; i++))
    do
        echo -n -e "\r${deck/|/-}"
        sleep 0.2
    done
    clear
done

上述脚本应该可以做到这一点..这只是一个指示性脚本,我自己还没有运行过它..请检查语法错误..

有关 bash 中的字符串操作的更多信息,请参见此处 -http://tldp.org/LDP/abs/html/string-manipulation.html

相关内容