AzLearn

الخرائط Associative Arrays

Associative Arrays

مفهوم ~18 دقيقة

الخرائط — 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، ستحصل على خطأ غامض. أضف فحصاً صريحاً في بداية أي سكربت يعتمد على هذه الميزة:

script.sh

تثبيت 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[@]}". الترتيب غير مضمون دائماً، لذلك لا تعتمد عليه لتقرير يحتاج ترتيباً ثابتاً إلا إذا رتبت المفاتيح.

مثال عملي

script.sh

لاحظ أن قراءة القيمة تستخدم المفتاح: ${status[$service]}. اقتبس المفتاح إذا كان يأتي من متغير.

متى تكفي؟

إذا كانت الخريطة صغيرة وتعيش داخل السكربت، هذا مناسب. إذا كانت البيانات تتغير كثيراً أو تحتاج بحثاً وتحديثاً وحفظاً دائماً، استخدم ملفاً منظماً أو قاعدة بيانات.

تحدي — Challenge