Por que essa quebra não pode me tirar desse loop while-do?

0

código:

Isto é para criar alguma animação e quando a variável de contagem $i obtém 5, ele para e carrega o futuro código de shell.

chars="/-\|"

while :; do
  for (( i=0; i<${#chars}; i++ )); do
    sleep 0.1
    echo -en "${chars:$i:1}" "\r"
    if [ $i == 5 ]
    then
        break
    fi
  done
done

# code below are never get executed.
    
por AGamePlayer 08.09.2015 / 09:36

2 respostas

1

Porque ele quebra o loop mais próximo, que é o for , não o while . Experimente break 2 .

    
por 08.09.2015 / 09:39
2

2 coisas podem ser adicionadas:

  1. Como o valor máximo da variável de caractere é 3 (a contagem começa em 0 termina com 3 - no total 4 caracteres). para que ele possa quebrar em 3 (para quebras de loop / loop interno)
  2. Para interromper o loop de loop / while externo, ele precisa de uma condição para sair. Aqui não há necessidade de loop while.

solução 1: sem uso de loop while

chars="/-\|"
  for (( i=0; i<${#chars}; i++ )); do
    sleep 0.1
    echo -en "${chars:$i:1}" "\r"
    if [ $i == 3 ]; then
        break;
    fi
 done

solution 2: você pode usar exit para sair e sair do script.

chars="/-\|"
while :; do
  for (( i=0; i<${#chars}; i++ )); do
    sleep 0.1
    echo -en "${chars:$i:1}" "\r"
    if [ $i == 3 ]; then
        exit;
    fi
 done
done
    
por 08.09.2015 / 23:12