Bourne Shell For i in (seq)

巧了我就是萌 提交于 2019-11-29 03:00:50

问题


I want to write a loop in Bourne shell which iterates a specific set of numbers. Normally I would use seq:

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

But seemingly on this Solaris box seq does not exist. Can anyone help by providing another solution to iterating a list of numbers?


回答1:


try

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

else if you have recent Solaris, there is bash 3 at least. for example this give range from 1 to 10 and 15 to 20

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

OR use tool like nawk

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

OR even the while loop

while [ "$s" -lt 10 ]; do s=`echo $s+1|bc`; echo $s; done



回答2:


You can emulate seq with dc:

For instance:

seq 0 5 120

is rewritten as:

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



回答3:


Another variation using bc:

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

For the Bourne shell, you'll probably have to use backticks, but avoid them if you can:

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



回答4:


I find that this works, albeit ugly as sin:

for i in `echo X \n Y \n Z ` ...



回答5:


for i in `seq 1 5 20`; do echo $i; done

Result:

5
10
15
20

$ man 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


来源:https://stackoverflow.com/questions/2102364/bourne-shell-for-i-in-seq

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!