الفرق بين المراجعتين ل"Bash/types of variables"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(إدخال 1.0، عنوان الصفحة)
 
(إدخال 2.0 محتوى الصفحة والتصانيف والتنسيق)
سطر 1: سطر 1:
 
<noinclude>{{DISPLAYTITLE:أنواع المتغيرات في Bash}}</noinclude>
 
<noinclude>{{DISPLAYTITLE:أنواع المتغيرات في Bash}}</noinclude>
 +
 +
== التعيين العام للقيَم ==
 +
لم نركز كثيرًا في الشرح السابق لصدفة Bash على أنواع المتغيرات التي كنا نعيِّنها لأن Bash تستطيع التعامل مع أنواع متعددة من المتغيرات والمعامِلات، ونتيجة لذلك فإن متغيراتنا يمكنها احتواء أي نوع نختاره من البيانات، انظر المثال التالي للتوضيح:<syntaxhighlight lang="bash">
 +
[hsoub in ~] VARIABLE=12
 +
 +
[hsoub in ~] echo $VARIABLE
 +
12
 +
 +
[hsoub in ~] VARIABLE=string
 +
 +
[hsoub in ~] echo $VARIABLE
 +
string
 +
 +
</syntaxhighlight>وستكون حالات تريد فيها تجنب هذا السلوك من المثال السابق حين تتعامل مع أرقام الهواتف وغيرها مثلًا، وقد تحتاج أن تحدد متغيرًا ثابتًا (Constant Variable) -بعيدًا عن الأرقام والمتغيرات- إذ يتم ذلك غالبًا في أول البرنامج حين يُصرَّح عن قيمة الثابت، أما في بقية البرنامج فيشار فقط إلى اسم المتغير الثابت فلا تحتاج عندئذ إلى تغيير الثابت عند الحاجة إلى تغييره إلا مرة واحدة فقط. كذلك قد يكون المتغير أيضًا سلسلة من المتغيرات من اي نوع، ويُطلق عليه حينها مصفوفة متغيرات (<code>VAR0</code>, <code>VAR1</code>, <code>VAR2</code>, ... , <code>VARN</code>).
 +
 +
== استخدام أمر declare المُضمَّن ==
 +
لتقييد تعيين  القييّم إلى المتغيرات فإننا نستخدم أمر <code>declare</code> من أجل التصريح عن نوع تلك القيمة، والبنية اللغوية لهذا الأمر كالتالي:<syntaxhighlight lang="bash">
 +
declare OPTION(s) VARIABLE=value
 +
