من أجل: نموذج شل التقليدي
الأصلي لـ صيغة الأمر هي:
لـ متغير [في كلمات] ؛ فعل
الأوامر
فعل
في متغير هو اسم المتغير الذي سيزيد أثناء تنفيذ الحلقة ، كلمات هي قائمة اختيارية بالعناصر التي سيتم تخصيصها بشكل تسلسلي متغيرو الأوامر هي الأوامر التي سيتم تنفيذها على كل تكرار للحلقة.
ال لـ الأمر مفيد في سطر الأوامر. يمكننا بسهولة شرح كيفية عملها:
[me @ linuxbox ~] $ لأني في ABCD ؛ هل صدى $ i؛ انتهى
ا ب ت ث
[me @ linuxbox ~] $ لأني في ABCD ؛ هل صدى $ i؛ انتهى
ا ب ت ث
في هذا المثال، لـ يتم إعطاء قائمة من أربع كلمات: "أ" و "ب" و "ج" و "د". بقائمة من أربع كلمات ، يتم تنفيذ الحلقة أربع مرات. في كل مرة يتم تنفيذ الحلقة ، يتم ربط كلمة بالمتغير i. داخل الحلقة ، لدينا ملف صدى الأمر الذي يعرض قيمة i لإظهار المهمة. كما هو الحال مع في حين و حتى الحلقات فعل key- كلمة تغلق الحلقة.
الميزة القوية حقًا لـ لـ هو عدد الطرق الشيقة التي يمكننا من خلالها إنشاء قائمة الكلمات. على سبيل المثال ، من خلال توسيع الدعامة:
[me @ linuxbox ~] $ لأني في {A..D} ؛ هل صدى $ i؛ انتهى
ا ب ت ث
[me @ linuxbox ~] $ لأني في {A..D} ؛ هل صدى $ i؛ انتهى
ا ب ت ث
أو توسيع اسم المسار:
[me @ linuxbox ~] $ لأني في توزيعات * .txt ؛ هل صدى $ i؛ انتهى
distros-by-date.txt توزيعات-date.txt توزيعات مفتاح-أسماء.
توزيعات vernums.txt توزيعات إصدارات. txt
[me @ linuxbox ~] $ لأني في توزيعات * .txt ؛ هل صدى $ i؛ انتهى
distros-by-date.txt توزيعات-date.txt توزيعات مفتاح-أسماء.
توزيعات vernums.txt توزيعات إصدارات. txt
أو استبدال الأمر:
#! / بن / باش
# long-word: البحث عن أطول سلسلة في الملف أثناء [[-n $ 1]]؛ فعل
إذا [[-r $ 1]] ؛ ثم max_word = max_len = 0
لـ i في $ (سلاسل $ 1) ؛ فعل لين = $ (echo -n $ i | wc -c)
إذا ((len> max_len)) ؛ ثم max_len = $ len max_word = $ i
fi
فعل
صدى "$ 1: '$ max_word' ($ max_len من الأحرف)"
فاي التحول
فعل
#! / بن / باش
# long-word: البحث عن أطول سلسلة في الملف أثناء [[-n $ 1]]؛ فعل
إذا [[-r $ 1]] ؛ ثم max_word = max_len = 0
لـ i في $ (سلاسل $ 1) ؛ فعل لين = $ (echo -n $ i | wc -c)
إذا ((len> max_len)) ؛ ثم max_len = $ len max_word = $ i
fi
فعل
صدى "$ 1: '$ max_word' ($ max_len من الأحرف)"
فاي التحول
فعل
من أجل: نموذج شل التقليدي
في هذا المثال ، نبحث عن أطول سلسلة موجودة داخل الملف. عند إعطاء اسم ملف واحد أو أكثر في سطر الأوامر ، يستخدم هذا البرنامج اسم الملف سلاسل البرنامج (المتضمن في حزمة GNU binutils) لإنشاء قائمة من "الكلمات" النصية القابلة للقراءة في كل ملف. ال لـ تعالج حلقة كل كلمة بدورها وتحدد ما إذا كانت الكلمة الحالية هي الأطول التي تم العثور عليها حتى الآن. عند انتهاء الحلقة ، يتم عرض أطول كلمة.
إذا كان الخيار in كلمات جزء من لـ تم حذف الأمر ، لـ افتراضات لمعالجة المعلمات الموضعية. سنقوم بتعديل الخاص بنا أطول كلمة البرنامج النصي لاستخدام هذه الطريقة:
#! / بن / باش
# longest-word2: البحث عن أطول سلسلة في ملف لـ i ؛ فعل
إذا [[-r $ i]]؛ ثم max_word = max_len = 0
لـ j in $ (سلاسل $ i) ؛ فعل لين = $ (echo -n $ j | wc -c)
إذا ((len> max_len)) ؛ ثم max_len = $ len max_word = $ j
fi
فعل
صدى "$ i: '$ max_word' (أحرف max_len $)"
انتهى فاي
#! / بن / باش
# longest-word2: البحث عن أطول سلسلة في ملف لـ i ؛ فعل
إذا [[-r $ i]]؛ ثم max_word = max_len = 0
لـ j in $ (سلاسل $ i) ؛ فعل لين = $ (echo -n $ j | wc -c)
إذا ((len> max_len)) ؛ ثم max_len = $ len max_word = $ j
fi
فعل
صدى "$ i: '$ max_word' (أحرف max_len $)"
انتهى فاي
كما نرى ، قمنا بتغيير الحلقة الخارجية لاستخدامها لـ عوضا عن في حين. بحذف قائمة الكلمات في لـ الأمر ، يتم استخدام المعلمات الموضعية بدلاً من ذلك. داخل الحلقة ، الحالات السابقة للمتغير i تم تغييرها إلى المتغير j. استخدام نقل كما تم القضاء عليه.
لماذا أنا؟
ربما لاحظت أن المتغير i تم اختياره لكل من لـ أمثلة حلقة أعلاه. لماذا ا؟ لا يوجد سبب محدد في الواقع ، إلى جانب التقاليد. المتغير المستخدم مع لـ يمكن أن يكون أي متغير صالح ، ولكن i هو الأكثر شيوعًا ، يليه j و k.
يأتي أساس هذا التقليد من لغة البرمجة فورتران. في For- tran ، المتغيرات غير المعلنة التي تبدأ بالأحرف I و J و K و L و M يتم كتابتها تلقائيًا كأعداد صحيحة ، بينما المتغيرات التي تبدأ بأي حرف آخر تكتب على أنها حقيقية (أرقام بها كسور عشرية). أدى هذا السلوك إلى قيام المبرمجين باستخدام المتغيرات I و J و K لمتغيرات الحلقة ، حيث كان استخدامها أقل جهدًا عند الحاجة إلى متغير مؤقت (مثل متغيرات الحلقة في كثير من الأحيان).
كما أدى إلى الحكمة التالية المستندة إلى لغة فورتران: "الله حقيقي ، ما لم يتم الإعلان عن عدد صحيح".