كيفية استخدام الأمر Echo على Linux

النقاط الرئيسية

  • Echo هو أمر حيوي يسمح لنا بالحصول على إخراج مرئي من نصوص shell ويمكن أن يتضمن متغيرات وأسماء ملفات وأدلة.
  • هناك نسختان من echo: واحدة مدمجة في غلاف Bash ونسخة قابلة للتنفيذ الثنائي.
  • يمكن استخدام Echo لكتابة نص في نافذة المحطة الطرفية، واستخدام المتغيرات للحصول على إخراج ديناميكي، ودمج إخراج الأوامر، وتنسيق النص باستخدام أحرف عكسية مائلة، وقائمة الملفات والدلائل، والكتابة إلى الملفات.



ال echo يعد الأمر مثاليًا لكتابة نص منسق في نافذة المحطة الطرفية. ولا يلزم أن يكون نصًا ثابتًا. يمكن أن يتضمن متغيرات shell وأسماء الملفات والدلائل. يمكنك أيضًا إعادة توجيه echo لإنشاء ملفات نصية وملفات سجل. اتبع هذا الدليل البسيط لمعرفة كيفية القيام بذلك.


ماذا يفعل إيكو؟

صدى يكرر ما لقد قيل أن يتكررإنها وظيفة بسيطة، ولكنها حيوية. بدون echo ، لن نتمكن من الحصول على إخراج مرئي من نصوص shell، على سبيل المثال.

على الرغم من عدم تحميلها بالعديد من الأجراس والصفارات، إلا أن هناك فرصة جيدة لذلك echo لديه بعض القدرات التي لم تكن تعرف عنها أو نسيتها.

هناك نسختان من صدى الصوت

توفر معظم أنظمة Linux نسختين من echo. ال شل باش لديه خاصته echo مُضمن فيه، وهناك إصدار قابل للتنفيذ ثنائيًا منه echo أيضًا.

يمكننا رؤية الإصدارين المختلفين باستخدام الأوامر التالية:

type echo


whereis echo

اكتب echo في نافذة المحطة الطرفية

ال type الأمر يخبرنا هل الأمر الذي نمرره إليه كما هو الحال دعوى هو غلاف مدمج، أو ملف تنفيذي ثنائي، أو اسم مستعار، أو وظيفة. يخبرنا أنه echo هو غلاف مدمج.

بمجرد العثور على إجابة، type يتوقف الأمر عن البحث عن المزيد من المطابقات. لذا فهو لا يخبرنا ما إذا كانت هناك أوامر أخرى بنفس الاسم موجودة في النظام. لكنه يخبرنا بأي أمر يجده أولاً. وهذا هو الأمر الذي سيتم استخدامه افتراضيًا عند إصدار هذا الأمر.

ال whereis يبحث الأمر عن الملف الثنائي القابل للتنفيذ، وكود المصدر، وصفحة الدليل للأمر الذي نمرره إليه باعتباره سطر أوامر. المعلمةلا يبحث عن ملفات shell المضمنة لأنها لا تحتوي على ملف ثنائي قابل للتنفيذ منفصل. إنها جزء لا يتجزأ من ملف Bash القابل للتنفيذ.


ال whereis تقارير القيادة تفيد بأن echo هو ملف تنفيذي ثنائي يقع في /bin دليل.

لاستخدام هذا الإصدار من echo سوف تحتاج إلى استدعائه صراحةً من خلال توفير المسار إلى الملف القابل للتنفيذ على سطر الأوامر:

/bin/echo --version

/bin/echo --version في نافذة المحطة الطرفية

لا يعرف shell المدمج ما هو --version الحجة الموجودة في سطر الأوامر هي مجرد تكرارها في نافذة المحطة الطرفية:

echo --version

echo --version في نافذة المحطة الطرفية


تستخدم جميع الأمثلة المعروضة هنا الإصدار الافتراضي من echo، في غلاف Bash.

كتابة نص إلى المحطة الطرفية باستخدام الصدى

لكتابة سلسلة نصية بسيطة في نافذة المحطة الطرفية، اكتب echo والسلسلة التي تريد عرضها:

echo My name is Dave.

