shift - دسترسی به بسیاری از آرگومان ها
اما چه اتفاقی میافتد وقتی به برنامه تعداد زیادی آرگومان مانند این میدهیم:
[me@linuxbox ~]$ posit-param *
تعداد آرگومان ها: 82
$0 = /home/me/bin/posit-param
$1 = addresses.ldif
2 دلار = بن
$3 = bookmarks.html
4 دلار = debian-500-i386-netinst.iso
5 دلار = debian-500-i386-netinst.jigdo
6 دلار = debian-500-i386-netinst.template
7 دلار = debian-cd_info.tar.gz
8 دلار = رومیزی
9 دلار = dirlist-bin.txt
8 دلار = رومیزی
9 دلار = dirlist-bin.txt
در این سیستم مثال، علامت عام * به 82 آرگومان گسترش می یابد. چگونه می توانیم این تعداد را پردازش کنیم؟ پوسته روشی را برای انجام این کار ارائه می دهد، هرچند روشی ناشیانه. در تغییر دستور باعث می شود که تمام پارامترها هر بار که اجرا می شود "یک به پایین" حرکت کنند. در واقع با استفاده از تغییر، می توان تنها با یک پارامتر (علاوه بر $0، که هرگز تغییر نمی کند):
#! / bin / bash
# posit-param2: اسکریپت برای نمایش همه آرگومان ها count=1
در حالی که [[ $# -gt 0 ]]; انجام دادن
echo "Argument $count = $1" count=$((count + 1))
شیفت انجام شد
#! / bin / bash
# posit-param2: اسکریپت برای نمایش همه آرگومان ها count=1
در حالی که [[ $# -gt 0 ]]; انجام دادن
echo "Argument $count = $1" count=$((count + 1))
شیفت انجام شد
هر زمان تغییر اجرا می شود، مقدار $2 منتقل می شود به $1، ارزش $3 منتقل می شود به $2 و غیره ارزش $# نیز یک کاهش می یابد.
در posit-param2 برنامه، حلقه ای ایجاد می کنیم که تعداد آرگومان های باقی مانده را ارزیابی می کند و تا زمانی که حداقل یک آرگومان وجود داشته باشد ادامه می یابد. آرگومان فعلی را نمایش می دهیم، متغیر را افزایش می دهیم تعداد دفعات مشاهده با هر بار تکرار حلقه، تعداد آرگومانهای پردازش شده ارائه میشود و در نهایت، یک تغییر برای بارگذاری
$1 با آرگومان بعدی. در اینجا برنامه در حال کار است:
[me@linuxbox ~]$ posit-param2 abcd
برهان 1 = آرگومان 2 = ب آرگومان 3 = ج آرگومان 4 = د
[me@linuxbox ~]$ posit-param2 abcd
برهان 1 = آرگومان 2 = ب آرگومان 3 = ج آرگومان 4 = د