</syntaxhighlight>تُستخدم الخيارات التالية لتحديد نوع البيانات التي يُسمح للمتغير بحملها ولتعيين خواصه (attributes):
 +
{| class="wikitable"
 +
!الخيار
 +
!المعنى
 +
|-
 +
|<code>a-</code>
 +
|هذا الخيار يعني أن المتغير سيكون مصفوفة.
 +
|-
 +
|<code>f-</code>
 +
|استخدم أسماء الدوال فقط
 +
|-
 +
|<code>i-</code>
 +
|يُعامل المتغير على أنه عدد صحيح، ويُجرى التقييم الحسابي حين تُعيَّن قيمة للمتغير (انظر [[Bash/shell expansion#.D8.A7.D9.84.D8.AA.D9.88.D8.B3.D8.B9 .D8.A7.D9.84.D8.AD.D8.B3.D8.A7.D8.A8.D9.8A|التوسع الحسابي]] في فصل التوسعات في Bash).
 +
|-
 +
|<code>p-</code>
 +
|اعرض الخواص والقيَم لكل متغير، ويتم تجاهل أي خيار آخر إن استُخدم خيار <code>p-</code>.
 +
|-
 +
|<code>r-</code>
 +
|يجعل المتغيرات للقراءة فقط، فلا يمكن تعيين قيم لها بعبارات التعيين التالية لها ولا يمكن  إلغاء ضبطها كذلك.
 +
|-
 +
|<code>t-</code>
 +
|يعطي خاصية <code>trace</code>  لكل متغير.
 +
|-
 +
|<code>x-</code>
 +
|يحدد كل متغير من أجل التصدير إلى الأوامر التالية له من خلال البيئة.
 +
|}
 +
استخدام <code>+</code> بدلًا من <code>-</code> يوقف الخاصية المرفقة، وحين تُستخدم في دالة فإن أمر <code>declare</code> ينشئ متغيرات محلية (local variables)، انظر المثال التالي الذي يوضح كيف يؤثر تعيين نوع ما لمتغير في قيمته:<syntaxhighlight lang="bash">
 +
[hsoub in ~] declare -i VARIABLE=12
 +
 +
[hsoub in ~] VARIABLE=string
 +
 +
[hsoub in ~] echo $VARIABLE
 +
0
 +
 +
[hsoub in ~] declare -p VARIABLE
 +
declare -i VARIABLE="0"
 +
</syntaxhighlight>لاحظ أن Bash لديها خيار للتصريح عن قيمة عددية ولكن ليس لديها واحد للتصريح عن قيمة نصية، ذلك أن المتغير يمكنه احتواء أي نوع من البيانات افتراضيًا إن لم يُصرَّح خلاف ذلك:<syntaxhighlight lang="bash">
 +
[hsoub in ~] OTHERVAR=blah
 +
 +
[hsoub in ~] declare -p OTHERVAR
 +
declare -- OTHERVAR="blah"
 +
</syntaxhighlight>وبمجرد أن تقيد تعيين القيم إلى متغير ما فلن يحمل سوى ذلك النوع من البيانات، وتكون القيود التي يمكنك وضعها على نوع البيانات إما عددية أو نصية أو مصفوفة. انظر صفحات دليل <code>info</code> لمزيد من المعلومات عن حالة الإعادة (return status).
 +
 +
== الثوابت ==
 +
تُنشأ الثوابت في Bash بجعل المتغير للقراءة فقط، ويتم هذا بأمر <code>readonly</code> من خلال البنية اللغوية التالية:<syntaxhighlight lang="bash">
 +
readonly OPTION VARIABLE(s)
 +
 +
 +
</syntaxhighlight>ولا يمكن تغيير قيم تلك المتغيرات بعد ذلك، وإن أضيف وسيط <code>f-</code> فيشير كل متغير إلى دالة للصدفة، انظر [[Bash/functions|الدوال في Bash]]، أما إن أضيف وسيط <code>a-</code> فسيشير كل متغير إلى مصفوفة من المتغيرات، وإن لم تُضف أية وسائط أو أضيف وسيط <code>p-</code> فستُعرض قائمة بكل المتغيرات التي للقراءة فقط. كذلك يُستخدم خيار <code>p-</code> لإعادة استخدام الخرج ليكون مُدخلًا.
 +
 +
وحالة الإعادة تكون صفرًا إلا إن حُدِّد خيار غير صحيح، أو كان أحد المتغيرات أو الدوال غير موجود، أو أضيف وسيط <code>f-</code> لاسم متغير بدلًا من اسم دالة.<syntaxhighlight lang="bash">
 +
[hsoub in ~] readonly TUX=penguinpower
 +
 +
[hsoub in ~] TUX=Mickeysoft
 +
bash: TUX: readonly variable
 +
</syntaxhighlight>
 +
 +
== انظر أيضًا ==
 +
* [[Bash/signals|الإشارات في Bash]].
 +
* [[Bash/traps|الأفخاخ في Bash]].
 +
 +
== مصادر ==
 +
* <span> </span>[http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_10_01.html دليل Bash للمبتدئين، باب المزيد حول المتغيرات في Bash، فصل أنواع المتغيرات في Bash].
 +
[[تصنيف:Bash]]
 +
[[تصنيف:Bash Types Of Variables]]

مراجعة 12:49، 30 أغسطس 2018


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

لم نركز كثيرًا في الشرح السابق لصدفة 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

انظر أيضًا

مصادر