制御構文 ~ break でループを中断

ループは break で途中で中断することができます。

for ~ break

code
for i in {1..10}; do
  echo "${i}"
  break
done
stdout
1
code
for i in {1..10}; do
  echo "${i}"
  # i が 5 になったら break でループを抜ける
  if [[ $i == 5 ]]; then
    break
  fi
done
stdout
1
2
3
4
5

while ~ break

code
i=1
while [[ $i -lt 10 ]]; do
  echo "${i}"
  break
  i=$((i+1))
done
stdout
1
code
i=1
while [[ $i -lt 10 ]]; do
  echo "${i}"
  # i が 5 になったら break でループを抜ける
  if [[ $i == 5 ]]; then
    break
  fi
  i=$((i+1))
done
stdout
1
2
3
4
5

break n ~ ループを終了するレベルの指定

break には終了するループのレベルを指定することができます。

code
for i in {1..3}; do
  for j in {1..3}; do
    echo "${i}, ${j}"
    break 1
  done
done
stdout
1, 1
2, 1
3, 1

2重のループで break に 2 を指定した場合、外側のループが中断します。

code
for i in {1..3}; do
  for j in {1..3}; do
    echo "${i}, ${j}"
    break 2
  done
done
stdout
1, 1

3重のループで break に 3 を指定した場合、一番外側のループが中断します。

code
for i in {1..3}; do
  for j in {1..3}; do
    for k in {1..3}; do
      echo "${i}, ${j}, ${k}"
      break 3
    done
  done
done
stdout
1, 1, 1

3重のループで break に 2 を指定した場合、2重目のループが中断します。

code
for i in {1..3}; do
  for j in {1..3}; do
    for k in {1..3}; do
      echo "${i}, ${j}, ${k}"
      break 2
    done
  done
done
stdout
1, 1, 1
2, 1, 1
3, 1, 1
code
for i in {1..3}; do
  j=1
  while true; do
    for k in {1..3}; do
      echo "${i}, ${j}, ${k}"
      break 2
    done
    j=$((j+1))
  done
done
stdout
1, 1, 1
2, 1, 1
3, 1, 1

break に 0 を指定した場合、エラーになります。

code
# break に 1 より小さい数字を指定した場合はエラーになる
for i in {1..3}; do
  echo "${i}"
  break 0
done
stdout
1
stderr
line 4: break: 0: loop count out of range