web-dev-qa-db-ja.com

Bourne Shell For i in(seq)

特定の数のセットを反復するBourne Shellでループを作成したいと思います。通常はseqを使用します:

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

しかし、このSolarisボックスにはseqは存在しないようです。誰かが数字のリストを反復する別のソリューションを提供することで手助けできますか?

10
Chris Kannon

試す

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
15
ghostdog74

seqdcでエミュレートできます:

例えば:

seq 0 5 120

次のように書き直されます:

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

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
1

罪のように醜いですが、これはうまくいきます:

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