كيفية استخدام أمر Bash printf على نظام Linux

نشرت: 2022-06-25
محطة لينكس على خلفية زرقاء.
fatmawati achmad zaenuri / Shutterstock.com

يتيح لك الأمر Bash printf الكتابة إلى نافذة Linux الطرفية بتحكم أفضل وخيارات تنسيق أكثر مما يوفره أمر echo . حتى مراوغات printf الفردية يمكن أن تكون مفيدة.

الكتابة إلى المحطة

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

كيفية استخدام أمر Echo على نظام Linux
ذات صلة كيفية استخدام Echo Command على Linux

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

تم تصميم أمر Bash printf على غرار وظيفة printf من لغة C ، ولكن هناك اختلافات. إذا كنت تعرف لغة C ، فستحتاج إلى الانتباه لهذه الاختلافات.

كتابة الجمل الأساسية

دعونا نرى كيف يختلف echo و printf عندما يكتبان سلاسل إلى المحطة.

 صدى هنا بعض الكلمات
 هنا بعض الكلمات 

استخدام echo و printf مع الكلمات غير المقتبسة

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

 صدى هنا بعض الكلمات
 printf "هذه بعض الكلمات" 

استخدام echo و printf مع الكلمات المقتبسة

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

 صدى هنا بعض الكلمات
 printf "هذه بعض الكلمات \ n" 

استخدام echo و printf مع الكلمات المقتبسة وحرف السطر الجديد

في بعض الأحيان ستستخدم سطرًا جديدًا وأحيانًا لن تستخدمه. إليك حالة تستخدم فيها عبارة printf سطرًا جديدًا بينما لا تستخدم الأخرى.

 printf "How-To" && printf "Geek \ n" 

استخدام اثنين من printfs لإنشاء سطر واحد من النص

نظرًا لأن printf الأول لا يطبع سطرًا جديدًا ، يتم وضع الإخراج من printf الثاني مباشرةً بعد "How-To" وعلى نفس السطر. يستخدم printf الثاني \n لطباعة سطر جديد. يؤدي ذلك إلى ظهور موجه الأوامر على السطر الموجود أسفل النص المطبوع.

ذات صلة: كيفية معالجة ملف سطر بسطر في برنامج Linux Bash

شخصيات الهروب الأخرى

إليك بعض أحرف الهروب التي يمكنك استخدامها. لقد رأيت بالفعل " \n " في العمل.

  • \ n : الانتقال إلى سطر جديد.
  • \ r : طباعة حرف إرجاع. هذا يرسل مؤشر الإخراج مرة أخرى إلى بداية السطر الحالي.
  • \ t : طباعة حرف جدولة.
  • \ v : طباعة مسافة علامة تبويب عمودية.
  • \\ : يطبع حرف الخط المائل العكسي.
  • \ " : طباعة حرف اقتباس.
  • \ b : طباعة حرف مسافة للخلف.

حرف الهروب من حرف الإرجاع يحرك المؤشر مرة أخرى إلى بداية السطر الحالي .

 printf "العسل هو أصل كل الشرور \ r المال \ n" 

استخدام حرف الإرجاع للرجوع إلى بداية السطر

يعالج الأمر printf مدخلاته من اليسار إلى اليمين. تتم طباعة السلسلة كنص عادي حتى تواجه printf حرف الهروب " \r ". يتم إرجاع مؤشر الإخراج إلى بداية السطر الحالي.

تستأنف معالجة السلسلة بالحرف الموجود خلف الحرف " \r " مباشرة. تؤدي معالجة الباقي إلى طباعة printf على "Money" ، والكتابة فوق كلمة "Honey".

تُستخدم علامة الاقتباس " " "لاقتباس السلاسل ، بينما تشير العلامة المائلة للخلف" \ "إلى تسلسلات الهروب. إذا كنت تريد طباعة هذه الأحرف ، فأنت بحاجة إلى التخلص منها بشرطة مائلة للخلف. وهذا يخبر printf أن يعاملها كأحرف حرفية.

 printf "هذا \ t علامة تبويب ، هذه علامة اقتباس \" ، وهذا \\ شرطة مائلة للخلف \ n " 

الهروب من الأحرف حتى يتم التعامل معها حرفيًا

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

استخدام المتغيرات مع printf مشابه جدًا لاستخدامها مع echo . لتضمين متغير ، مثل متغير البيئة هذا ، اسبقه بعلامة الدولار " $ " كالمعتاد.

 printf "الدليل الرئيسي: $ HOME \ n" 

استخدام printf مع متغير البيئة

ذات صلة: كيفية العمل مع المتغيرات في Bash

تنسيق السلاسل

سلاسل التنسيق هي سلاسل تحدد تنسيق الإخراج. يمكنك توفير نص وقيم أخرى كوسائط لتشغيل سلسلة التنسيق عليها.

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

