Bash / الأساسي: القواعد والقيم والتحكم / الدرس 6
تمثيل القوائم والبيانات المفتاحية بالمصفوفات
استخدم مصفوفات Bash المفهرسة والترابطية لحفظ القيم وتمييز المفاتيح والمواضع وتجنب افتراض ترتيب غير موثق.
في هذه الصفحة
أهداف الدرس
- حفظ عناصر فارغة ومتعددة الكلمات.
- تمييز الفهارس المتناثرة والعدد والمفاتيح.
- استخدام المصفوفات للأوامر دون تقييم.
المصفوفة المفهرسة ليست سلسلة مقسمة
تربط مصفوفة Bash أعداداً بقيم نصية تشمل المسافة والنجمة والفارغ دون ترميز فاصل. أسند مباشرة لا من عرض مطبوع. توسع @ المقتبسة العناصر منفصلة وتجمع * وفق محرف IFS. تختلف الواجهتان ولو تشابه العرض. ليست المصفوفات قواعد POSIX sh فصرح Bash.
لا يعني عدد العناصر اتصال الفهارس
قد تتناثر الفهارس فلا يساوي العدد الأكبر زائد واحد وتفوت حلقة العدد عناصر. استخدم ! للمفاتيح أو @ للقيم. الفهرس سياق حسابي فلا تثق بنص خارجي كعدد. ميز الغائب من الموجود الفارغ بالتوسعة المدعومة واختبر لا تستنتج من فراغ مطبوع.
items=()
items[2]='red apple'
items[7]=''
printf 'count=%s\n' "${#items[@]}"
for index in "${!items[@]}"; do
printf '%s=<%s>\n' "$index" "${items[$index]}"
done
count=2
2=<red apple>
7=<>
عنصران عند 2 و7، ويُعد الفارغ عنصراً ويحفظه الاقتباس.
المفاتيح الترابطية نموذج مستقل
ينشئ declare -A الترابطية في الإصدارات الداعمة. مفاتيحها نصوص غير فارغة تعالج بدلالات الفهرسة. ليس ترتيبها عقد عرض؛ اطبع قائمة معلنة أو افرز ترميزاً مناسباً. لا تخترع ترتيباً من تشغيل. تجنب تعبيرات غير موثوقة بالفهرسة أو غير المباشر. سجل المتطلبات واختبر المثبت لتغيرات وإصلاحات التوسعة.
بناء متجه وسائط دون eval
تحفظ مصفوفة الأمر الاسم والوسائط ويستدعيها @ المقتبس دون سلسلة وتفسير ثان. يحفظ الحدود ولا يتحقق من الاسم والخيارات فلهما سياسة. يحتاج printf صيغة ثابتة وبيانات في %s لا الصيغة. يفيد %q للعرض في Bash ولا يصبح ترميز نقل محمولاً.
declare -A status=([draft]='needs review' [ready]='approved')
for key in draft ready; do
command=(printf '%s: %s\n' "$key" "${status[$key]}")
"${command[@]}"
done
draft: needs review
ready: approved
تحدد القائمة الترتيب وتستدعي المصفوفة printf بصيغة ثابتة وقيم مصطنعة دون تقييم البيانات.
معرفة حدود مناسبة مصفوفات الصدفة
تفيد المصفوفات للقوائم المعتدلة والتنسيق الصغير لا بنية متداخلة أو مخزن ثنائي أو قاعدة. لا تحفظ النصوص NUL وقد تستنفد القوائم الذاكرة أو حد وسائط الابن. يناسب التدفق صيغة موثقة للحجم الكبير وللغة أخرى بنية أعقد. وضح التمثيل وتجنب ترميزات ذكية لا تحفظ كل قيمة.
الأخطاء الشائعة وإصلاحها
تكرار الفهارس من صفر إلى العدد
- لماذا يحدث؟
- افتُرض اتصال المتناثر.
- كيف تصلحه؟
- كرر الفهارس الفعلية أو القيم.
- كيف تتجنب تكراره؟
- أدرج حالة متناثرة بالاختبار.
الاعتماد على ترتيب الترابطية
- لماذا يحدث؟
- صار ترتيب مرصود وعد واجهة.
- كيف تصلحه؟
- استخدم ترتيباً صريحاً أو فرزاً مناسباً.
- كيف تتجنب تكراره؟
- عرّف العرض مستقلاً عن التخزين.
جمع مصفوفة أمر وتقييمها
- لماذا يحدث؟
- أزال التحليل الثاني الحدود.
- كيف تصلحه؟
- استدع المصفوفة مقتبسة مباشرة.
- كيف تتجنب تكراره؟
- افصل اختيار الأمر ووسائط البيانات.
اختبر فهمك
1. لمصفوفة فهرسان 3 و9. ما خطأ حلقة 0 و1؟
اعرض الحل المشروح
تزور الغائب وتفوت الموجود. كرر "${!items[@]}" مقتبساً أو القيم إن لم تهم الفهارس.
2. كيف تطبع علامة بالمئة من المستخدم؟
اعرض الحل المشروح
استخدم printf بصيغة ثابتة مثل printf '%s\n' "$value". تبقى العلامة بيانات لا توجيهاً، وهذا مستقل عن اقتباس الصدفة ويشمل المصفوفات.
أهم ما تعلمته
- احفظ عناصر القائمة بتوسعة @ مقتبسة.
- وضح الترتيب وسياسة الأمر وحدود الحجم.