この割り込みがなぜこの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

次の2つを追加できます。

  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

おすすめ記事