シェルスクリプトで指定した範囲の数値 (range) を取得する

seq コマンドを使うと簡単にできます。以下のコマンドで 1 から 5 までの数字を改行区切りで得られます。

#!/bin/bash
seq 1 5

seq コマンドの結果を用いてループする場合は以下のようになります。

#!/bin/bash

# for 文の場合
end=5
for i in $(seq 1 $end); do
  echo $i
done

# while 文の場合 - サブシェルパターン
end=5
seq 1 $end | while read -r i; do
  echo $i
done

# while 文の場合 - プロセス置換パターン
end=5
while read -r i; do
  echo $i
done < <(seq 1 $end)

ちなみにループしたいだけであれば、Bash のみなりますが二重丸括弧 (( )) を用いて for 文で書くこともできます。

#!/bin/bash
end=5
for ((i = 1; i <= $end; i++)); do
  echo $i
done

他には Ruby の Range オブジェクトの作り方に近い記法もあり、以下のようになります。結果は同じですが、この方法だと範囲として指定している数値部分を変数にすることはできません。

#!/bin/bash
for i in {1..5}; do
  echo $i
done

コメントを残す

メールアドレスが公開されることはありません。

計算問題(認証) *