كيفية استخدام أمر Bash printf على نظام Linux
نشرت: 2022-06-25 يتيح لك الأمر Bash printf
الكتابة إلى نافذة Linux الطرفية بتحكم أفضل وخيارات تنسيق أكثر مما يوفره أمر echo
. حتى مراوغات printf
الفردية يمكن أن تكون مفيدة.
الكتابة إلى المحطة
إنه أحد الأجزاء الأساسية للتفاعل مع البرنامج. يقوم البرنامج بكتابة شيء ما على الشاشة وأنت تقرأه. حتى مع الأخذ في الاعتبار أن اصطلاح برامج سطر الأوامر المشتق من نظام يونكس والمدعوم من لينكس هو مقتضب قدر الإمكان - فالكثير منهم لا يكتب إلا إلى المحطة الطرفية إذا حدث خطأ ما. إخبار المستخدم بما يحدث ، أو على وشك الحدوث ، أو حدث للتو هو أمر أساسي في البرمجة.
تحتوي قذيفة Bash على أمر echo
الذي يمكنه كتابة نص إلى النافذة الطرفية. يمكنه التعامل مع المتغيرات وعرض قيمها إذا تم تضمينها في السلسلة ، ويمكنك استخدامها في البرامج النصية أو في سطر الأوامر. فلماذا يوجد printf
حتى؟ ألا يحتوي echo
على شيء كتابة النص مغطى؟ حسنًا ، توفر printf
وظائف تتجاوز فعل كتابة السلاسل إلى النوافذ الطرفية. يتيح لك تنسيق الإخراج بمرونة كبيرة ، ولديه حيل أخرى أيضًا.
تم تصميم أمر Bash printf
على غرار وظيفة printf
من لغة C ، ولكن هناك اختلافات. إذا كنت تعرف لغة C ، فستحتاج إلى الانتباه لهذه الاختلافات.
كتابة الجمل الأساسية
دعونا نرى كيف يختلف echo
و printf
عندما يكتبان سلاسل إلى المحطة.
صدى هنا بعض الكلمات
هنا بعض الكلمات
يقوم الأمر echo
بطباعة جميع الكلمات ولكن printf
يطبع الكلمة الأولى فقط. أيضًا ، لا يوجد سطر جديد مطبوع بواسطة printf
. يتم إخراج الإخراج مباشرة مقابل موجه الأوامر. لكن ، أول الأشياء أولاً ، لكي تعمل printf
على جميع الكلمات ، يجب اقتباسها.
صدى هنا بعض الكلمات
printf "هذه بعض الكلمات"
هذا أفضل. لدينا كل الكلمات التي تتم طباعتها ولكننا ما زلنا لا نحصل على سطر جديد. هذا لأنه مع printf
تحصل على سطر جديد فقط إذا طلبت واحدًا. قد يبدو هذا وكأنه ألم ولكنه يتيح لك أن تقرر ما إذا كنت تريد تضمينه أم لا. لجعل printf
يصدر سطرًا جديدًا ، تحتاج إلى تضمين " \n
" في السلسلة الخاصة بك. هذا هو تسلسل الهروب "السطر الجديد".
صدى هنا بعض الكلمات
printf "هذه بعض الكلمات \ n"
في بعض الأحيان ستستخدم سطرًا جديدًا وأحيانًا لن تستخدمه. إليك حالة تستخدم فيها عبارة printf
سطرًا جديدًا بينما لا تستخدم الأخرى.
printf "How-To" && printf "Geek \ n"
نظرًا لأن 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"
ذات صلة: كيفية العمل مع المتغيرات في Bash
تنسيق السلاسل
سلاسل التنسيق هي سلاسل تحدد تنسيق الإخراج. يمكنك توفير نص وقيم أخرى كوسائط لتشغيل سلسلة التنسيق عليها.
يمكن أن تتضمن سلسلة التنسيق نصًا وتسلسلات الهروب ومحددات التنسيق . تخبر محددات التنسيق printf
عن نوع الوسيطة التي يجب توقعها ، مثل السلاسل أو الأعداد الصحيحة أو الأحرف.
هذه هي محددات التنسيق الأكثر شيوعًا. كلهم مسبوقون بعلامة النسبة المئوية " %
". لطباعة علامة النسبة المئوية ، يمكنك استخدام علامتي النسبة المئوية معًا " %%
".
- ٪ s : يطبع سلسلة.
- ٪ c : طباعة حرف واحد.
- ٪ d : طباعة عدد صحيح.
- ٪ f : طباعة رقم فاصلة عائمة.
- ٪ u : طباعة عدد صحيح بدون إشارة.
- ٪ o : طباعة قيمة بالنظام الثماني.
- ٪ x : يطبع قيمة بالنظام الست عشري بأحرف صغيرة.
- ٪ X : يطبع قيمة بالنظام الست عشري بأحرف كبيرة.
- ٪ e : طباعة رقم فاصلة عائمة بالتدوين العلمي بأحرف صغيرة.
- ٪ E : طباعة رقم فاصلة عائمة بالتدوين العلمي ، بأحرف كبيرة.
- ٪٪ : طباعة رمز النسبة المئوية "٪".
printf "How-To٪ s \ n" "Geek"
printf "٪ s٪ s٪ s \ n" "كيف" "إلى" "Geek"
تتضمن سلسلة التنسيق في الأمر الأول بعض النصوص الخاصة بها. نقوم بتمرير السلسلة "Geek" كوسيطة لـ printf
. تتم مطابقته مع محدد التنسيق " %s
" وطباعته. لاحظ أن هناك مسافة فقط بين سلسلة التنسيق وسلسلة الوسيطة. في C ، ستحتاج إلى فاصلة لفصلها ولكن مع إصدار Bash من printf
باستخدام مسافة كافية.
تحتوي سلسلة التنسيق الثانية فقط على محددات التنسيق وتسلسل هروب السطر الجديد. يتم استهلاك وسيطات السلسلة الثلاث بواسطة كل من محددات التنسيق " %s
" بدورها. مرة أخرى ، في لغة C ، تحتاج إلى وضع فاصلة بين كل وسيطة ولكن printf
تتيح لنا نسيان ذلك.
لطباعة أنواع مختلفة من الوسائط ، يمكنك ببساطة استخدام محدد التنسيق المناسب. إليك روتين سريع لتحويل الأرقام تم إنشاؤه باستخدام printf
. سنطبع القيمة 15 بالتدوين العشري والثماني والسداسي العشري.
printf "Dec:٪ d \ n أكتوبر:٪ o \ n الهيكس:٪ x \ n" 15 15 15
لنقم بتقليص ذلك قليلاً حتى يكون المثال أقل تشوشًا.
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 "23 + 32 =٪ d \ n" $ ((23 + 32))
يقوم هذا الأمر بطباعة عدد الأدلة في دليل العمل الحالي:
printf "هناك٪ d دليل \ n" $ (ls -d * / | wc -l)
يقوم أمر printf
هذا بطباعة سلسلة يتم إرجاعها من استدعاء إلى أمر آخر.
printf "المستخدم الحالي:٪ s \ n" $ (whoami)
إذا لم يتم توفير محدد تنسيق سلسلة " %s
" مع وسيطة ، فإن printf
لا تطبع شيئًا.
printf "واحد:٪ s اثنان:٪ s \ n" "ألفا"
إذا تم توفير محدد تنسيق سلسلة " %s
" بقيمة عددية عن طريق الخطأ ، فإنه يطبعها كما لو كانت سلسلة ولا تشكو. لا تحاول هذا باستخدام C printf
- ستحدث أشياء سيئة للغاية. من المحتمل أن يتعطل برنامجك. لكن printf
تتعامل معها دون شكوى.
printf "واحد:٪ s اثنان:٪ s \ n" "ألفا" 777
إذا لم يتلق محدد تنسيق عدد صحيح " %d
" أية وسيطة ، فسيتم طباعة الصفر.
printf "عدد صحيح:٪ d \ n"
إذا تلقى محدد تنسيق عدد صحيح " %d
" وسيطة سلسلة بالخطأ ، فإن Bash سيطبع رسالة خطأ printf
صفرًا.
printf "عدد صحيح:٪ d \ n" "سبعة"
يمكن إنشاء رموز محرجة باستخدام رقم Unicode الخاص بهم أو "نقطة الرمز". يتم تخطي هذه باستخدام الحرف "u" متبوعًا بقيمة Unicode الخاصة بهم.
printf "رمز اليورو: \ u20AC \ n"
لتضمين تسلسلات الهروب في سلاسل الوسيطات ، يجب عليك استخدام محدد التنسيق " %b
" في سلسلة التنسيق ، وليس محدد تنسيق السلسلة " %s
".
printf "٪ s" "\ u20AC \ n"
printf "٪ b" "\ u20AC \ n"
أول جملة printf
لا تعالج قيمة Unicode ولا تتعرف على تسلسل هروب السطر الجديد. تستخدم جملة printf
الثانية محدد التنسيق " %b
". هذا يعالج حرف Unicode بشكل صحيح ويتم طباعة سطر جديد.
ذات صلة: ما هي ترميزات الأحرف مثل ANSI و Unicode ، وكيف تختلف؟
خيول للدورات
في بعض الأحيان ، كل ما عليك echo
هو إرسال بعض النص إلى نافذة المحطة الطرفية. ولكن عندما تحتاج إلى تطبيق بعض المواضع والتنسيق ، فإن printf
هي الأداة المناسبة للمهمة.
printf "٪ b" "Tha-" "tha-" "tha-" "هذا كل الناس. \ n"