Bash Scripting

إرجاع المصفوفات بكفاءة من دوال Bash

Spread the love

لا يدعم Bash بشكل مباشر إرجاع المصفوفات من الدوال. ومع ذلك، يمكننا تحقيق ذلك باستخدام تقنيات ذكية. تستعرض هذه المقالة طريقتين فعالتين: استخدام الاستبدال بالأوامر (command substitution) والتلاعب بفاصل الحقل الداخلي (IFS).

محتويات

استبدال الأوامر

يُلتقط استبدال الأوامر مُخرجات الأمر ويُعيّنها إلى متغير. وهذا يشكّل أساس طريقتنا الأولى. يكمن المفتاح في تنسيق مُخرجات الدالة لتسهيل تحليلها مرة أخرى إلى مصفوفة.

إرجاع المصفوفات باستخدام استبدال الأوامر

تنطوي هذه الطريقة على دمج عناصر المصفوفة في سلسلة نصية باستخدام فاصل، ثم تقسيم السلسلة مرة أخرى إلى مصفوفة. لنلقِ نظرة على مثال:


my_array_function() {
  local array=("apple" "banana" "cherry")
  local delimiter="|"
  echo "${array[*]}" | tr ' ' 'n' | paste -sd"$delimiter" -
}

returned_string=$(my_array_function)
returned_array=(${returned_string//|$delimiter/ })

echo "Returned array: ${returned_array[@]}"

إليك كيفية عملها:

  1. my_array_function تُنشئ مصفوفة محلية.
  2. تستخدم echo و tr لاستبدال المسافات بسطور جديدة و paste لربط العناصر بالفاصل.
  3. يُلتقط استبدال الأوامر المُخرجات في returned_string.
  4. يُستبدل توسيع المعلمة الفاصل بمسافات لإنشاء المصفوفة returned_array.

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

إرجاع المصفوفات باستخدام IFS

يتحكم فاصل الحقل الداخلي (IFS) في كيفية تقسيم Bash للسلاسل النصية إلى كلمات. يمكننا الاستفادة من هذا لإرجاع المصفوفات عن طريق تعيين IFS داخل الدالة وطباعة عناصر المصفوفة. يستخدم البرنامج النصي المُستدعي بعد ذلك IFS المُعدّل لتحليل المُخرجات.


my_array_function() {
  local array=("apple" "banana" "cherry")
  local old_ifs="$IFS"
  IFS=$'n'
  printf "%sn" "${array[@]}"
  IFS="$old_ifs"
}

returned_array=($(my_array_function))

echo "Returned array: ${returned_array[@]}"

شرح:

  1. my_array_function تحفظ IFS الحالي.
  2. تُعيّن IFS إلى حرف سطر جديد.
  3. تُطبع كل عنصر من عناصر المصفوفة في سطر جديد.
  4. تُعيد IFS إلى حالته السابقة.
  5. يستخدم البرنامج النصي المُستدعي سطرًا جديدًا كفاصل لإنشاء المصفوفة.

هذه الطريقة أنظف إذا لم تحتوي عناصر المصفوفة على أسطر جديدة. بالنسبة للعناصر التي تحتوي على أسطر جديدة، ستحتاج إلى اختيار حرف IFS مختلف، أقل احتمالية.

اختيار الطريقة الأنسب

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

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *