PRINTF(1) General Commands Manual PRINTF(1)

printf - چاپ خروجی بر اساس رشته قالب‌بندی و آرگومان‌های ارائه‌شده.

printf FORMAT [ARGUMENT]...
printf OPTION

چاپ خروجی بر اساس رشته قالب‌بندی و آرگومان‌های بعدی.

نمایش اطلاعات راهنما
نمایش اطلاعات نسخه
[FORMAT]
[ARGUMENT]

قالب‌بندی پایه رشته‌های ناشناس:

رشته قالب را حداقل یک‌بار چاپ می‌کند و تا زمانی که آرگومان‌های باقی‌مانده وجود داشته باشند تکرار می‌شود خروجی، عبارت‌های گریز (escape) در رشته قالب را به‌صورت نویسه‌های واقعی چاپ می‌کند خروجی، فیلدهای ناشناس را با آرگومان استفاده‌نشده بعدی، که بر اساس آن فیلد قالب‌بندی شده است، جایگزین می‌کند.

رشته را چاپ می‌کند، توالی‌های نویسه‌های گریز را با نویسه‌های واقعی و توالی‌های فیلد جایگزینی را با آرگومان‌های ارائه‌شده جایگزین می‌نماید،

دقیقاً همان‌طور که هست، به استثنای توالی‌های نویسه‌های گریز زیر، و توالی‌های جایگزینی که در ادامه شرح داده شده‌اند.

توالی‌های گریز (ESCAPE SEQUENCES):

توالی‌های گریز زیر، که در اینجا به ترتیب الفبا مرتب شده‌اند، نویسه متناظر را چاپ خواهند کرد:


- \" نقل‌قول دوتایی (double quote)
- \\ بک‌اسلش (backslash)
- \\a هشدار (BEL)
- \\b پس‌بر (backspace)
- \\c پایان ورودی (End-of-Input)
- \\e نویسه گریز (escape)
- \\f برگه جدید (form feed)
- \\n خط جدید (new line)
- \\r بازگشت به ابتدای سطر (carriage return)
- \\t تب افقی (horizontal tab)
- \\v تب عمودی (vertical tab)
- \\NNN بایتی با مقدار در مبنای هشت NNN (۱ تا ۳ رقم)؛ مقادیر بزرگ‌تر از ۲۵۶ پردازش خواهند شد
- \\xHH بایتی با مقدار در مبنای شانزده NN (۱ تا ۲ رقم)
- \\uHHHH نویسه یونیکد (IEC 10646) با مقدار هگزادسیمال HHHH (۴ رقم)
- \\uHHHH نویسه یونیکد با مقدار هگزادسیمال HHHH (۸ رقم)
- %% یک نویسه منفرد %

جایگزینی‌ها (SUBSTITUTIONS):

مرجع سریع جایگزینی‌ها:

فیلدها


- %s: رشته
- %b: رشته تجزیه‌شده برای نویسه‌های گریز؛ پارامتر دوم حداکثر طول است


- %c: نویسه بدون پارامتر دوم


- %i یا %d: عدد صحیح ۶۴ بیتی
- %u: عدد صحیح بدون علامت ۶۴ بیتی
- %x یا %X: عدد صحیح بدون علامت ۶۴ بیتی به مبنای ۱۶ (هگزادسیمال)
- %o: عدد صحیح بدون علامت ۶۴ بیتی به مبنای ۸ (هشت‌هشتی)


پارامتر دوم حداقل عرض است، خروجی عددی
کمتر از آن عرض با صفرهای ابتدایی پر می‌شود


- %q: مقدار ARGUMENT در قالبی چاپ می‌شود که می‌تواند به عنوان ورودی شل استفاده مجدد شود، و نویسه‌های غیرقابل‌چاپ با نحو پیشنهادی پوزیکس $'' فرار داده می‌شوند.
- %f یا %F: مقدار ممیز شناور ده‌دهی
- %e یا %E: مقدار ممیز شناور در نماد علمی
- %g یا %G: کوتاه‌ترین مقدار ممیز شناور بین ده‌دهی تفسیرشده ویژه یا نماد علمی.


پارامتر دوم عبارت است از:
- حداکثر ارقام اعشار بعد از ممیز برای خروجی ممیز شناور
- حداکثر تعداد ارقام بااهمیت برای خروجی نماد علمی

پارامتردهی فیلدها

مثال‌ها:

printf '%4.3i' 7

دارای پارامتر اول ۴ و پارامتر دوم ۳ است و نتیجه آن ' 007' خواهد بود

printf '%.1s' abcde

فاقد پارامتر اول است و پارامتر دوم آن ۱ بوده و نتیجه آن 'a' خواهد بود

printf '%4c' q

دارای پارامتر اول ۴ و فاقد پارامتر دوم است و نتیجه آن ' q' خواهد بود

