الحلقات
Loops
الحلقات — Loops
الحلقة تعني: كرر نفس الفكرة على عدة عناصر. في Bash ستستخدم for مع القوائم الصغيرة، وwhile read مع الملفات أو النصوص متعددة الأسطر. أهم قاعدة: لا تكتب for file in $(ls)؛ هذه صيغة شهيرة لكنها هشة لأن أسماء الملفات التي تحتوي مسافات ستنكسر. استخدم glob مثل for file in *.md أو استخدم find مع قراءة آمنة عندما تحتاج شيئاً أقوى.
حلقة for على array واضحة وسهلة. تضع العناصر في items=(...) ثم تمر عليها بـfor item in "${items[@]}". الاقتباس هنا مهم جداً: "${items[@]}" يحافظ على كل عنصر كما هو، حتى لو احتوى مسافة.
أما while IFS= read -r line فهي النمط الآمن لقراءة السطور. IFS= يمنع حذف المسافات في بداية ونهاية السطر، و-r يمنع تفسير backslash بطريقة مفاجئة. قد تبدو الصيغة طويلة، لكنها عادة ممتازة.
مثال for
متى تستخدم while؟
استخدم while read عندما يكون المصدر ملفاً أو ناتج أمر طويل. مثال قراءة ملف CSV أو log. لا تجعل الحلقة تقوم بعشرة أشياء. إذا كبرت كتلة الحلقة، انقل العمل إلى دالة مثل process_line "$line" حتى يبقى التدفق مفهوماً.
break وcontinue
break يخرج من الحلقة. continue يتجاوز العنصر الحالي ويكمل مع التالي. استخدمهما بحذر، لأن كثرة القفزات تجعل القراءة أصعب. إذا وجدت نفسك تستخدمهما كثيراً، اسأل هل الشرط يمكن أن يكون أوضح في بداية الحلقة؟