特定の数値セットを反復する 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
次の方法でエミュレートできseq
ますdc
。
例えば:
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 シェルの場合、おそらくバッククォートを使用する必要がありますが、可能であれば使用しないでください。
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
$ 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