وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

فرمان Bash printf

0 0
زمان لازم برای مطالعه: 5 دقیقه



هنگام نوشتن اسکریپت های Bash، еcho معمولاً برای چاپ با خروجی استاندارد استفاده می شود. در حالی که ساده و راحت است، echo
در قابلیت ها و کنترل قالب بندی محدود است.

برای کنترل بیشتر بر روی قالب بندی خروجی، از printf به جای آن دستور دهید.

را printf فرمان مشابه C عمل می کند printf() عملکرد و کنترل بیشتری روی قالب بندی به شما می دهد.

را printf فرمان

printf پوسته ای است که در Bash و سایر پوسته های محبوب مانند Zsh و Ksh ساخته شده است. مستقل نیز وجود دارد /usr/bin/printf باینری، اما نسخه داخلی پوسته اولویت دارد.

ما نسخه داخلی Bash را پوشش خواهیم داد printf.

نحو برای printf دستور به شرح زیر است:

printf [-v var] format [arguments...]

را -v گزینه می گوید printf نه به print خروجی اما اختصاص دادن آن به متغیر (var).

را format رشته ای است که ممکن است شامل سه نوع شیء مختلف باشد:

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

arguments مقادیری هستند که جایگزین مشخص کننده ها در رشته قالب می شوند.

دستور هر تعداد از را می پذیرد arguments.

  • اگر بیشتر arguments از تعیین کننده های قالب ارائه شده است format رشته برای مصرف همه آرگومان ها دوباره استفاده می شود.
  • اگر کمتر arguments نسبت به ارائه مشخص‌کننده‌های قالب، مشخص‌کننده‌های فرمت عددی اضافی روی مقدار صفر تنظیم می‌شوند، در حالی که مشخص‌کننده‌های قالب رشته‌ای روی یک رشته تهی تنظیم می‌شوند.

در زیر چند نکته وجود دارد که باید هنگام انتقال آرگومان ها به آن توجه کرد printf دستور:

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

بر خلاف echo، printf دستور به طور خودکار یک کاراکتر خط جدید اضافه نمی کند (\n) در انتهای خط. شما باید شامل شود \n به صراحت

یک نمونه معمولی از استفاده printf به نظر می رسد:

printf "Open issues: %s\nClosed issues: %s\n" "34" "65"
Open issues: 34
Closed issues: 65

رشته Open issues: %s\nClosed issues: %s\n است format، در حالی که “34” و “65” آرگومان هستند. رشته قالب شامل دو کاراکتر خط جدید (\n) و دو مشخص کننده فرمت (%s) که با آرگومان ها جایگزین می شوند.

بک اسلش فرار می کند

کاراکترهای بک اسلش زمانی که در رشته قالب یا آرگومان مربوط به %b مشخص کننده تبدیل در اینجا لیستی از رایج ترین شخصیت های فرار آورده شده است:

  • \\ – نمایش یک کاراکتر بک اسلش.
  • \b – یک کاراکتر بک اسپیس را نمایش می دهد.
  • \n – یک خط جدید را نمایش می دهد.
  • \r – بازگشت کالسکه را نمایش می دهد.
  • \t – یک زبانه افقی را نمایش می دهد.
  • \v – یک برگه عمودی را نمایش می دهد.
پیشنهاد می‌کنیم بخوانید:  Bash Concatenate String Variables

مشخص کننده های تبدیل

مشخصات تبدیل به شکل زیر است:

%[flags][width][.precision]specifier

هر مشخصات تبدیل با علامت درصد (%)، شامل اصلاح کننده های اختیاری است و با یکی از حروف زیر که نشان دهنده نوع داده (specifier) آرگومان مربوطه: aAbcdeEfgGioqsuxX.

تعیین کننده تبدیل تایپ کنید

تبدیل نوع specifier کاراکتری است که روش تفسیر آرگومان مربوطه را مشخص می کند. این کاراکتر الزامی است و بعد از فیلدهای اختیاری قرار می گیرد.

در زیر لیستی وجود دارد که تمام تبدیل‌های نوع و کاری که انجام می‌دهند را نشان می‌دهد:

  • %b – آرگومان را همزمان با گسترش دنباله های فرار بک اسلش چاپ کنید.
  • %q – چاپ آرگومان shell-quoted، قابل استفاده مجدد به عنوان ورودی.
  • %d، %i – آرگومان را به صورت یک عدد صحیح اعشاری امضا شده چاپ کنید.
  • %u – آرگومان را به صورت یک عدد صحیح اعشاری بدون علامت چاپ کنید.
  • %o – آرگومان را به صورت یک عدد صحیح هشتگانه بدون علامت چاپ کنید.
  • %x، %X – آرگومان را به صورت یک عدد صحیح هگزادسیمال بدون علامت چاپ کنید. %x حروف کوچک را چاپ می کند و %X با حروف بزرگ چاپ می کند
  • %e، %E – آرگومان را به صورت یک عدد ممیز شناور در نماد نمایی چاپ کنید. %e حروف کوچک را چاپ می کند و %E با حروف بزرگ چاپ می کند
  • %a، %A – آرگومان را به عنوان یک عدد ممیز شناور در نماد کسری هگزادسیمال چاپ کنید. %a حروف کوچک را چاپ می کند و %A با حروف بزرگ چاپ می کند
  • %g، %G – آرگومان را به عنوان یک عدد ممیز شناور در نماد معمولی یا نمایی چاپ کنید، هر کدام که برای مقدار و دقت داده شده مناسب تر است. %g حروف کوچک را چاپ می کند و %G با حروف بزرگ چاپ می کند
  • %c – آرگومان را به صورت یک کاراکتر چاپ کنید.
  • %f – آرگومان را به عنوان یک عدد ممیز شناور چاپ کنید.
  • %s – آرگومان را به صورت رشته ای چاپ کنید.
  • %% – چاپ تحت اللفظی % نماد

