bashでステップnの範囲を作成するにはどうすればよいですか?(増分で一連の数値を生成します)


143

bashの範囲を反復する方法は

for i in {0..10}; do echo $i; done

ステップを含むシーケンスを反復するための構文は何ですか?たとえば、上の例では偶数のみを取得したいとします。


偶数、iに2を掛ける:P
Joey Robert

乗算はかなり醜いです、私は言うべきです
SilentGhost

2
@Omnifarious私はそうは思いません。たとえば、OS Xにはまだ3.2が付属しています。Cスタイルのループを受け入れる必要があると思います。
Eli Korvigo 2018年

回答:


195

私がやる

for i in `seq 0 2 10`; do echo $i; done

(もちろんseq 0 2 10、同じ出力がそれ自体で生成されますが)。

seq浮動小数点数(などseq .5 .25 3.5)は許可されますが、bashのブレース展開は整数しか許可されないことに注意してください。


4
私は、あなたの回答が「bash」に固有ではなく、「sh」に対する一般的なものであったためと考えて危険を冒します。純粋なBashアプローチ{begin end step}のパフォーマンスは少し向上しています。古い 'seq'メソッドは、busyboxのような古いまたは小さいメモリシステムで便利です。私はあなたとTheBonsaiの両方の回答に賛成票を投じました。:)
Scott Prive 2015

6
バッククォートより$(...)を優先します。バッククォートは正気にネストしません。
7

seq 1000000 1000010は実際には浮動小数点のみを実行します-整数を実行する方法はありません!ブレース拡張が機能します。
hmijailは

112

Bash 4のブレース拡張にはステップ機能があります。

for {0..10..2}; do
  ..
done

Bash 2/3(Cスタイルのforループ、上記の回答を参照)でもBash 4でも、 'seq'コマンドよりも何でも好きです。


1
ところで、bash4が主要なOSのデフォルトであるかどうか知っていますか?
SilentGhost 2009年

3
Bash4はまだ主流ではありません。なぜシーケンスではないのですか?まあ、それをIRCチャネル#bashのボットの言葉でそれを言いましょう:「seq(1)は愚かなLinuxのハウツーで10まで数えるために使用される非常に非標準の外部コマンドです。」
TheBonsai 2009年

私の理解では、seqはcoreutilsの一部です。それについて非標準は何ですか?引数?ご協力いただきありがとうございます。
SilentGhost 2009年

4
これらの引数はあなたにとって重要かもしれませんし、そうでないかもしれません:* GNU coreutilsなしで十分なシステムがあります(しかしBashがインストールされています)*不要な外部プロセスを作成します*すべての 'seq'は 'seq'がすることをするという考えに依存しています*それはISOによって標準化されていません
TheBonsai 2009年

3
@beckoステップが変数iに格納されている場合、実行できませんfor {0..10..${i}}..失敗します。
Nehal J Wani 2014

72

余分なプロセスなしのピュアバッシュ:

for (( COUNTER=0; COUNTER<=10; COUNTER+=2 )); do
    echo $COUNTER
done

10
+1ステップも変数で置き換えることができるため。
Nehal J Wani 2014

1
これは、たいていの人が望んでいることだと思います。規定されたステップ値でループを実行する簡単な方法です。それはすべてのseqベースの回答よりも簡単に聞こえ、Bash4ブレース展開よりも明確な構文であり、変数を許可するように見えます(私はそれを試していませんが、構文は間違いなくそれを示唆しています)。
tobylaroni

@TheBonsaiの回答とは異なり、Bash 3で機能します。
srcerer '10 / 10/19

変数も解決します((i = "$ first"; i <= "$ last"; i + = "$ step"))。中括弧とseqではそれほど簡単ではありません。
Blaa_Thor

20
#!/bin/bash
for i in $(seq 1 2 10)
do
   echo "skip by 2 value $i"
done

seqはLinuxコマンドです。これはMac OS XまたはFreeBSDでは利用できません。
デレクソン2013年

5
FWIW seqは私の標準のOS X Mavericks 10.9.1で利用可能です
Mark Setchell

私は他のいくつかのシンタックスを試してみましたが、それが小さなCentOSで動作している唯一のものです。@z-私の日を保存しました:D
m3nda 2014年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.