هذه هي محددات التنسيق الأكثر شيوعًا. كلهم مسبوقون بعلامة النسبة المئوية " % ". لطباعة علامة النسبة المئوية ، يمكنك استخدام علامتي النسبة المئوية معًا " %% ".

  • ٪ s : يطبع سلسلة.
  • ٪ c : طباعة حرف واحد.
  • ٪ d : طباعة عدد صحيح.
  • ٪ f : طباعة رقم فاصلة عائمة.
  • ٪ u : طباعة عدد صحيح بدون إشارة.
  • ٪ o : طباعة قيمة بالنظام الثماني.
  • ٪ x : يطبع قيمة بالنظام الست عشري بأحرف صغيرة.
  • ٪ X : يطبع قيمة بالنظام الست عشري بأحرف كبيرة.
  • ٪ e : طباعة رقم فاصلة عائمة بالتدوين العلمي بأحرف صغيرة.
  • ٪ E : طباعة رقم فاصلة عائمة بالتدوين العلمي ، بأحرف كبيرة.
  • ٪٪ : طباعة رمز النسبة المئوية "٪".
 printf "How-To٪ s \ n" "Geek"
 printf "٪ s٪ s٪ s \ n" "كيف" "إلى" "Geek" 

إظهار printf يقبل "عدد كبير جدًا من الوسائط"

تتضمن سلسلة التنسيق في الأمر الأول بعض النصوص الخاصة بها. نقوم بتمرير السلسلة "Geek" كوسيطة لـ printf . تتم مطابقته مع محدد التنسيق " %s " وطباعته. لاحظ أن هناك مسافة فقط بين سلسلة التنسيق وسلسلة الوسيطة. في C ، ستحتاج إلى فاصلة لفصلها ولكن مع إصدار Bash من printf باستخدام مسافة كافية.

تحتوي سلسلة التنسيق الثانية فقط على محددات التنسيق وتسلسل هروب السطر الجديد. يتم استهلاك وسيطات السلسلة الثلاث بواسطة كل من محددات التنسيق " %s " بدورها. مرة أخرى ، في لغة C ، تحتاج إلى وضع فاصلة بين كل وسيطة ولكن printf تتيح لنا نسيان ذلك.

لطباعة أنواع مختلفة من الوسائط ، يمكنك ببساطة استخدام محدد التنسيق المناسب. إليك روتين سريع لتحويل الأرقام تم إنشاؤه باستخدام printf . سنطبع القيمة 15 بالتدوين العشري والثماني والسداسي العشري.

 printf "Dec:٪ d \ n أكتوبر:٪ o \ n الهيكس:٪ x \ n" 15 15 15 

باستخدام printf لطباعة القيم العددية في تدوينات أساسية مختلفة

لنقم بتقليص ذلك قليلاً حتى يكون المثال أقل تشوشًا.

 printf "Hex:٪ x \ n" 15 

طباعة قيمة سداسية عشرية

معظمنا معتاد على رؤية القيم السداسية العشرية بأحرف كبيرة وبقيم أقل من 0x10 مطبوعة بصفر بادئ. يمكننا تحقيق ذلك باستخدام محدد التنسيق السداسي العشري الكبير " %X " ووضع محدد عرض بين علامة النسبة المئوية " % " والحرف " X ".

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

 printf "Hex:٪ 2X \ n" 15 

طباعة قيمة سداسية عشرية بأحرف كبيرة في حقل عرض مكون من حرفين

نحصل الآن على قيمة كبيرة مطبوعة بمسافة بادئة. يمكننا أن نجعل حقل printf يحتوي على أصفار بدلاً من مسافات بوضع صفر أمام الاثنين:

 printf "Hex:٪ 02X \ n" 15 

طباعة قيمة سداسية عشرية بأحرف كبيرة في حقل عرض مكون من حرفين ومبطن بالأصفار

يسمح لك محدد الدقة بتعيين عدد النقاط العشرية لتضمينها في الإخراج.

 printf "الفاصلة العائمة:٪ 08.3f \ n" 9.243546 

استخدام معدّلات العرض والدقة برقم الفاصلة العائمة

هذا يجعل من السهل إنتاج جداول النتائج مع إخراج محاذي بدقة. يوضح هذا الأمر التالي أيضًا من المراوغات الأخرى لـ Bash printf . إذا كان هناك وسيطات أكثر من محددات التنسيق ، يتم إدخال الوسيطات في سلسلة التنسيق على دفعات حتى يتم استخدام جميع الوسائط. حجم الدُفعة التي تتم معالجتها في كل مرة هو عدد محددات التنسيق في سلسلة التنسيق. في لغة C ، يتم تجاهل الوسائط الإضافية في استدعاءات دالة printf .

 printf "Float:٪ 8.3f \ n" 9.243546 23.665 8.0021 

استخدام معدّلات العرض والدقة لإنشاء جدول أنيق

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

 printf "٪ 10s٪ d \ n" "معاطف" 7 "أحذية" 22 "مظلات" 3 

