12

特定の数値セットを反復する Bourne シェルでループを作成したいと考えています。通常、私は使用します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 シェルの場合、おそらくバッククォートを使用する必要がありますが、可能であれば使用しないでください。

for i in `echo "for (i=0;i<=3;i++) i"|bc`; do echo "$i"; done
于 2010-01-20T16:32:04.810 に答える
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

$ 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
于 2012-10-02T20:36:28.377 に答える