پارامتر اول یک فیلد، حداقل عرضی است که خروجی باید به آن اندازه پر شود؛ اگر خروجی کمتر از قدر مطلق این عرض باشد، با فاصله‌های ابتدایی پر می‌شود، یا اگر آرگومان منفی باشد، با فاصله‌های انتهایی. مقدار پیش‌فرض صفر است.

پارامتر دوم یک فیلد مختص نوع فیلد خروجی است. مقادیر پیش‌فرض را می‌توان در راهنمای کامل جایگزینی‌ها در زیر یافت

پیشوندهای ویژه برای آرگومان‌های عددی


- 0: (مانند 010) تفسیر آرگومان در مبنای ۸ (فقط فیلدهای خروجی عدد صحیح)
- 0x: (مانند 0xABC) تفسیر آرگومان در مبنای ۱۶ (فقط فیلدهای خروجی عددی)
- \': (مانند \'a) تفسیر آرگومان به عنوان یک ثابت نویسه‌ای

نحوه استفاده از جایگزینی‌ها:

از جایگزینی‌ها برای ارسال آرگومان(های) اضافی به رشته FORMAT استفاده می‌شود تا به شیوه‌ای خاص قالب‌بندی شوند؛ مانند:

printf 'the letter %X comes before the letter %X' 10 11

چاپ خواهد کرد:

the letter A comes before the letter B

زیرا فیلد جایگزینی %X به معنای «یک آرگومان عدد صحیح بگیر و آن را به عنوان یک عدد هگزادسیمال بنویس» است.

ارسال آرگومان‌هایی بیشتر از تعداد موجود در رشته قالب، باعث می‌شود رشته قالب برای باقی جایگزینی‌ها تکرار شود:

printf 'it is %i F in %s \n' 22 Portland 25 Boston 27 New York

چاپ خواهد کرد:


it is 22 F in Portland
it is 25 F in Boston
it is 27 F in Boston

اگر یک رشته قالب چاپ شود اما آرگومان‌های باقی‌مانده کمتر از فیلدهای جایگزینی باشند، فیلدهای جایگزینی بدون آرگومان به‌طور پیش‌فرض به رشته‌های خالی، یا برای فیلدهای عددی به مقدار 0 تبدیل می‌شوند.

جایگزینی‌های موجود:

این برنامه، همانند printf در GNU coreutils، زیرمجموعه اصلاح‌شده‌ای از مشخصات printf در POSIX C را تفسیر می‌کند؛ مرجع سریع جایگزینی‌ها در زیر آمده است.

جایگزینی‌های رشته‌ای:

تمام فیلدهای رشته‌ای یک پارامتر «حداکثر عرض» دارند %.3s یعنی «بیش از سه نویسه از ورودی اصلی را چاپ نکن»

- %s: رشته

- %b: رشته حاوی گریز - رشته برای یافتن هرگونه نویسه گریز از فهرست فوق بررسی شده و آن‌ها را به نویسه‌های واقعی تبدیل می‌کند؛ مانند تبدیل \\n به نویسه خط جدید. یک قاعده خاص درباره حالت %b این است که عبارت‌های مبنای هشت به‌گونه متفاوتی تفسیر می‌شوند. در آرگومان‌های ارائه‌شده به %b، عبارت‌های تفسیری مبنای هشت باید به شکل \0NNN باشند نه \\NNN. (اگرچه به دلایل سازگاری با گذشته، عبارت‌های مبنای هشت به شکل \\NNN همچنان تفسیر می‌شوند و هشداری صادر نخواهد شد، اما اگر از این قالب برای عبارتی استفاده کنید که کد آن با صفر شروع می‌شود با مشکل مواجه می‌شوید، زیرا به عنوان قالب \0NNN دیده می‌شود.)

- %q: رشته فرارداده‌شده - رشته در قالبی که می‌تواند توسط اکثر شل‌ها به عنوان ورودی مجدداً استفاده شود. نویسه‌های غیرقابل‌چاپ با نحو پیشنهادی پوزیکس ‘$''’ فرار داده می‌شوند، و نویسه‌های کنترلی شل به‌درستی نقل‌قول می‌شوند. این قالبی معادل با خروجی دستور ls --quoting=shell-escape است.

جایگزینی‌های نویسه:

فیلد نویسه پارامتر دوم ندارد.


- %c: یک نویسه منفرد

جایگزینی‌های عدد صحیح:

تمام فیلدهای عدد صحیح یک پارامتر «پر کردن با صفر» دارند %.4i به معنای عدد صحیحی است که اگر طول آن کمتر از ۴ رقم باشد، با صفرهای ابتدایی پر می‌شود تا طول آن به ۴ رقم برسد.


