欲写在Bourne外壳程序环路它迭代一组特定的数字。通常,我会使用seq

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

但似乎在此Solaris框seq不存在。通过提供另一种解决方案,以迭代号码列表谁能帮助?

有帮助吗?

解决方案

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

其他提示

可以效仿seqdc

例如:

seq 0 5 120

被重写为:

dc -e '0 5 120  1+stsisb[pli+dlt>a]salblax'

使用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

我觉得这作品,虽然其丑无比:

for i in `echo X \n Y \n Z ` ...
for i in `seq 1 5 20`; do echo $i; done

结果:

5
10
15
20

$人SEQ

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top