为什么这个中断不能让我摆脱这个 while-do 循环?

为什么这个中断不能让我摆脱这个 while-do 循环?

代码:

这是为了创建一些动画,当 count 变量$i达到 5 时,它会停止并继续执行未来的 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.

答案1

可以添加两件事:

  1. 由于字符变量最大值为 3(计数从 0 开始到 3 结束 - 总共 4 个字符)。所以它可以在 3 处中断(for 循环/内循环中断)
  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 :您可以使用 exit 退出,这将退出脚本。

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一下。

相关内容