أنواع المتغيرات في Bash

من موسوعة حسوب

التعيين العام للقيَم

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

[hsoub in ~] VARIABLE=12

[hsoub in ~] echo $VARIABLE
12

[hsoub in ~] VARIABLE=string

[hsoub in ~] echo $VARIABLE
string

وستكون حالات تريد فيها تجنب هذا السلوك من المثال السابق حين تتعامل مع أرقام الهواتف وغيرها مثلًا، وقد تحتاج أن تحدد متغيرًا ثابتًا (Constant Variable) -بعيدًا عن الأرقام والمتغيرات- إذ يتم ذلك غالبًا في أول البرنامج حين يُصرَّح عن قيمة الثابت، أما في بقية البرنامج فيشار فقط إلى اسم المتغير الثابت فلا تحتاج عندئذ إلى تغيير الثابت عند الحاجة إلى تغييره إلا مرة واحدة فقط. كذلك قد يكون المتغير أيضًا سلسلة من المتغيرات من اي نوع، ويُطلق عليه حينها مصفوفة متغيرات (VAR0, VAR1, VAR2, ... , VARN).

استخدام أمر declare المُضمَّن

لتقييد تعيين القييّم إلى المتغيرات فإننا نستخدم أمر declare من أجل التصريح عن نوع تلك القيمة، والبنية اللغوية لهذا الأمر كالتالي:

declare OPTION(s) VARIABLE=value

تُستخدم الخيارات التالية لتحديد نوع البيانات التي يُسمح للمتغير بحملها ولتعيين خواصه (attributes):

الخيار المعنى
a- هذا الخيار يعني أن المتغير سيكون مصفوفة.
f- استخدم أسماء الدوال فقط
i- يُعامل المتغير على أنه عدد صحيح، ويُجرى التقييم الحسابي حين تُعيَّن قيمة للمتغير (انظر التوسع الحسابي في فصل التوسعات في Bash).
p- اعرض الخواص والقيَم لكل متغير، ويتم تجاهل أي خيار آخر إن استُخدم خيار p-.
r- يجعل المتغيرات للقراءة فقط، فلا يمكن تعيين قيم لها بعبارات التعيين التالية لها ولا يمكن إلغاء ضبطها كذلك.
t- يعطي خاصية trace لكل متغير.
x- يحدد كل متغير من أجل التصدير إلى الأوامر التالية له من خلال البيئة.

استخدام + بدلًا من - يوقف الخاصية المرفقة، وحين تُستخدم في دالة فإن أمر declare ينشئ متغيرات محلية (local variables)، انظر المثال التالي الذي يوضح كيف يؤثر تعيين نوع ما لمتغير في قيمته:

[hsoub in ~] declare -i VARIABLE=12

[hsoub in ~] VARIABLE=string

[hsoub in ~] echo $VARIABLE
0

[hsoub in ~] declare -p VARIABLE
declare -i VARIABLE="0"

لاحظ أن Bash لديها خيار للتصريح عن قيمة عددية ولكن ليس لديها واحد للتصريح عن قيمة نصية، ذلك أن المتغير يمكنه احتواء أي نوع من البيانات افتراضيًا إن لم يُصرَّح خلاف ذلك:

[hsoub in ~] OTHERVAR=blah

[hsoub in ~] declare -p OTHERVAR
declare -- OTHERVAR="blah"

وبمجرد أن تقيد تعيين القيم إلى متغير ما فلن يحمل سوى ذلك النوع من البيانات، وتكون القيود التي يمكنك وضعها على نوع البيانات إما عددية أو نصية أو مصفوفة. انظر صفحات دليل info لمزيد من المعلومات عن حالة الإعادة (return status).

الثوابت

تُنشأ الثوابت في Bash بجعل المتغير للقراءة فقط، ويتم هذا بأمر readonly من خلال البنية اللغوية التالية:

readonly OPTION VARIABLE(s)

ولا يمكن تغيير قيم تلك المتغيرات بعد ذلك، وإن أضيف وسيط f- فيشير كل متغير إلى دالة للصدفة، انظر الدوال في Bash، أما إن أضيف وسيط a- فسيشير كل متغير إلى مصفوفة من المتغيرات، وإن لم تُضف أية وسائط أو أضيف وسيط p- فستُعرض قائمة بكل المتغيرات التي للقراءة فقط. كذلك يُستخدم خيار p- لإعادة استخدام الخرج ليكون مُدخلًا. وحالة الإعادة تكون صفرًا إلا إن حُدِّد خيار غير صحيح، أو كان أحد المتغيرات أو الدوال غير موجود، أو أضيف وسيط f- لاسم متغير بدلًا من اسم دالة.

[hsoub in ~] readonly TUX=penguinpower

[hsoub in ~] TUX=Mickeysoft
bash: TUX: readonly variable

انظر أيضًا

مصادر