استخدام معدل العرض مع السلاسل

بشكل افتراضي ، يتم ضبط القيم بشكل صحيح في حقولها. لتبريرها إلى اليسار ، استخدم علامة الطرح " - " مباشرةً خلف علامة النسبة المئوية " % ".

 printf "٪ -10s٪ d" "معاطف" أحذية 7 "22" مظلات "3 

استخدام محدد عرض مضبوط إلى اليسار مع سلاسل

يمكن استخدام محدد الدقة لتعيين الحد الأقصى لعدد الأحرف التي تتم طباعتها. نحن نستخدم أحرف النقطتين " : " لإظهار حدود حقل العرض. ليس كيف يتم اقتطاع كلمة "المظلات".

 printf ":٪ 10.6s: \ n" "معاطف" "أحذية" "مظلات"
 printf ":٪ - 10.6s: \ n" "معاطف" "أحذية" "مظلات" 

استخدام معدِّل الدقة للحد من عدد الأحرف التي تتم طباعتها من سلسلة

يمكن تمرير محدد العرض كوسيطة . استخدم علامة النجمة " * " بدلاً من محدد رقمي ، ومرر العرض كوسيطة عدد صحيح.

 printf "٪ * s \ n" 20 "أقصى اليمين" 12 "الأوسط" 5 "أقصى اليسار" 

تمرير محدد العرض كوسيطة لـ printf

الحيل والمراوغات الأخرى

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

هذا يطبع مجموع رقمين:

 printf "23 + 32 =٪ d \ n" $ ((23 + 32)) 

طباعة مجموع رقمين

يقوم هذا الأمر بطباعة عدد الأدلة في دليل العمل الحالي:

 printf "هناك٪ d دليل \ n" $ (ls -d * / | wc -l) 

عد الدلائل مع printf

يقوم أمر printf هذا بطباعة سلسلة يتم إرجاعها من استدعاء إلى أمر آخر.

 printf "المستخدم الحالي:٪ s \ n" $ (whoami) 

طباعة الإخراج من أمر آخر

إذا لم يتم توفير محدد تنسيق سلسلة " %s " مع وسيطة ، فإن printf لا تطبع شيئًا.

 printf "واحد:٪ s اثنان:٪ s \ n" "ألفا" 

كيف يتعامل printf مع وسيطات السلسلة المفقودة

إذا تم توفير محدد تنسيق سلسلة " %s " بقيمة عددية عن طريق الخطأ ، فإنه يطبعها كما لو كانت سلسلة ولا تشكو. لا تحاول هذا باستخدام C printf - ستحدث أشياء سيئة للغاية. من المحتمل أن يتعطل برنامجك. لكن printf تتعامل معها دون شكوى.

 printf "واحد:٪ s اثنان:٪ s \ n" "ألفا" 777 

كيف يقبل printf بصمت الأعداد الصحيحة كقيم سلسلة

إذا لم يتلق محدد تنسيق عدد صحيح " %d " أية وسيطة ، فسيتم طباعة الصفر.

 printf "عدد صحيح:٪ d \ n" 

كيف تتعامل printf مع وسيطات الأعداد الصحيحة المفقودة

إذا تلقى محدد تنسيق عدد صحيح " %d " وسيطة سلسلة بالخطأ ، فإن Bash سيطبع رسالة خطأ printf صفرًا.

 printf "عدد صحيح:٪ d \ n" "سبعة" 

كيف يتعامل printf مع السلاسل التي يتم توفيرها بدلاً من وسيطات الأعداد الصحيحة

يمكن إنشاء رموز محرجة باستخدام رقم Unicode الخاص بهم أو "نقطة الرمز". يتم تخطي هذه باستخدام الحرف "u" متبوعًا بقيمة Unicode الخاصة بهم.

 printf "رمز اليورو: \ u20AC \ n" 

طباعة قيمة Unicode هاربة

لتضمين تسلسلات الهروب في سلاسل الوسيطات ، يجب عليك استخدام محدد التنسيق " %b " في سلسلة التنسيق ، وليس محدد تنسيق السلسلة " %s ".

 printf "٪ s" "\ u20AC \ n"
 printf "٪ b" "\ u20AC \ n" 

استخدام محدد التنسيق هو٪ b للتعامل مع تسلسلات الهروب في وسيطات السلسلة

أول جملة printf لا تعالج قيمة Unicode ولا تتعرف على تسلسل هروب السطر الجديد. تستخدم جملة printf الثانية محدد التنسيق " %b ". هذا يعالج حرف Unicode بشكل صحيح ويتم طباعة سطر جديد.

ذات صلة: ما هي ترميزات الأحرف مثل ANSI و Unicode ، وكيف تختلف؟

خيول للدورات

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

 printf "٪ b" "Tha-" "tha-" "tha-" "هذا كل الناس. \ n"