2018年12月13日 に更新

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

⚠️ この記事は最終更新日から3年以上が経過しています。

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

計算問題(認証) *