التحول - الوصول إلى العديد من الحجج
لكن ماذا يحدث عندما نعطي البرنامج عددًا كبيرًا من الحجج مثل هذا:
[me @ linuxbox ~] $ وضعية بارام *
عدد الحجج: 82
0 دولار = / home / me / bin / posit-param
1 دولار = العناوين
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، الذي لا يتغير أبدًا):
#! / بن / باش
# posit-param2: البرنامج النصي لعرض عدد جميع المتغيرات = 1
بينما [[$ # -gt 0]] ؛ فعل
صدى "Argument $ count = $ 1" count = $ ((count + 1))
تم التحول
#! / بن / باش
# posit-param2: البرنامج النصي لعرض عدد جميع المتغيرات = 1
بينما [[$ # -gt 0]] ؛ فعل
صدى "Argument $ count = $ 1" count = $ ((count + 1))
تم التحول
في كل مرة نقل قيمة $2 إلى $1، قيمة ال $3 إلى $2 وما إلى ذلك وهلم جرا. قيمة ال $# يتم تقليله أيضًا بمقدار واحد.
في مجلة الموضع بارام 2 البرنامج ، نقوم بإنشاء حلقة تقيم عدد الحجج المتبقية وتستمر طالما أن هناك واحدة على الأقل. نعرض الحجة الحالية ، زيادة المتغير عد مع كل تكرار للحلقة لتوفير عدد متكرر من عدد الوسائط التي تمت معالجتها ، وأخيرًا تنفيذ نقل لتحميل
$ 1 مع الوسيطة التالية. هنا البرنامج في العمل:
[me @ linuxbox ~] $ posit- بارام 2 abcd
الحجة 1 = الوسيطة 2 = ب الوسيطة 3 = ج الوسيطة 4 = د
[me @ linuxbox ~] $ posit- بارام 2 abcd
الحجة 1 = الوسيطة 2 = ب الوسيطة 3 = ج الوسيطة 4 = د