سؤال

أريد أن أكتب حلقة في بورن قذيفة تكرر مجموعة محددة من الأرقام. عادة سأستخدمها seq:

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

ولكن على ما يبدو في صندوق سولاريس هذا 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 [ "$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

بالنسبة لقذيفة بورن ، ربما يتعين عليك استخدام backticks ، ولكن تجنبها إذا استطعت:

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top