- %d یا %i: عدد صحیح ۶۴ بیتی
- %u: عدد صحیح بدون علامت ۶۴ بیتی
- %x یا %X: عدد صحیح بدون علامت ۶۴ بیتی چاپ‌شده در مبنای ۱۶ (Hexadecimal). استفاده از %X به‌جای %x به معنای استفاده از حروف بزرگ برای 'a' تا 'f' است
- %o: عدد صحیح بدون علامت ۶۴ بیتی چاپ‌شده در مبنای ۸ (octal)

جایگزینی‌های ممیز شناور:

تمام فیلدهای ممیز شناور یک پارامتر «حداکثر ارقام اعشار / حداکثر ارقام بااهمیت» دارند %.10f یعنی یک ممیز شناور ده‌دهی با ۷ رقم اعشار پس از ۰ %.10e یعنی عددی در نماد علمی با ۱۰ رقم بااهمیت %.10g یعنی رفتار مشابه برای ده‌دهی و نماد علمی به‌ترتیب، و ارائه‌دهنده کوتاه‌ترین خروجی میان هر یک از آن‌ها است.

همانند GNU coreutils، مقدار پس از ممیز در این خروجی‌ها ابتدا قبل از تبدیل به متن، به صورت double تجزیه می‌شود. در هر دو پیاده‌سازی انتظار دقت معناداری فراتر از رقم ۱۸ اعشار را نداشته باشید. هنگام استفاده از تعداد ارقام اعشار ۱۸ یا بیشتر، می‌توانید انتظار اختلافی در حدود +/- 1 در رقم ۱۸ اعشار بین printf در GNU coreutils و این printf داشته باشید.

- %f: مقدار ممیز شناور ارائه‌شده در مبنای ۱۰، که به‌طور پیش‌فرض تا ۶ رقم اعشار کوتاه و نمایش داده می‌شود. برابری رفتاری فراتر از دقت double با Coreutils printf وجود ندارد؛ مقادیر فراتر از مقادیر ورودی برآورد یا تعدیل نمی‌شوند.

- %e یا %E: مقدار ممیز شناور ارائه‌شده در نماد علمی به‌طور پیش‌فرض ۷ رقم بااهمیت. %E به معنای استفاده از E بزرگ برای توان است.

- %g یا %G: مقدار ممیز شناور ارائه‌شده در کوتاه‌ترین حالت بین نماد ده‌دهی و نماد علمی؛ رفتاری متفاوت از %f و %E دارد، لطفاً برای جزئیات کامل به مشخصات posix printf مراجعه کنید؛ چند نمونه از تفاوت‌های رفتاری:


- نماد علمی به‌طور پیش‌فرض ۶ رقم بااهمیت دارد
- صفرهای پایانی حذف می‌شوند
- به‌جای قطع شدن، رقم پس از آخرین رقم گرد می‌شود

همانند سایر رفتارهای این ابزار، تصمیمات طراحی در رفتار ممیز شناور در این ابزار به‌گونه‌ای انتخاب شده است تا دقیقاً رفتار printf در GNU coreutils را از دیدگاه ورودی‌ها و خروجی‌ها بازتولید کند.

استفاده از پارامترها:

بیشتر فیلدهای جایگزینی را می‌توان با استفاده از حداکثر ۲ عدد که می‌توان بین علامت % و حرف فیلد قرار داد، پارامتردهی کرد.

پارامتر اول همیشه حداقل عرض خروجی را مشخص می‌کند و برای ایجاد خروجی ستونی مفید است. هر خروجی که کمتر از این حداقل عرض باشد با فاصله‌های ابتدایی پر می‌شود پارامتر دوم با یک نقطه شروع می‌شود. نیازی به استفاده اجباری از پارامترها نیست

اشکال ویژه ورودی:

برای ورودی‌های عددی، علاوه بر مبنای ۱۰ اشکال ورودی زیر نیز پذیرفته می‌شوند:

مبنای ۸ (فقط برای عدد صحیح): اگر آرگومان با یک 0 شروع شود، نویسه‌های بعدی برای فیلدهای عدد صحیح در مبنای ۸ تفسیر می‌شوند

مبنای ۱۶: اگر آرگومان با 0x شروع شود نویسه‌های بعدی برای هر فیلد عددی در مبنای ۱۶ تفسیر می‌شوند؛ برای فیلدهای ممیز شناور، ورودی در مبنای ۱۶ منجر به محدودیت دقت (در تبدیل ورودی پس از ممیز) به میزان 10^-15 می‌شود

ثابت نویسه‌ای: اگر آرگومان با یک نویسه نقل‌قول تکی شروع شود، اولین بایت از نویسه بعدی به عنوان یک عدد صحیح بدون علامت ۸ بیتی تفسیر خواهد شد. در صورت وجود بایت‌های اضافی، خطایی صادر خواهد شد (مگر اینکه متغیر محیطی POSIXLY_CORRECT تنظیم شده باشد)

v(uutils coreutils) 0.11.0

2026-09-01