مهمة
على الرغم من أن استخداماته قد لا تكون واضحة على الفور ، إلا أن التعبيرات الحسابية قد تؤدي مهمة. لقد قمنا بمهمة عدة مرات ، وإن كان ذلك في سياق مختلف. في كل مرة نعطي متغيرًا قيمة ، فإننا نقوم بالتخصيص. يمكننا أيضًا القيام بذلك ضمن التعبيرات الحسابية:
[me @ linuxbox ~] $ فو =
[me @ linuxbox ~] $ صدى $ فو
[me @ linuxbox ~] $ إذا ((foo = 5)) ؛ ثم صدى "هذا صحيح" ؛ فاي
هذا صحيح.
[me @ linuxbox ~] $ صدى $ فو
5
[me @ linuxbox ~] $ فو =
[me @ linuxbox ~] $ صدى $ فو
[me @ linuxbox ~] $ إذا ((foo = 5)) ؛ ثم صدى "هذا صحيح" ؛ فاي
هذا صحيح.
[me @ linuxbox ~] $ صدى $ فو
5
في المثال أعلاه ، نقوم أولاً بتعيين قيمة فارغة للمتغير فو وتحقق من أنه فارغ بالفعل. بعد ذلك ، نقوم بإجراء if مع الأمر المركب ((foo = 5
)). تقوم هذه العملية بأمرين مهمين: 1) تعين قيمة 5 للمتغير
foo ، و 2) يتم تقييمه إلى true لأنه تم تعيين قيمة غير صفرية لـ foo.
ملحوظة: من المهم أن تتذكر المعنى الدقيق لملف = في التعبير أعلاه. واحد = ينفذ مهمة. فو = 5 يقول "اصنع فو يساوي 5 "بينما == يقيم التكافؤ. فو == 5 يقول "لا فو يساوي 5؟ " هذه ميزة شائعة في العديد من لغات البرمجة. في الغلاف ، قد يكون هذا مربكًا بعض الشيء لأن ملف تجربه بالعربي الأمر يقبل ملف = لتكافؤ السلسلة. سبب آخر لاستخدام أكثر حداثة [[]] و (()) أوامر مركبة بدلاً من تجربه بالعربي.
بالإضافة إلى =, توفر القشرة أيضًا رموزًا تؤدي بعض الإشارات المفيدة جدًا:
الجدول 34-4: عوامل التخصيص
وصف التدوين
وصف التدوين
المعلمة = قيمنا مهمة بسيطة. يعيّن قيمنا إلى المعلمة.
المعلمة += قيمنا إضافة. أي ما يعادل المعلمة = المعلمة +
.
المعلمة -= قيمنا الطرح. أي ما يعادل المعلمة = المعلمة -
.
المعلمة *= قيمنا عمليه الضرب. أي ما يعادل المعلمة = المعلمة
* .
المعلمة /= قيمنا تقسيم صحيح. أي ما يعادل المعلمة =
المعلمة / القيمة.
المعلمة %= قيمنا مودولو. أي ما يعادل المعلمة = المعلمة %
.
المعلمة++ المتغير اللاحق الزيادة. أي ما يعادل المعلمة =
المعلمة + 1 (مع ذلك ، انظر المناقشة أدناه).
المعلمة−− متغير بعد التناقص. أي ما يعادل المعلمة =
المعلمة - 1.
++المعلمة الزيادة المسبقة المتغيرة. أي ما يعادل المعلمة =
المعلمة + 1.
--المعلمة إنقاص متغير. أي ما يعادل المعلمة =
المعلمة - 1.
توفر عوامل التخصيص هذه اختصارًا مناسبًا للعديد من المهام الحسابية الشائعة. الفائدة الخاصة هي الزيادة (++) وإنقاص (-−) العوامل التي تزيد أو تنقص قيمة معلماتها بمقدار واحد. هذا النمط من التدوين مأخوذ من لغة البرمجة C وقد تم دمجه في عدد من لغات البرمجة الأخرى ، بما في ذلك سحق.
قد تظهر العوامل إما في مقدمة المعلمة أو في نهايتها. بينما يعمل كلاهما إما على زيادة المعلمة أو إنقاصها بمقدار واحد ، إلا أن هناك فرقًا بسيطًا بين الموضعين. إذا تم وضعه في مقدمة المعلمة ، تتم زيادة المعلمة (أو إنقاصها) قبل إرجاع المعلمة. إذا وضعت بعد ذلك ، يتم إجراء العملية بعد يتم إرجاع المعلمة. هذا غريب نوعا ما ، لكنه السلوك المقصود. هنا عرض توضيحي:
[me @ linuxbox ~] $ فو = 1 [me @ linuxbox ~] $ صدى $ ((foo ++)) 1
[me @ linuxbox ~] $ صدى $ فو
[me @ linuxbox ~] $ فو = 1 [me @ linuxbox ~] $ صدى $ ((foo ++)) 1
[me @ linuxbox ~] $ صدى $ فو
2
2
إذا قمنا بتعيين قيمة واحد إلى المتغير فو ثم زيادته بامتداد ++ المشغل موضوع بعد اسم المعلمة ، فو يتم إرجاعه بقيمة واحد. ومع ذلك ، إذا نظرنا إلى قيمة المتغير مرة ثانية ، فسنرى القيمة المتزايدة. إذا وضعنا ملف ++ عامل التشغيل أمام المعلمة ، نحصل على السلوك الأكثر توقعًا:
[me @ linuxbox ~] $ فو = 1 [me @ linuxbox ~] $ صدى $ ((++ foo)) 2
[me @ linuxbox ~] $ صدى $ فو
2
[me @ linuxbox ~] $ فو = 1 [me @ linuxbox ~] $ صدى $ ((++ foo)) 2
[me @ linuxbox ~] $ صدى $ فو
2
بالنسبة لمعظم تطبيقات الصدفة ، فإن إضافة عامل التشغيل مسبقًا سيكون أكثر فائدة.
غالبًا ما يتم استخدام عوامل التشغيل ++ و - جنبًا إلى جنب مع الحلقات. سنقوم ببعض التحسينات على البرنامج النصي modulo الخاص بنا لتشديده قليلاً:
#! / بن / باش
# modulo2: شرح عامل modulo لـ ((i = 0؛ i <= 20؛ ++ أنا )) ؛ فعل
لو (((أنا٪ 5) == 0)) ؛ ثم اطبع "<٪ d>" $ i
آخر
printf "٪ d" $ i
انتهى فاي
printf "\ n"
#! / بن / باش
# modulo2: شرح عامل modulo لـ ((i = 0؛ i <= 20؛ ++ أنا )) ؛ فعل
لو (((أنا٪ 5) == 0)) ؛ ثم اطبع "<٪ d>" $ i
آخر
printf "٪ d" $ i
انتهى فاي
printf "\ n"