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

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

حفظ حدود الوسائط بالاقتباس

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

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

أهداف الدرس

  • تمييز المفرد والمزدوج والهروب.
  • شرح التوسعة غير المقتبسة وتقسيم IFS.
  • اختيار سلوك مقصود للأنماط دون تطابق.

يتحكم الاقتباس في تفسير المصدر

تحفظ المفردة المحتوى حرفياً ولا تستوعب مفردة داخل المنطقة نفسها مباشرة. تسمح المزدوجة بالتوسعة والاستبدال وبعض الهروب وتمنع تقسيم النتائج وأنماطها المعتادين. تهرب الشرطة الخلفية محرفاً خارج الاقتباس. ليست درجات زينة واحدة. استخدم المفرد للحرفي والمزدوج لقيمة تتوسع وتبقى وسيطاً. تزول قواعد الاقتباس قبل وصول الوسائط للبرنامج.

قد تصبح التوسعة غير المقتبسة كلمات متعددة

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

bash ملاحظة أعداد الوسائط دون ملفات
value='red apple'
set -- $value
printf 'unquoted=%s\n' "$#"
set -- "$value"
printf 'quoted=%s first=<%s>\n' "$#" "$1"
الناتج المتوقع
unquoted=2
quoted=1 first=<red apple>

يوضح غير المقتبس التقسيم عمداً. يقدم المقتبس وسيطاً يحوي المسافة دون تأثير أوامر خارجية أو ملفات.

النمط النجمي استعلام ملفات

تنتقي النجمة والاستفهام والأقواس غير المقتبسة مسارات. يأتي ذلك بعد التقسيم فيتحول متغير نجمي لأسماء كثيرة. يجعله الاقتباس بيانات. يغير nullglob وfailglob غياب التطابق ويترك الافتراضي النمط حرفياً عادة. للمخفي قواعد وخيارات. اختر سياسة للحلقة وحد نطاق التغيير كي لا يغير المساعد توسعة المستدعي.

استخدام المصفوفات لقائمة وسائط

يحفظ المفرد سلسلة لا ترميزاً موثوقاً للوسائط. تحفظ مصفوفة Bash عنصراً لكل وسيط بما فيه الفراغ والمسافات، وتقدم "${args[@]}" العناصر منفصلة. يغير الجمع العقد ويعيد غير المقتبس التقسيم والأنماط. المصفوفة امتداد Bash وللمحمول تصميم آخر كالمواضع. افصل اسم الأمر عن البيانات وتجنب eval لإصلاح قائمة خاطئة.

bash حفظ المسافات والفراغ والنجمة الحرفية
args=('red apple' '' '*')
printf 'count=%s\n' "${#args[@]}"
printf '<%s>\n' "${args[@]}"
الناتج المتوقع
count=3
<red apple>
<>
<*>

تحوي المصفوفة ثلاثة عناصر، وتبقى النجمة حرفية والفراغ وسيطاً باستخدام @ المقتبس.

الاقتباس ومعالجة الخيارات دفاعان مختلفان

يبقى المقتبس البادئ بشرطة وسيطاً واحداً قد يفسره البرنامج خياراً. استخدم -- الموثقة أو ./-name عند الملاءمة ولا تعمم على الأدوات. لا يتحقق الاقتباس من الوجهة أو يقيد المسار أو يوثق الإدخال؛ بل يحفظ الحدود لطبقة تالية. راجع التوسعة وواجهة البرنامج قبل الحكم.

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

تحول القيمة لوسائط عدة

لماذا يحدث؟
تُركت التوسعة دون اقتباس.
كيف تصلحه؟
استخدم "$value" للمفرد ومصفوفة مقتبسة للقائمة.
كيف تتجنب تكراره؟
اختبر المسافات والفارغ والأنماط.

اختيار النجمة الحرفية ملفات

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

توقع منع اقتباس لحقن الخيارات

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

اختبر فهمك

1. كم وسيطاً تنتج مصفوفة ثلاثية بوسط فارغ؟

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

تنتج "${items[@]}" ثلاثة وتحفظ الفراغ. يغير المفرد المجمع أو غير المقتبس العدد. افحص $# في الدالة المتلقية لا سطر عرض زخرفياً.

2. لماذا لا يكفي "$path" إذا فسرت الأداة -x خياراً؟

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

يحفظ الاقتباس الوسيط ولا يغير محلل الخيارات. أضف -- المدعومة أو مساراً صريحاً وافحص نطاقه مستقلاً.

أهم ما تعلمته

  • احفظ القيم والقوائم بصيغتها المقتبسة.
  • اختر الأنماط والخيارات عمداً.

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