الخرائط Associative Arrays
Associative Arrays
الخرائط — Associative Arrays
الـ associative array تربط مفتاحاً بقيمة. بدلاً من قائمة مرتبة، لديك خريطة مثل status["nginx"]="running". يجب تعريفها أولاً بـdeclare -A status. هذه البنية مفيدة عندما تريد ربط اسم خدمة بحالتها، أو اسم ملف بعدد، أو خيار بوصف.
تحتاج Bash 4 أو أحدث لهذه الميزة. على macOS القديم قد تكون Bash الافتراضية 3.2، لذلك قابلية النقل مهمة. بما أن هذا مسار تعلم Bash حديث، نستخدمها، لكن في سكربتات إنتاجية متعددة الأنظمة تحقق من الإصدار أو استخدم صيغة أبسط.
فحص الإصدار على macOS
macOS يُشحن بـBash 3.2 افتراضياً (لأسباب ترخيص). declare -A لا تعمل عليه. إذا شغّلت سكربتاً يستخدمها على Bash 3.2، ستحصل على خطأ غامض. أضف فحصاً صريحاً في بداية أي سكربت يعتمد على هذه الميزة:
تثبيت Bash 4+ على macOS
brew install bash
بعد التثبيت يكون في /opt/homebrew/bin/bash (Apple Silicon) أو /usr/local/bin/bash (Intel). غيّر السطر الأول من سكربتاتك:
#!/usr/bin/env bash
env bash يختار أول bash في $PATH، وإذا أضفت مجلد Homebrew لأول $PATH (ما تفعله الإعدادات الافتراضية لـHomebrew)، ستُشغّل Bash 4+ تلقائياً.
للتحقق من الإصدار المستخدم فعلاً:
bash --version
عند المرور على المفاتيح، استخدم "${!map[@]}". الترتيب غير مضمون دائماً، لذلك لا تعتمد عليه لتقرير يحتاج ترتيباً ثابتاً إلا إذا رتبت المفاتيح.
مثال عملي
لاحظ أن قراءة القيمة تستخدم المفتاح: ${status[$service]}. اقتبس المفتاح إذا كان يأتي من متغير.
متى تكفي؟
إذا كانت الخريطة صغيرة وتعيش داخل السكربت، هذا مناسب. إذا كانت البيانات تتغير كثيراً أو تحتاج بحثاً وتحديثاً وحفظاً دائماً، استخدم ملفاً منظماً أو قاعدة بيانات.