صدى اسمي ديف. في نافذة المحطة الطرفية

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

echo My name is Dave and I'm a geek.

صدى اسمي ديف وأنا مهووس. في نافذة المحطة الطرفية


تعرض نافذة المحطة الطرفية > يوقع ويجلس هناك منتظرًا. سيعيدك الضغط على Ctrl+C إلى موجه الأوامر. ماذا حدث هناك؟

الاقتباس المفرد أو علامة الاقتباس العليا في كلمة “أنا” مرتبك echoلقد فسر هذا الاقتباس المفرد على أنه بداية لقسم مقتبس من النص. ولأنه لم يكتشف علامة اقتباس مفردة في النهاية، echo كان ينتظر المزيد من المدخلات. وكان يتوقع أن تتضمن المدخلات الإضافية علامة الاقتباس المفردة المفقودة التي كان ينتظرها.

لتضمين علامة اقتباس واحدة في سلسلة، فإن الحل الأبسط هو وضع السلسلة بأكملها بين علامتي اقتباس مزدوجتين:

echo "My name is Dave and I'm a geek."

صدى "اسمي ديف وأنا مهووس." في نافذة المحطة الطرفية


إن وضع علامتي اقتباس مزدوجتين في النص يعد نصيحة عامة جيدة. ففي البرامج النصية، يتم تحديد المعلمات التي تمررها بوضوح echoوهذا يجعل قراءة البرامج النصية وتصحيح أخطائها أسهل بكثير.

ماذا لو أردت تضمين علامة اقتباس مزدوجة في سلسلة النص؟ الأمر سهل، فقط ضع شرطة مائلة عكسية \ أمام علامة الاقتباس المزدوجة (بدون مسافة بينهما).

echo "My name is Dave and I'm a \"geek.\""

صدى "اسمي ديف وأنا \"مهووس.""  في نافذة المحطة الطرفية

هذا يضع كلمة “geek” بين علامتي اقتباس مزدوجتين بالنسبة لنا. سنرى المزيد من هذه الأحرف التي تم تجاوزها بعلامة الشرطة العكسية قريبًا.

استخدام المتغيرات مع echo

حتى الآن، كنا نكتب نصًا محددًا مسبقًا في نافذة المحطة الطرفية. يمكننا استخدام المتغيرات مع echo لإنتاج مخرجات أكثر ديناميكية وتحتوي على قيم تم إدخالها إلينا بواسطة shell. يمكننا تعريف متغير بسيط باستخدام هذا الأمر:


my_name="Dave"

متغير يسمى my_name تم إنشاء المتغير. وتم تعيين قيمة النص “Dave”. يمكننا استخدام اسم المتغير في السلاسل التي نمررها إلى echo ، وسيتم كتابة قيمة المتغير في نافذة المحطة الطرفية. يجب عليك وضع علامة الدولار $ أمام اسم المتغير للسماح echo أعلم أنه متغير.

هناك تحذير. إذا قمت بتغليف السلسلة بين علامتي اقتباس مفردتين echo سيتم التعامل مع كل شيء حرفيًا. لعرض قيمة المتغير، وليس اسم المتغير، استخدم علامتي اقتباس مزدوجتين.

echo 'My name is $my_name'

echo "My name is $my_name"

صدى 'اسمي هو $my_name' في نافذة المحطة الطرفية


من المناسب إلى حد ما أن نكرر ذلك:

  • يؤدي استخدام علامات الاقتباس المفردة إلى كتابة النص في نافذة المحطة الطرفية بطريقة حرفية.
  • يؤدي استخدام علامات الاقتباس المزدوجة إلى تفسير المتغير – والذي يُسمى أيضًا توسيع المتغير – وكتابة القيمة في نافذة المحطة الطرفية.

استخدام الأوامر مع echo

يمكننا استخدام الأمر مع echo ودمج مخرجاته في السلسلة المكتوبة في نافذة المحطة الطرفية. يجب علينا استخدام علامة الدولار $ كما لو كان الأمر متغيرًا، ووضع الأمر بأكمله بين قوسين.

