دستور echo در لینوکس برای چاپ کردن متن در محیط Terminal به کار میرود. البته متن چاپی ثابت نیست بلکه میتوان از متغیرهای Shell و دستورات و همینطور نام فایلها و فولدرها در آن استفاده کرد. به علاوه میتوانید از این دستور برای ساخت فایلهای متنی و گزارش استفاده کنید.
در این مقاله به اصول و مثالهایی از دستور echo در لینوکس میپردازیم.
آشنایی با کارکرد دستور echo و دو نوع آن
فرمان echo نه فقط در ترمینال لینوکس بلکه در بسیاری از زبانهای برنامهنویسی برای چاپ کردن متن به کار میرود. به عبارت دیگر متن موردنظر به آن داده میشود و دستور echo آن را عیناً چاپ میکند. این عملکرد ساده است اما در عین حال کاربرد گستردهای دارد.
در اغلب توزیعات لینوکس دو نوع echo وجود دارد. در Bash دستور echo مجتمع است و علاوه بر این ممکن است یک فایل باینری قابل اجرا نیز با نام echo موجود است.
با اجرا کردن دو فرمان زیر، محل فایل echo و نوع دستور echo در ترمینال نمایش داده میشود:
نتیجه را در تصویر زیر مشاهده میکنید:
فرمان type مشخص میکند که آیا دستور و عبارتی که به آن داده شده، یکی از دستورات Shell است، یک فایل باینری اجرایی است، یک نام مستعار است و یا یک تابع است؟ همانطور که میبینید echo یک دستور Shell معرفی شده است.
اما در عین حال در این توزیع لینوکس، حداقل یک فایل اجرایی با همین نام وجود دارد که مسیر آن در تصویر فوق ذکر شده است. دستور whereis برای جستجو کردن فایلهای اجرایی، سورس کد و صفحات راهنمای دستورات کاربرد دارد. whereis نمیتواند محل دستورات Shell را نمایش بدهد چرا که این دستورات فایل اجرایی مجزایی ندارند و بخشی از فایل اجرایی Bash محسوب میشوند.
اگر بخواهید از نسخهی خاصی از فایل اجرایی echo استفاده کنید، میبایست مسیر دقیق آن را وارد کنید. میتوانید از آپشن version برای چک کردن اطلاعات فایل باینری استفاده کنید.
اما اگر همین آپشن یعنی --version را پس از دستور echo مربوط به Bash قرار بدهید، اطلاعاتی در مورد فایل اجرایی ارایه نمیشود بلکه عبارت --version عیناً در ترمینال چاپ میشود.
در ادامه به مثالهایی از کاربرد دستور echo مجتمع در ترمینال میپردازیم.
چاپ کردن متن در ترمینال با echo
برای نوشتن متنی ساده در محیط ترمینال، میتوانید آن را پس از دستور echo تایپ کنید و نیازی به استفاده از کوتیشن و دابلکوتیشن نیست.
اما در صورت استفاده از کاراکترهای خاص، اتفاقات عجیبی میافتد. به عنوان مثال عبارت زیر را در نظر بگیرید:
نتیجهی اجرا کردن فرمان فوق را در تصویر زیر میبینید:
علامت > در ترمینال نمایش داده شده است و به نظر میرسد که کاری انجام نمیشود. میتوانید با شورتکات Ctrl + C، اجرا را متوقف کنید. اما دقیقاً چه اتفاقی افتاده است؟
مشکل به کاراکتر خاص یعنی کوتیشن یا ' مربوط میشود. در عبارت I'm که در اواسط جمله قرار داشته، این نماد وجود دارد و فرمان echo تصور میکند که عبارت تکمیل نشده است و منتظر وارد کردن ادامهی عبارت تا رسیدن به ' بعدی است در حالی که کوتیشن دیگری وجود ندارد.
اما اگر بخواهیم در عبارت چاپی از یک علامت ' استفاده کنیم، چاره چیست؟
برای این حالت میتوانید عبارت را در میان دو نماد " یا دابلکوتیشن قرار بدهید.
به مثال زیر توجه کنید که در آن هم از ' و هم از " استفاده شده است:
همانطور که مشاهده میکنید مشکلی وجود ندارد.
اما سوال بعدی:
اگر بخواهیم با echo نماد " چاپ کنیم، راهکار چیست؟
برای این کار میبایست قبل از نماد " از \ استفاده کنید تا به عنوان یک کاراکتر خاص در نظر گرفته نشود.
به مثال زیر توجه کنید که در آن قبل از هر نماد " که قرار است مثل سایر حروف معمولی چاپ شود، یک نماد \ تایپ شده است:
همانطور که میبینید \ در ترمینال چاپ نشده اما " پس از آن، چاپ شده است.
استفاده از متغیرها در کار با دستور echo
همانطور که در ابتدا اشاره کردیم، دستور echo میتواند محتویات متغیرها را هم چاپ کند. به عنوان مثال فرض کنید متغیری به اسم my_name را در ترمینال تعریف کردهایم:
و قرار است در ادامه از آن استفاده کنیم. میتوانیم این متغیر را در یک عبارت متنی که قرار است echo چاپ کند، به کار ببریم. دقت کنید که میبایست قبل از نام متغیر میبایست از نماد $ استفاده شود تا دستور echo آن را به عنوان یک متغیر شناخته و مقدار آن را جایگزین کند. از طرفی باید از " قبل و بعد از عبارت متنی استفاده کنیم. اگر از ' استفاده کنیم، عبارت تفسیر و گسترده نمی شود و در واقع مقدار متغیر جایگزین نمیشود. لذا کاراکتر $ به عنوان یک کاراکتر معمولی چاپ میشود.
به عنوان مثال با اجرا کردن فرمان زیر:
نتیجه به این صورت خواهد شد:
و یک نکتهی مهم و کاربردی:
در اغلب زبانهای برنامهنویسی، تفاوت بین ' و " این است که در صورت استفاده از "، عبارت گسترش پیدا کرده و تفسیر میشود اما در صورت استفاده از '، عبارت بدون تغییر چاپ میشود.
استفاده از دستورات در کار با فرمان echo
میتوانید حین استفاده از دستور echo، از دستورات هم استفاده کنید و در واقع خروجی برخی دستورات را با فرمان echo چاپ کنید. در این صورت باید قبل از دستورات که داخل پرانتز قرار میگیرد، از نماد $ استفاده کنید.
به عنوان مثال فرض کنید که میخواهیم تاریخ را با دستور date محاسبه کرده و چاپ کنیم. بهتر است قبل از ترکیب این فرمان با echo، آن را به صورت مستقل اجرا کنیم و از صحت سینتکس مطمئن شویم.
و حالت ترکیبی که در آن فرمان قبلی داخل پرانتز قرار گرفته و قبل از پرانتز هم از نماد $ استفاده شده است:
و خروجی دستور فوق:
تغییر فرمت متن چاپی با دستور echo
اگر پس از دستور echo از آپشن -e استفاده کنید، میتوانید از برخی کاراکترها برای تغییر فرمت و استایل متن استفاده کنید. به موارد زیر توجه کنید:
- \n برای ایجاد خط جدید
- \t برای چاپ یک تب افقی
- \v برای چاپ تب عمودی
- \b برای بازگشت محل تایپ به اندازهی یک واحد به قبل
- \r برای بازگشت به ابتدای خط فعلی
- \a برای ایجاد صدای هشدار
اما مثالهایی از کاربرد این موارد: مثال اول به روش ایجاد خطوط جدید و استفاده از تب اشاره میکند:
و مثالی دیگر از کاربرد تب افقی و تب عمودی:
تب عمودی عملاً متن را در خط جدید چاپ میکند اما واقعاً خط جدیدی ایجاد نشده است.
با استفاده از \b میتوانید محل چاپ را یک کاراکتر عقب ببرید و در واقع آخرین کاراکتر چاپ شده، حذف و جایگزین میشود. به عنوان مثال اگر عدد ۱۲۳ چاپ شده باشد و از \b4 استفاده کنید، ۴ به جای ۳ قرار میگیرد.
اگر از \r استفاده کنید، نشانگر تایپ در ابتدای خط فعلی قرار میگیرد و ادامهی متن چاپ میشود. به عنوان مثال با اجرا کردن فرمان زیر، ۴۵۶ به جای ۱۲۳ چاپ میشود:
اجرا کردن فرمان زیر با توجه به وجود \a موجب پخش شدن صدای بوق میشود که البته نوع صدای هشدار یا بوق، بسته به تم صداها که در لینوکس فعال است، متفاوت خواهد بود:
آپشن دیگری که میتوانید در کار با دستور echo استفاده کنید، آپشن -n یا no newline است. این آپشن از اضافه شدن خط جدید در پایان متن چاپی جلوگیری میکند.
لیست کردن فایل و فولدرها با دستور echo
برای لیست کردن فایل و فولدرها از دستور ls استفاده میشود اما echo هم این قابلیت را دارد، هر چند به مراتب سادهتر و ضعیفتر است. به عنوان مثال با اجرا کردن فرمان زیر در ترمینال لینوکس، لیست تمام فایل و فولدرها در فولدر کاری فعلی نمایش داده میشود:
فرمان echo از Wildcards پشتیبانی میکند لذا لیست کردن فایل و فولدرهایی که بخشی از نام یا پسوند فایل مشخص شده، امکانپذیر است.
و دستور زیر تمام فایل و فولدرهایی که نامشان با حرف D آغاز میشود و در فولدر کاری فعلی قرار دارند را لیست میکند:
دستور زیر هم تمام فایلهایی که پسوند desktop دارند را لیست میکند:
همانطور که مشاهده میکنید خروجی این دستور شبیه به دستور ls، مرتب و مفید نیست:
نوشتن متن در فایل با دستور echo
برای نوشتن متن در فایلهای متنی موجود یا برای ایجاد فایل متنی جدید و نوشتن متن در آن میتوانید از این فرمان استفاده کنید. در واقع پس از دستوری که خروجی متنی دارد، میتوانید نماد > را قرار بدهید و پس از آن نام فایل متنی را وارد کنید تا خروجی در فایل متنی ذخیره شود. توجه کنید که اگر فایل موجود نباشد، فایل جدید ایجاد میشود و خروجی در آن ذخیره میشود اما اگر فایل از قبل موجود باشد، خروجی دستور echo در ابتدای فایل جایگزین متن قبلی میشود.
اگر از نماد >> استفاده کنید، خروجی فرمان echo در انتهای فایل موجود اضافه میشود و البته اگر فایل وجود نداشته باشد، ایجاد میشود. در این صورت متن موجود در فایل متنی جایگزین نمیشود.
دستور سوم یعنی cat برای نمایش محتویات فایل متنی که با دستور اول ایجاد شده و با اجرای دستور دوم، عبارت جدیدی در انتهای آن اضافه شده، به کار میرود. خروجی را بررسی کنید:
در ایجاد فایلهای Log یا گزارش که شاید حین نوشتن برخی اسکریپتهای Shell ضروری است، میتوانید تاریخ و ساعت را نیز در انتهای خطوط اضافه کنید. در این صورت فراموش نکنید که به پرانتز و نماد $ نیاز است. به مثال زیر توجه کنید:
howtogeekسیارهی آیتی