我编写了一个进度指示器,形式是一副下落的纸牌(我妻子的想法)。
它还不是最终版本。代码如下:
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