shift - קבלת גישה להרבה טיעונים
אבל מה קורה כשאנחנו נותנים לתוכנית מספר רב של ארגומנטים כמו זה:
[me@linuxbox ~]$ פרמטר חיובי *
מספר הטיעונים: 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]]; לעשות
הד "ארגומנט $count = $1" count=$((count + 1))
משמרת בוצעה
#! / bin / bash
# posit-param2: סקריפט להצגת כל הארגומנטים count=1
בעוד ש-[[$# -gt 0]]; לעשות
הד "ארגומנט $count = $1" count=$((count + 1))
משמרת בוצעה
בכל פעם משמרת מבוצע, הערך של $2 מועבר ל $1, הערך של $3 מועבר ל $2 וכן הלאה. הערך של $# גם הוא מופחת באחד.
ב posit-param2 בתוכנית, אנו יוצרים לולאה שמעריכה את מספר הארגומנטים שנותרו וממשיכה כל עוד יש לפחות אחד. אנו מציגים את הארגומנט הנוכחי, מגדילים את המשתנה לספור עם כל איטרציה של הלולאה כדי לספק ספירה שוטפת של מספר הארגומנטים שעובדו, ולבסוף, לבצע א משמרת לטעון
$1 עם הארגומנט הבא. הנה התוכנית בפעולה:
[me@linuxbox ~]$ פרמטר חיובי2 abcd
טיעון 1 = א טיעון 2 = ב טיעון 3 = ג טיעון 4 = ד
[me@linuxbox ~]$ פרמטר חיובי2 abcd
טיעון 1 = א טיעון 2 = ב טיעון 3 = ג טיעון 4 = ד