المتغيرات هي أماكن لتخزين البيانات. توفّر Bash نوعين من البيانات: السلاسل النصية والمصفوفات. وسنتحدث عن المصفوفات لاحقًا.
يمكنك إسناد قيمة إلى متغير بهذه الطريقة
name="value"
مهم: يجب ألّا تكون هناك أي مسافات حول علامة المساواة!
فعند وجود مسافات، كما في هذا المثال،
x = 10
ستستدعي bash الأمر x مع الوسيطين = و10!
يُطلق على المتغيرات أيضًا اسم المعاملات. وسنستخدم المصطلحين بالتبادل في هذا المستند.
من المعاملات المهمة التي تستخدمها bash أو تضبطها:
PATH -- قائمة من المجلدات مفصولة بنقطتين، تُستخدم للعثور على الأوامر الخارجية.IFS -- "فاصل الحقول الداخلي".
وسنرى كيف يُستخدم أدناه.PWD -- مجلد العمل الحالي لديك.
وستكون قيمته مطابقة لناتج الأمر pwd.RANDOM -- عدد صحيح شبه عشوائي بين 0 و32767.BASH_VERSION -- سلسلة نصية تحمل رقم إصدار النسخة العاملة من bash.يتكوّن اسم المتغير من أحرف كبيرة، وأحرف صغيرة، وأرقام، وشرطة سفلية. ولا يمكن أن يبدأ برقم.
يمكنك الحصول على قيمة معامل باستخدام الصيغة $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!"
هناك العديد من توسيعات المعاملات الأخرى المثيرة للاهتمام: استخراج سلسلة فرعية، والحصول على طول السلسلة النصية، و_إسناد_ قيمة افتراضية، وإزالة نص من بداية القيمة أو نهايتها، والمزيد. اقرأ عنها في الدليل.