Indikator Kemajuan-jatuh kartu (Bash)

5

Saya memberi kode indikator kemajuan dalam bentuk tumpukan kartu yang jatuh (ide istri saya).

Ini belum dalam bentuk akhir. Ini kodenya:

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

Apakah mungkin untuk mengoptimalkan kode ini tanpa memiliki array hdeck dan mendapatkan efek yang sama? Meningkatkan '|' berarti meningkatkan kombinasi array 'hdeck', yang tidak baik.

smokinguns
sumber

Jawaban:

3

Sesuatu seperti ini?

#!/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'
Tzarium
sumber
Selain itu, bukankah Anda seharusnya dapat menggunakan variabel dalam sintaks "for i in {1..10}" yang lebih pendek? Saya tidak bisa mendapatkan "for i in {1 .. $ {LEN}}" untuk bekerja yang akan mempersingkat kodenya.
Tzarium
1

Nah, mengapa Anda tidak memiliki string tunggal (semua '|') dan mencoba mengganti (pertama) '|' dengan '-' di setiap iterasi loop?

Contoh penggantian string:

stringZ=abcABC123ABCabc

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

Dengan begitu, Anda tidak perlu banyak string tanpa array hdeck.

Coba ini:

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

Script di atas harus melakukannya .. Ini hanya script indikatif dan saya belum menjalankannya sendiri .. Silakan periksa kesalahan sintaksis ..

Informasi lebih lanjut tentang manipulasi string dalam bash ada di sini - http://tldp.org/LDP/abs/html/string-manipulation.html

Vinay
sumber
Kode Tzarium di atas lebih elegan daripada kode saya
Vinay