به جای $10 از ${10} استفاده کنید. این روش در BASH و KornShell کار میکند، اما در پیادهسازیهای قدیمی BourneShell کار نمیکند. یک روش دیگر برای دستیابی به پارامترهای مکانی بعد از $9 استفاده از for است، به عنوان مثال, برای به دست آوردن آخرین پارامتر:
# Bourne for last do : # هیچ done echo "last argument is: $last"
برای به دست آوردن یک شناسه با عدد، میتوانیم از شمارشگر استفاده کنیم:
# Bourne n=12 # این شماره شناسهای میباشد که مورد نظر است i=1 for arg do if test $i -eq $n then argn=$arg break fi i=`expr $i + 1` done echo "argument number $n is: $argn"
مزیت این روش ازبین نرفتن شناسهها است. اگر مشکلی نیست، فرمان shift پارامترهای مکانی قبلی را دور میاندازد:
shift 11 echo "the 12th argument is: $1"
به علاوه، bash و ksh93 با مجموعه پارامترهای مکانی به عنوان یک آرایه رفتار میکنند،و شما میتوانید از ترکیب دستوری بسط پارامتر برای آدرس دادن به عناصر آن از راههای مختلف استفاده کنید :
# Bash, ksh93 for x in "${@:(-2)}" # روی دو پارامتر آخر تکرار میکند for y in "${@:2}" # روی تمام پارامترها تکرار میشود $2 با شروع از # استفاده کنیم مفید باشد shift که شاید برای موقعی که نمیخواهیم از
اگرچه دستیابی مستقیم به هر پارامتر مکانی به این روش امکانپذیر است، به ندرت لازم میشود. جایگزین رایج آن استفاده از getopts برای پردازش گزینهها(به عنوان مثال، "-l" یا "-o filename")، و سپس به کار بردن حلقه for یا while برای پردازش تمام شناسهها یکی پس از دیگری است. یک توضیح از چگونگی پردازش شناسههای خط فرمان در پرسش و پاسخ شماره 35 در دسترس میباشد، و یک توضیح دیگر در http://www.shelldorado.com/goodcoding/cmdargs.html یافت میشود.
پرسش و پاسخ 25 (آخرین ویرایش 2009-12-30 18:09:05 توسط MatthiasPopp)