یک عدد بدون علامت نشان دهنده اعداد صفر و مثبت است، در حالی که یک عدد علامت دار نشان دهنده اعداد منفی، صفر و مثبت است.

دستور زیر عدد 100 را در سه سیستم اعداد مختلف (چند پایه) چاپ می کند:

printf "Decimal: %d\nHex: %x\nOctal: %o\n" 100 100 100
Decimal: 100
Hex: 64
Octal: 144

دستورالعمل پرچم ها

پرچم ها اولین اصلاح کننده های اختیاری هستند و برای تنظیم توجیه، صفرهای ابتدایی، پیشوندها و غیره استفاده می شوند.

در اینجا رایج ترین آنها هستند:

  • - – متن چاپ شده را در قسمت چپ تراز کنید. به طور پیش فرض، متن به صورت راست تراز شده است.
  • + – پیشوند اعداد با a + یا - علامت بزنید. به طور پیش فرض، فقط اعداد منفی با علامت منفی پیشوند می شوند.
  • 0 – اعداد را با صفرهای ابتدایی به جای فاصله قرار دهید.
  • خالی – پیشوند اعداد مثبت را با یک فضای خالی و اعداد منفی را با منهای (-).
  • # – یک قالب جایگزین
    برای اعداد
پیشنهاد می‌کنیم بخوانید:  روش نصب Go بر روی CentOS 8

بخشنامه عرض

را width فیلد دستورالعمل که بعد از هر کاراکتر پرچم قرار می گیرد، حداقل تعداد کاراکترهایی را که تبدیل باید تولید کند را مشخص می کند.

اگر عرض متن خروجی کمتر از عرض مشخص شده باشد، با فاصله پر می شود. عرض را می توان به عنوان یک عدد صحیح اعشاری غیر منفی یا یک ستاره (*).

در اینجا یک مثال است:

printf "%20s %d\n" Mark 305

%20s یعنی فیلد را حداقل 20 کاراکتر تنظیم کنید. جاهای خالی قبل از متن اضافه می شوند زیرا، به طور پیش فرض، خروجی درست توجیه می شود. برای تراز کردن متن در سمت چپ، از - پرچم (%-20s).

      Mark 305

وقتی یک ستاره (*) به عنوان a استفاده می شود width دستورالعمل، سپس عرض فیلد تبدیل توسط یک آرگومان عرض که قبل از آرگومان در حال قالب بندی قرار می گیرد، تنظیم می شود.

در مثال زیر، عرض را روی 10 قرار می دهیم:

printf "%0*d" 10 5

0 پرچمی است که عدد را با صفرهای ابتدایی به جای خالی قرار می دهد. متن خروجی حداقل 10 کاراکتر خواهد داشت:

0000000005

دستورالعمل دقیق

را .precision اصلاح کننده از یک نقطه (.) به دنبال آن یک عدد صحیح یا ستاره مثبت (*) که بسته به روی نوع مشخص کننده، تعداد کاراکترهای رشته یا رقمی یا تعداد ارقام اعشاری را برای چاپ تنظیم می کند.

دقت اثر زیر را دارد:

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

در اینجا یک مثال نشان می دهد که چگونه یک عدد ممیز شناور را به 3 اعشار گرد کنید:

printf "%.3f" 1.61803398
1.618

وقتی دقت روی ستاره تنظیم می شود (*، مقدار آن توسط آرگومان دقیقی که قبل از آرگومان در حال قالب بندی قرار می گیرد، تنظیم می شود.

printf "%.*f" 3 1.61803398
1.618

نکات کاربردی

  • همیشه از نقل قول ها در اطراف رشته قالب استفاده کنید تا از globbing ناخواسته یا گسترش متغیر جلوگیری کنید.
  • نقل قول‌های تک را برای قالب‌های تحت اللفظی ترجیح دهید، مگر اینکه به بسط متغیر در خود قالب نیاز داشته باشید.

نتیجه گیری

را printf دستور buildin یک جایگزین قدرتمند و قابل پیش بینی برای echo. فرمت و آرگومان می گیرد و خروجی تمیز، تراز و حرفه ای را چاپ می کند.

اگر سوال یا بازخوردی دارید، در کامنت بگذارید.

bash
terminal
برای نگارش بخشهایی از این متن ممکن است از ترجمه ماشینی یا هوش مصنوعی GPT استفاده شده باشد
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم

زمان انتشار: 1404-12-10 17:46:07

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید