如何在bash中生成步骤n的范围?(生成一系列增量的数字)

Sil*_*ost 136 iteration bash range

在bash中迭代范围的方法是

for i in {0..10}; do echo $i; done
Run Code Online (Sandbox Code Playgroud)

使用步骤迭代序列的语法是什么?说,我想在上面的例子中得到偶数.

cha*_*aos 187

我会做

for i in `seq 0 2 10`; do echo $i; done
Run Code Online (Sandbox Code Playgroud)

(虽然当然seq 0 2 10会自己产生相同的输出).

请注意,seq允许浮点数(例如seq .5 .25 3.5),但bash的大括号扩展只允许整数.

  • 我会冒险猜测downvote是由于你的答案是'sh'的通用,而不是'bash'特有的.纯粹的Bash方法{开始结束步骤}执行得更好.较旧的'seq'方法在较旧或较小内存系统(如busybox)上很方便.我做了你和TheBonsai的回答.:) (3认同)
  • 最好在反引号中使用$(...)。反引号不会嵌套。 (3认同)

The*_*sai 105

Bash 4的支撑扩展有一个步骤特征:

for {0..10..2}; do
  ..
done
Run Code Online (Sandbox Code Playgroud)

无论是Bash 2/3(C-style for loop,见上面的答案)还是Bash 4,我都更喜欢'seq'命令.

  • 这应该是答案. (5认同)
  • 这些论点可能会或可能不会对你有用:*有足够的系统没有GNU coreutils(但安装了Bash)*你创建了一个不需要的外部进程*你依赖于所有'seq'做你'seq'所做的事情的想法*它是没有标准化的ISO (4认同)
  • @becko如果步骤存储在变量“ i”中,那么对于{0..10 .. $ {i}}`..您将无法执行它。 (3认同)
  • Bash4仍然不是主流,没有.为什么不seq?好吧,让我们用IRC频道#bash中的机器人的话来说:"seq(1)是一个高度非标准的外部命令,用于在愚蠢的Linux howtos中数到10." (2认同)

Fri*_*ner 65

纯粹的Bash,没有额外的过程:

for (( COUNTER=0; COUNTER<=10; COUNTER+=2 )); do
    echo $COUNTER
done
Run Code Online (Sandbox Code Playgroud)

  • +1因为步骤也可以由变量替换. (8认同)

z *_* - 18

#!/bin/bash
for i in $(seq 1 2 10)
do
   echo "skip by 2 value $i"
done
Run Code Online (Sandbox Code Playgroud)

  • FWIW seq在我的标准OS X Mavericks 10.9.1中可用 (5认同)

Mir*_*ili 7

$ seq 4
1
2
3
4

$ seq 2 5
2
3
4
5

$ seq 4 2 12
4
6
8
10
12

$ seq -w 4 2 12
04
06
08
10
12

$ seq -s, 4 2 12
4,6,8,10,12
Run Code Online (Sandbox Code Playgroud)


小智 5

大括号扩展 {m..n..s} 比 seq 更有效。并且它允许一些输出格式:

$ echo {0000..0010..2}
0000 0002 0004 0006 0008 0010
Run Code Online (Sandbox Code Playgroud)

如果有人对文件进行编号,并且想要“ls”的排序输出,那么这很有用。