이 인터럽트가 왜 이 while-do 루프에서 빠져나오지 못하는 걸까요?

이 인터럽트가 왜 이 while-do 루프에서 빠져나오지 못하는 걸까요?

암호:

$i이는 count 변수가 5에 도달하면 멈추고 향후 셸 코드를 계속 실행하는 애니메이션을 만드는 것입니다 .

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.

답변1

다음 두 가지를 추가할 수 있습니다.

  1. 문자변수의 최대값은 3이기 때문에 (0부터 시작해서 총 3~4자까지 계산됩니다.) 따라서 3곳에서 끊어질 수 있습니다(루프/내부 루프 중단의 경우).
  2. 외부 루프/while 루프를 중지하려면 이를 중단하는 조건이 필요합니다. 여기에는 while 루프가 필요하지 않습니다.

해결 방법 1: 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

해결 방법 2: 스크립트를 종료하는 종료를 사용하여 종료할 수 있습니다.

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

답변2

왜냐하면 최근의 순환을 깨뜨리기 때문입니다 . for즉, . while시도 break 2해봐.

관련 정보