استبدال الأوامر
في مجال الحوسبة ، يُعدّ استبدال الأوامر ميزةً تسمح بتنفيذ أمرٍ ما ولصق مخرجاته في سطر الأوامر كوسيطاتٍ لأمرٍ آخر. ظهرت هذه الميزة لأول مرة في Bourne shell [ 1 ] ، الذي طُرح مع الإصدار السابع من نظام يونكس عام 1979، وظلت سمةً مميزةً لجميع واجهات يونكس اللاحقة . ومنذ ذلك الحين، اعتُمدت هذه الميزة في لغات برمجة أخرى أيضًا، بما في ذلك Perl و PHP و Ruby و Powershell من مايكروسوفت في نظام ويندوز . كما تظهر أيضًا في CMD.EXE من مايكروسوفت في FORالأمرَين ( )`.
بناء الجملة والدلالات
تُنفّذ الصدف عادةً استبدال الأوامر بإنشاء عملية فرعية لتشغيل الأمر الأول، مع إعادة توجيه مخرجاتها القياسية إلى الصدفة، التي تقرأ تلك المخرجات وتحللها إلى كلمات مفصولة بمسافات بيضاء . ولأن الصدفة لا تستطيع معرفة أنها حصلت على جميع مخرجات العملية الفرعية إلا بعد إغلاق قناة الاتصال أو توقف العملية الفرعية، فإنها تنتظر حتى ذلك الحين قبل بدء عملية فرعية أخرى لتشغيل الأمر الثاني.
يوضح هذا المثال في بيئة C shell كيفية البحث عن جميع ملفات C التي تحتوي على السلسلة النصيةmalloc باستخدام الأمر `c` fgrep، ثم تعديل أي منها باستخدام viالمحرر. الصيغة النحوية الموضحة هنا، ` ... ، باستخدام علامات الاقتباس الخلفية كفواصل ، هي الصيغة الأصلية وتدعمها جميع بيئات Unix shell الشائعة. `
#!/bin/csh vi ` fgrep -l malloc *.c `وقد أثيرت اعتراضات على كل من بناء الجملة ، وكيفية كتابتها، وعلى دلالاتها ، وكيفية عملها.
على الرغم من سهولة كتابة هذا الأسلوب، وهو عامل مهم لمعالج الأوامر التفاعلي، إلا أنه وُجهت إليه انتقاداتٌ لكونه غير عملي عند دمج الأوامر، حيث يتم وضع استبدال أمر داخل آخر، لأن المحددات اليمنى واليسرى متطابقة. [2] وقد حلّت KornShell ( ksh ) [ 3 ] هذه المشكلة باستخدام صيغة بديلة، ... ، مستوحاة من أسلوب كتابة استبدال المتغيرات . واليوم، تدعم معظم أنظمة UNIX هذه الصيغة. كما يستخدم PowerShell من مايكروسوفت هذه الصيغة بنفس الدلالات.$( )
#!/bin/bash vi $( fgrep -l malloc *.c )تعرضت دلالات الأمر، التي تقسم الناتج إلى كلمات عند المسافات البيضاء، لانتقادات أيضًا. فقد كان يعمل بكفاءة على أنظمة يونكس القديمة حيث لم تكن أسماء الملفات تحتوي على مسافات ، ولكنه لا يعمل بكفاءة على أنظمة ويندوز ولينكس الحديثة حيث يمكن أن تحتوي أسماء الملفات على مسافات. [ 4 ] في أي من المثالين السابقين، إذا احتوى أي من أسماء الملفات المطابقة للرمز العام على مسافة، فسيتم تقسيم اسم الملف إلى وسيطين منفصلين ، وهو ما لم يكن المقصود. وقد حلّت صدفة هاميلتون سي هذه المشكلة باستخدام ترميز علامات الاقتباس المزدوجة، ... ، الذي يحلل إلى كلمات فقط عند فواصل الأسطر. [ 5 ]*.cvi`` ``
هذا مثال على استبدال الأوامر باستخدام ()عامل التشغيل في PowerShell :
$MyVariable = ( ls ) echo $MyVariableاستبدال التعبير
توجد خاصية مشابهة، وهي استبدال التعبيرات، في لغتي Common Lisp و Scheme ، ويتم استدعاؤها باستخدام عامل الفاصلة-at في تعبير مُعلَّم بعلامة اقتباس معكوسة (أو "شبه اقتباس"). وفي لغة ABC ، يتم ذلك باستخدام تعبير مُحاط بعلامتي اقتباس معكوسة داخل نص معروض ( سلسلة نصية حرفية ). على سبيل المثال، يُنتج الأمر ABC WRITE '2 + 2 = `2+2`'المخرجات التالية 2 + 2 = 4:
انظر أيضاً
مراجع
- ↑ دحداح، هوارد. "دليل لغات البرمجة: بورن شيل، أو sh، مقابلة متعمقة مع ستيف بورن، مبتكر بورن شيل، أو sh" مؤرشفة في 17 مارس 2010 في Wayback Machine ، Computerworld ، 5 مارس 2009.
- ↑ "أدوات يونكس المتقدمة: 45.31 استبدال الأوامر المتداخلة" . مؤرشف من الأصل بتاريخ 12-05-2023 . تم الاطلاع عليه بتاريخ 17-03-2010 .
- ↑ روزنبلات، بيل؛ أرنولد روبنز (2002). تعلم كورن شل ( الطبعة الثانية). أورايلي ميديا، إنك. ص 127. ISBN 978-0-596-00195-7أُرشف من الأصل بتاريخ 22-05-2024 . تم الاطلاع عليه بتاريخ 20-07-2010 . صيغة
استبدال الأوامر هي:
يُنفذ الأمر الموجود داخل القوسين، وأي شيء يكتبه الأمر إلى المخرج القياسي (وإلى الخطأ القياسي) يُعاد كقيمة للتعبير.
$(Unix command) - ↑ جونسون، كريس (2009)، "8"، برمجة باش الاحترافية: كتابة البرامج النصية لصدفة لينكس ، نيويورك، نيويورك: سبرينغر-فيرلاغ نيويورك، ص 84، ISBN 9781430219989مؤرشف من الأصل في 22 مايو 2024 ، تم استرجاعه في 19 ديسمبر 2014.
أسماء الملفات التي تحتوي على مسافات تُعدّ أمرًا غير مقبول، لكنها شائعة جدًا هذه الأيام لدرجة أن البرامج النصية يجب أن تأخذ احتمالية وجودها (أو بالأحرى حتميتها؟) في الحسبان. ... نتيجة استبدال الأوامر تخضع لتقسيم الكلمات.
- ↑ دليل مستخدم هاميلتون سي شيل: إعادة توجيه الإدخال/الإخراج: استبدال الأوامر ، مختبرات هاميلتون، مؤرشف من الأصل في 19 ديسمبر 2014 ، تم استرجاعه في 19 ديسمبر 2014
- مواضيع لغات البرمجة
- أدوات برمجة يونكس
