المعاملات الموضعية
Positional Parameters
المعاملات الموضعية — Positional Parameters
المعاملات الموضعية هي القيم التي تمررها بعد اسم السكربت. إذا شغلت ./greet.sh Sara Bash، فالقيمة الأولى $1 هي Sara، والثانية $2 هي Bash. عدد المعاملات موجود في $#، وكل المعاملات موجودة في "$@".
لا تستخدم $* في السكربتات الجديدة إلا إذا كنت تعرف الفرق جيداً. "$*" يدمج كل المعاملات في نص واحد فاصله أول حرف في IFS (افتراضياً مسافة). هذا مفيد فقط في حالات نادرة مثل بناء سطر واحد للطباعة. الصيغة "$@" تحافظ على كل معامل كقيمة مستقلة، حتى لو كان يحتوي مسافة. هذا ينسجم مع قاعدة الاقتباس التي تعلمناها: حافظ على نية المستخدم كما كتبها.
عندما يكون المعامل اختيارياً، استخدم قيمة افتراضية مثل ${1:-guest}. وعندما يكون ضرورياً، لا تختر افتراضاً صامتاً. اطبع رسالة استخدام واخرج. الفرق بين الاختياري والضروري قرار تصميم، وليس تفصيلاً لغوياً.
مثال عملي
لو مررت اسماً يحتوي مسافة مثل "Sara Ali"، الاقتباس عند التشغيل والاقتباس داخل السكربت كلاهما مهم. المستخدم يقتبس القيمة في الطرفية، والسكربت يقتبسها عند الاستخدام.
استخدام “$@”
استخدم for arg in "$@"; do ... done عندما تريد المرور على كل المعاملات. لا تفقد الاقتباس. في أدوات CLI الصغيرة، هذه الصيغة تظهر كثيراً في أوامر مثل sum 1 2 3.
تحذير: $@ بدون اقتباس يتصرف مثل $* — يقسم كل معامل على مسافات. إذا مرر المستخدم "April Report" كمعامل واحد، $@ غير المقتبس يحوله إلى كلمتين April وReport. الاقتباس "$@" هو الوحيد الذي يحافظ على الحدود.