المسارات
/
Bash
Bash
/
المنهج
/
المتغيرات
ال

المتغيرات في Bash

{zero: "لا توجد تمارين", one: "1 تمرين", two: "تمرينان", few: "%{count} تمارين", many: "%{count} تمرينًا", other: "%{count} تمرين"}

نبذة عن المتغيرات

المتغيرات

المتغيرات هي أماكن لتخزين البيانات. توفّر Bash نوعين من البيانات: السلاسل النصية والمصفوفات. وسنتحدث عن المصفوفات لاحقًا.

يمكنك إسناد قيمة إلى متغير بهذه الطريقة

name="value"
Note

مهم: يجب ألّا تكون هناك أي مسافات حول علامة المساواة!

فعند وجود مسافات، كما في هذا المثال،

x = 10

ستستدعي bash الأمر x مع الوسيطين = و10!

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

من المعاملات المهمة التي تستخدمها bash أو تضبطها:

  • PATH -- قائمة من المجلدات مفصولة بنقطتين، تُستخدم للعثور على الأوامر الخارجية.
  • IFS -- "فاصل الحقول الداخلي". وسنرى كيف يُستخدم أدناه.
  • PWD -- مجلد العمل الحالي لديك. وستكون قيمته مطابقة لناتج الأمر pwd.
  • RANDOM -- عدد صحيح شبه عشوائي بين 0 و32767.
  • BASH_VERSION -- سلسلة نصية تحمل رقم إصدار النسخة العاملة من bash.

أسماء المتغيرات

يتكوّن اسم المتغير من أحرف كبيرة، وأحرف صغيرة، وأرقام، وشرطة سفلية. ولا يمكن أن يبدأ برقم.

Caution

من أفضل الممارسات تجنّب استخدام أسماء متغيرات بأحرف كبيرة كلها. فالصدَفة تستخدم هذا الاصطلاح لمعاملاتها، وأنت لا تريد أن تكتب فوق معاملات الصدَفة ذات المعنى الخاص عن غير قصد. على سبيل المثال: 1, 2, 3

توسيع المعاملات

يمكنك الحصول على قيمة معامل باستخدام الصيغة $varname.

x=10
echo "The value of x is $x"

ولمنع اختلاط اسم المتغير بالنص المحيط به، يمكنك أن تحيط اسم المتغير بالأقواس المعقوفة. على سبيل المثال، لطباعة السلسلة النصية 10x10

echo "${x}x$x"
# or
echo "${x}x${x}"

توصي بعض أدلة الأسلوب باستخدام الأقواس المعقوفة في معظم الحالات من أجل سهولة القراءة أو الاتساق.

المعاملات الموضعية

كما ناقشنا في درس الأوامر والوسائط، يمكن للأوامر أن تتلقى وسائط. وليس سكربتات Bash استثناءً من ذلك. تُسمّى الوسائط الممرّرة إلى النسخة الحالية من bash المعاملات الموضعية. ويمكن استرجاعها عبر هذه المعاملات الخاصة:

  • $1 -- المعامل الموضعي الأول
  • $2 ... $9 -- المعاملات التالية
  • ${10} ... -- الأعداد المكوّنة من رقمين تتطلب الأقواس المعقوفة.
  • $0 -- اسم السكربت الحالي.

والوسائط الممرّرة إلى دالة في الصدَفة هي أيضًا معاملات موضعية، وتُعالج بالطريقة نفسها. وسنرى المزيد عن الدوال في درس لاحق.

المعاملات الموضعية الخاصة

هناك بعض المعاملات الخاصة التي تساعدك في التعامل مع المعاملات الموضعية.

  • يتوسّع $# إلى عدد المعاملات الموضعية.
  • يتوسّع "$@" إلى قائمة بجميع المعاملات الموضعية، كل واحدة منها ككلمة منفصلة.
  • يتوسّع "$*" إلى سلسلة نصية واحدة تضم جميع المعاملات الموضعية مضمومة معًا بواسطة محرف.
    • ومحرف الضم هو المحرف الأول من المتغير $IFS، وهو مسافة افتراضيًا.

يُعدّ "$@" الطريقة الأكثر أمانًا لتمرير المعاملات الموضعية إلى أمر آخر مع الحفاظ على تنصيصها بشكل آمن. وهو أيضًا ما ستستخدمه للدوران على المعاملات الموضعية:

for arg in "$@"; do
    do_something_with "$arg"
done

عمليًا، يُستخدم "$@" أكثر من "$*".

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

من العمليات المتكررة جدًا في سكربتات bash أن تلتقط ناتج أمر ما وتخزّنه في متغير. وللقيام بذلك، ستستخدم استبدال الأوامر.

var=$(command)

على سبيل المثال، لتحويل سلسلة نصية إلى أحرف كبيرة، يمكنك فعل هذا:

text="Hello world!"
uppercase=$(echo "$text" | tr '[:lower:]' '[:upper:]')
echo "$uppercase"
# => HELLO WORLD!

المزيد عن توسيع المعاملات

يمتلك bash العديد من الأدوات المدمجة للتعامل مع المتغيرات والسلاسل النصية، بحيث لا تحتاج إلى استدعاء أوامر خارجية.

  • تحويل النص إلى أحرف كبيرة. في القسم السابق عرضت كيفية استخدام tr لتحويل نص إلى أحرف كبيرة. وللقيام بذلك في bash:

    echo "${text^^}"
    

    وبالمثل، يحوّل ${text,,} القيمة إلى أحرف صغيرة.

  • توفير قيمة افتراضية إذا كان المتغير فارغًا.

    default="nothing here"
    result=""
    echo "${result:-$default}"
    # => nothing here
    
  • البحث والاستبدال.

    text="Hello world!"
    echo "${text//[aeiou]/X}"
    # => HXllX wXrld!"
    

هناك العديد من توسيعات المعاملات الأخرى المثيرة للاهتمام: استخراج سلسلة فرعية، والحصول على طول السلسلة النصية، و_إسناد_ قيمة افتراضية، وإزالة نص من بداية القيمة أو نهايتها، والمزيد. اقرأ عنها في الدليل.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة