English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في الفصل السابق تعلمنا أمر 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
السلسلة | شرح |
---|---|
\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 $ #لا يوجد مساحة