محتويات الدورة

Bash / الأساسي: القواعد والقيم والتحكم / الدرس 5

بناء دوال بحدود حالة واضحة

حدد عقود الوسائط والخرج والحالة للدوال دون خلط الاستدعاء بالمصدر والتنفيذ الابن.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • تمرير المواضع دون جمعها.
  • استخدام local مع فهم النطاق الديناميكي.
  • تمييز return وexit والمصدر والبرنامج التنفيذي.

للدالة نتائج مرئية متعددة

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

تتلقى الدوال قائمة مواضعها

تصف المواضع داخل الدالة وسائطها. مرر "$@" للقائمة نفسها وافحص العدد قبل shift. اختبر بوسائط صريحة دون ترتيب عام للمستدعي. لا تجمع متعدد القيم بمفرد مسافاتي. عرف قواعد الأعلام وارفض الزائد. تكشف دالة متلقية صغيرة العدد الدقيق.

bash تمرير وسيطين أحدهما فارغ
describe() {
  printf 'count=%s\n' "$#"
  printf '<%s>\n' "$@"
}
forward() { describe "$@"; }
forward 'red apple' ''
الناتج المتوقع
count=2
<red apple>
<>

تتلقى كل دالة قائمتها ويحفظ التمرير المقتبس المسافة والفراغ دون سلسلة أمر مجمعة.

تقلل المتغيرات المحلية التعديل العرضي

local ميزة Bash لا ضمان sh. نطاقها ديناميكي؛ ترى المدعوة محلي المستدعي إلا بحجب. يفاجئ ذلك افتراض النطاق اللفظي. استخدم أسماء مميزة ووسائط لا اعتماداً خفياً. افصل إعلان local عن استبدال الأمر إذا همت حالته لأن المضمن قد يخفيها. وتشمل الحالة الخيارات والمجلد والفخاخ والواصفات؛ لا يعزل local الدالة كلها.

اختيار التعديل المقصود أو العزل

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

bash ملاحظة المحلي والمستدعي
value=outer
change() { local value=inner; printf 'inside=%s\n' "$value"; }
change
printf 'outside=%s\n' "$value"
الناتج المتوقع
inside=inner
outside=outer

تزول الرابطة المحلية بالعودة وتبقى الخارجية. لا يعتمد المثال على مساعد آخر يقرأ النطاق الديناميكي.

ينفذ المصدر في المستدعي

يطلق bash library.sh صدفة ويقرأ source أو . الشيفرة بالحالية. قد يغير المصدر المتغيرات والخيارات والمجلد والفخاخ؛ هو تنفيذ موثوق لا تحميل بيانات. تجنب exit والعمل المفاجئ عند الاستيراد. استخدم return المناسب واجعل exit لحد البرنامج المستقل. عرف المصدر واختبر التكرار إن دعمته ولا تصدر ملفاً غير موثوق أو تكشف الأسرار بالتتبع.

الأخطاء الشائعة وإصلاحها

إفساد رسالة لقيمة معادة

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

إخفاء إعلان local فشل الاستبدال

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

إنهاء المصدر للمستدعي

لماذا يحدث؟
استخدمت المكتبة exit بلا شرط.
كيف تصلحه؟
استخدم return وافصل حد الواجهة.
كيف تتجنب تكراره؟
عامل الاستيراد جزءاً من الواجهة.

اختبر فهمك

1. يحسب مساعد نصاً دون تغيير المستدعي. ما الحد المناسب؟

اعرض الحل المشروح

استخدم استدعاء معزولاً والتقط نصه مع مراعاة إزالة الأسطر والحالة. افصل التشخيص؛ وإذا لزم تعديل الحالة فلا يناسب الالتقاط العادي.

2. لماذا لا يُعامل الإعداد المصدَر كبيانات خاملة؟

اعرض الحل المشروح

تنفذه الصدفة بسلطة وحالة المستدعي وقد يشغل أوامر ويغير الفخاخ. استخدم محلل بيانات لغير الموثوق ووثق آثار المكتبة الموثوقة.

أهم ما تعلمته

  • افصل البيانات والحالة والتشخيص والتعديل.
  • استخدم وسائط وحدود وحدات مقصودة.

المراجع الرسمية