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