نحن سوف نستخدم أمر التاريخإحدى النصائح هي استخدام الأمر بمفرده قبل البدء في استخدامه مع echoبهذه الطريقة، إذا كان هناك خطأ ما في بناء جملة الأمر الخاص بك، يمكنك تحديده وتصحيحه قبل تضمينه في echo الأمر. ثم، إذا كان echo إذا لم يفعل الأمر ما تتوقعه، فستعرف أن المشكلة يجب أن تكون في echo لأنك قمت بالفعل بإثبات بناء جملة الأمر.


لذا، حاول القيام بما يلي في نافذة المحطة الطرفية:

date +%D

التاريخ +%D في نافذة المحطة الطرفية

وبعد التأكد من حصولنا على ما نتوقعه من أمر التاريخ، سنقوم بدمجه في echo يأمر:

echo "Today's date is: $(date +%D)"

صدى "تاريخ اليوم هو: $(date +%D)" في نافذة المحطة الطرفية

لاحظ أن الأمر موجود داخل الأقواس وعلامة الدولار $ يقع مباشرة قبل القوس الأول.


تنسيق النص باستخدام الصدى

ال -e يتيح لنا خيار (تمكين الإفلات من الشرطة المائلة العكسية) استخدام بعض الأحرف التي تم إفلاتها من الشرطة المائلة العكسية لتغيير تخطيط النص. وهذه هي الأحرف التي تم إفلاتها من الشرطة المائلة العكسية والتي يمكننا استخدامها:

  • :تنبيه (يُعرف تاريخيًا باسم BEL). يؤدي هذا إلى إنشاء صوت التنبيه الافتراضي.
  • :يكتب حرف المسافة الخلفية.
  • :يتخلى عن أي إخراج آخر.
  • \هـ:يكتب حرف الهروب.
  • :يكتب حرف تغذية النموذج.
  • :يكتب سطرًا جديدًا.
  • :يكتب إرجاع العربة.
  • :يكتب علامة تبويب أفقية.
  • \v:يكتب علامة تبويب عمودية.
  • \\:يكتب حرف الشرطة المائلة العكسية.

دعونا نستخدم بعضًا منها ونرى ماذا تفعل.

echo -e "This is a long line of text\nsplit across three lines\nwith\ttabs\ton\tthe\tthird\tline"

صدى -e "هذا سطر طويل من النص مقسم إلى ثلاثة أسطر مع علامات اقتباس على السطر الثالث" في نافذة المحطة الطرفية


يتم تقسيم النص إلى سطر جديد حيث استخدمنا \n الأحرف ويتم إدراج علامة التبويب حيث استخدمنا \t الشخصيات.

echo -e "Here\vare\vvertical\vtabs"

صدى -e "هنا توجد علامات تبويب عمودية" في نافذة المحطة الطرفية

مثل \n أحرف سطر جديدة، علامة تبويب عمودية \v ينقل النص إلى السطر أدناه. ولكن على عكس \n أحرف سطر جديدة، \v لا تبدأ علامة التبويب العمودية السطر الجديد عند العمود صفر. بل تستخدم العمود الحالي.

ال \b تعمل أحرف المسافة الخلفية على تحريك المؤشر للخلف حرفًا واحدًا. إذا كان هناك المزيد من النص المراد كتابته إلى المحطة الطرفية، فسوف يحل هذا النص محل الحرف السابق.

echo -e "123\b4"


صدى -e "123\ب4" في نافذة المحطة الطرفية

تم استبدال “3” بالرقم “4”.

ال \r أسباب حرف العودة إلى السطر الأول echo للرجوع إلى بداية السطر الحالي وكتابة أي نص إضافي من العمود صفر.

echo -e "123\r456"

صدى -e "123\ر456" في نافذة المحطة الطرفية

تم استبدال “123” حرفًا بـ “456” حرفًا.

ال \a سوف يصدر الحرف التنبيهي صوتًا “تنبيهيًا” مسموعًا. ويستخدم صوت التنبيه الافتراضي لموضوعك الحالي.

echo -e "Make a bleep\a"


صدى -e "اصنع صوتًا" في نافذة المحطة الطرفية

