12

我想在 Bourne shell 中编写一个循环来迭代一组特定的数字。通常我会使用seq

for i in `seq 1 10 15 20`
   #do stuff
loop

但貌似在这个 Solaris 盒子seq上是不存在的。任何人都可以通过提供另一种解决方案来迭代数字列表来提供帮助吗?

4

6 回答 6

21

尝试

for i in 1 10 15 20
do
   echo "do something with $i"
done

否则,如果您有最新的 Solaris,至少有 bash 3。例如,这给出了从 1 到 10 和 15 到 20 的范围

for i in {1..10} {15..20}
do
  echo "$i"
done

或者使用像 nawk 这样的工具

for i in `nawk 'BEGIN{ for(i=1;i<=10;i++) print i}'`
do
  echo $i
done

或者甚至是while循环

while [ "$s" -lt 10 ]; do s=`echo $s+1|bc`; echo $s; done
于 2010-01-20T15:16:36.713 回答
2

您可以seq模拟dc

例如:

seq 0 5 120

改写为:

dc -e '0 5 120  1+stsisb[pli+dlt>a]salblax'
于 2010-01-20T15:35:49.433 回答
1

另一个变体使用bc

for i in $(echo "for (i=0;i<=3;i++) i"|bc); do echo "$i"; done

对于 Bourne shell,您可能必须使用反引号,但如果可以,请避免使用它们:

for i in `echo "for (i=0;i<=3;i++) i"|bc`; do echo "$i"; done
于 2010-01-20T16:32:04.810 回答
1
#!/bin/sh
for i in $(seq 1 10); do
        echo $i
done
于 2020-06-14T16:16:04.607 回答
0

我发现这行得通,尽管像罪一样丑陋:

for i in `echo X \n Y \n Z ` ...
于 2010-01-20T15:18:56.133 回答
-4
for i in `seq 1 5 20`; do echo $i; done

结果:

5
10
15
20

$男人序列

SEQ(1)                           User Commands                          SEQ(1)

NAME
       seq - print a sequence of numbers

SYNOPSIS
       seq [OPTION]... LAST
       seq [OPTION]... FIRST LAST
       seq [OPTION]... FIRST INCREMENT LAST
于 2012-10-02T20:36:28.377 回答