English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

أمر printf في شيل

في الفصل السابق تعلمنا أمر echo الخاص بـ Shell، في هذا الفصل سنتعلم أمر output الآخر الخاص بـ Shell وهو printf.

أمر printf يحاكي برنامج printf() في مكتبة مكتبة C.

printf تم تعريفه من قبل معيار POSIX، لذا فإن سكريبتات printf أكثر قدرة على التوزيع من سكريبتات echo.

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

نظام تعريف printf

printf  format-string  [الارتباطات...]

التفسير للمعلمات:

  • format-string: 为格式控制字符串

  • arguments: 为格式控制字符串

arguments:
$ echo "Hello, Shell"
为参数列表。
$ echo "Hello, Shell"
$ printf "Hello, Shell\n"

Hello, Shell

.2
指保留2位小数。
#!/bin/bash
 
$  
接下来,我来用一个脚本来体现 printf 的强大功能: 
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg 
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234

执行脚本,输出结果如下所示:

printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
姓名 性别 体重kg
郭靖 男 66.12

杨过 男 48.65郭芙 女 47.99 %s %c %d %f 都是格式代替符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,

%f输出实数,以小数形式输出。 -%10s 指一个宽度为 10 个字符(

- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。 -%4.2f 指格式化为小数,其中

.2
指保留2位小数。
#!/bin/bash
 
# author:基础教程网
# url:ar.oldtoolbag.com
# format-string 为双引号 
# 单引号与双引号效果一样 
# 没有引号也可以输出
printf %s abcdef
# 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
printf %s abc def
printf "%s\n" abc def
printf "%s %s %s\n" a b c d e f g h i j
# 如果没有 arguments,那么 %s 用 NULL 代替,%d 用 0 代替
printf "%s and %d \n"

执行脚本,输出结果如下所示:

1 abc
1 abc
abcdefabcdefabc
def
a b c
d e f
g h i
j  
 و0

سلسلة الـ printf

السلسلةشرح
\aحرف تحذير، عادةً هو حرف BEL في ASCII
\bالتراجع
\cتقديم النصوص النهائية للإخراج (لا يظهر أي مساحة في نهاية النصوص) (صالح فقط في نطاق سلسلة النصوص تحت إشراف %b)
\fالانتقال إلى الصفحة
\nالانتقال إلى السطر التالي
\rالعودة إلى البداية
\tتباعد أفق
\vتباعد عمودي
\\حرف مائل
\dddتمثل القيم الثمانية من 1 إلى 3 أرقام. صالح فقط في نطاق سلسلة النصوص
\0dddتمثل القيم الثمانية من 1 إلى 3 أرقام
$ printf "a string, no processing:<%s>\n" "A\nB"
a string, no processing:<A\nB>
$ printf "a string, no processing:<%b>\n" "A\nB"
a string, no processing:<A
B>
$ printf "ar.oldtoolbag.com \a"
ar.oldtoolbag.com $                  #لا يوجد مساحة