ال -n لا يعد خيار (لا سطر جديد) تسلسلًا مائلًا للخلف، ولكنه يؤثر على جماليات تخطيط النص، لذا سنناقشه هنا. فهو يمنع echo من إضافة سطر جديد إلى نهاية النص. يظهر موجه الأوامر مباشرة بعد النص المكتوب في نافذة المحطة الطرفية.

echo -n "no final newline"

صدى -ن "لا يوجد سطر جديد نهائي" في نافذة المحطة الطرفية

استخدام echo مع الملفات والدلائل

يمكنك استخدام echo كنوع من نسخة الرجل الفقير من ls. خياراتك قليلة ومتباعدة عندما تستخدم echo مثل هذا. إذا كنت بحاجة إلى أي نوع من الدقة أو التحكم الدقيق، فمن الأفضل استخدام ls و مجموعة من الخيارات.


يقوم هذا الأمر بإدراج جميع الملفات والدلائل الموجودة في الدليل الحالي:

echo *

يقوم هذا الأمر بإدراج جميع الملفات والدلائل الموجودة في الدليل الحالي والتي يبدأ اسمها بحرف “D”:

echo D*

يُدرج هذا الأمر كافة ملفات “.desktop” الموجودة في الدليل الحالي:

echo *.desktop

صدى * في نافذة المحطة الطرفية

نعم، هذا ليس لعبًا echoنقاط القوة. استخدم ls.

الكتابة إلى الملفات باستخدام الصدى

يمكننا إعادة توجيه الإخراج من echo وإنشاء ملفات نصية أو الكتابة في ملفات نصية موجودة.

إذا استخدمنا > عامل إعادة التوجيه، يتم إنشاء الملف إذا لم يكن موجودًا. إذا كان الملف موجودًا، فسيتم إخراجه من echo يتم إضافته في بداية الملف، مما يؤدي إلى استبدال أي محتوى سابق.


إذا استخدمنا >> عامل إعادة التوجيه، يتم إنشاء الملف إذا لم يكن موجودًا. الناتج من echo يتم إضافته إلى نهاية الملف ولا يحل محل أي محتوى موجود في الملف.

echo "Creating a new file." > sample.txt

echo "Adding to the file." >> sample.txt

cat sample.txt

sample.txt في نافذة المحطة الطرفية” data-img-url=”https://static1.howtogeekimages.com/wordpress/wp-content/uploads/2019/10/16-6.png” src=”https://static1.howtogeekimages.com/wordpress/wp-content/uploads/2019/10/16-6.png” style=”display:block;height:auto;max-width:100%;”/>

يتم إنشاء ملف جديد بالأمر الأول، ويتم إدراج نص فيه. يضيف الأمر الثاني سطرًا من النص إلى أسفل الملف. cat يعرض الأمر محتويات الملف على نافذة المحطة الطرفية.

وبالطبع، يمكننا تضمين متغيرات لإضافة بعض المعلومات المفيدة إلى ملفنا. إذا كان الملف عبارة عن ملف سجل، فقد نرغب في إضافة طابع زمني إليه. يمكننا القيام بذلك باستخدام الأمر التالي.


لاحظ علامات الاقتباس المفردة حول المعلمات الخاصة بـ date الأمر. فهي تمنع تفسير المسافة بين المعلمات على أنها نهاية قائمة المعلمات. وهي تضمن تمرير المعلمات إلى date بشكل صحيح.

echo "Logfile started: $(date +'%D %T')" > logfile.txt

cat logfile.txt

logfile.txt في نافذة المحطة الطرفية” data-img-url=”https://static1.howtogeekimages.com/wordpress/wp-content/uploads/2019/10/21-2.png” src=”https://static1.howtogeekimages.com/wordpress/wp-content/uploads/2019/10/21-2.png” style=”display:block;height:auto;max-width:100%;”/>

تم إنشاء ملف السجل الخاص بنا لنا cat يُظهر لنا أنه تم إضافة طابع التاريخ وطابع الوقت إليه.

ذات صلة: ما هي stdin وstdout وstderr على Linux؟

هذا هو ذخيرة صدى

أمر بسيط، لكنه لا غنى عنه. إذا لم يكن موجودًا، لكان علينا اختراعه.


أضف تعليق