بورن شل لأني في (seq)
سؤال
أريد أن أكتب حلقة في بورن قذيفة تكرر مجموعة محددة من الأرقام. عادة سأستخدمها 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
لا تنتمي إلى StackOverflow