.\" Generated by scdoc 1.11.4 .\" Complete documentation for this program is not available as a GNU info page .ie \n(.g .ds Aq \(aq .el .ds Aq ' .nh .ad l .\" Begin generated content: .TH "shfmt" "1" "2026-04-07" .PP .PP .SH "نام (NAME)" .PP shfmt \- قالب‌بندی برنامه‌های شل .PP .SH "خلاصه دستور (SYNOPSIS)" .PP \fBshfmt\fR [flags] [path.\&.\&.\&] .PP .SH "توضیحات (DESCRIPTION)" .PP دستور shfmt برنامه‌های شل را قالب‌بندی می‌کند.\& اگر تنها آرگومان یک خط تیره (\fB-\fR) باشد یا هیچ آرگومانی داده نشود، ورودی استاندارد استفاده خواهد شد.\& اگر مسیر داده‌شده یک دایرکتوری باشد، تمام اسکریپت‌های شلِ پیدا شده در آن دایرکتوری استفاده خواهند شد.\& .PP اگر هرگونه فایل EditorConfig یافت شود، از آن‌ها برای اعمال گزینه‌های قالب‌بندی استفاده خواهد شد.\& اگر هرگونه پرچم تجزیه‌کننده یا چاپگر به ابزار داده شود، هیچ گزینه قالب‌بندی EditorConfig اعمال نخواهد شد.\& یک مقدار پیش‌فرض مانند \fB-i=0\fR می‌تواند برای این منظور استفاده شود.\& .PP قالب‌بندی پیش‌فرض شل در shfmt به گونه‌ای انتخاب شده است که سازگار، معمول و قابل پیش‌بینی باشد.\& برخی از جنبه‌های قالب‌بندی را می‌توان از طریق پرچم‌های چاپگر پیکربندی کرد.\& .PP .SH "گزینه‌ها (OPTIONS)" .PP .SS پرچم‌های عمومی (Generic flags) .PP \fB--version\fR .RS 4 نمایش نسخه و خروج.\& .PP .RE \fB-l[=0]\fR, \fB--list[=0]\fR .RS 4 خروج با وضعیت خطا به همراه فهرستی از فایل‌هایی که قالب‌بندی آن‌ها با shfmt تفاوت دارد؛ مسیرها با خط جدید، یا در صورت تعیین \fB-l=0\fR با یک نویسه نال (null)، از یکدیگر جدا می‌شوند.\& .PP .RE \fB-w\fR, \fB--write\fR .RS 4 نوشتن نتیجه در فایل به جای stdout.\& .PP .RE \fB-d\fR, \fB--diff\fR .RS 4 خروج با وضعیت خطا به همراه نمایش یک diff در صورتی که قالب‌بندی تفاوت داشته باشد.\& .PP اگر خروجی یک ترمینال باشد، diff رنگی خواهد بود.\& برای عدم استفاده همیشگی از رنگ، متغیر غیرخالی \fBNO_COLOR\fR یا \fBTERM=dumb\fR را تنظیم کنید.\& برای استفاده همیشگی از رنگ، متغیر غیرخالی \fBFORCE_COLOR\fR را تنظیم کنید.\& .PP .RE \fB--apply-ignore\fR .RS 4 همیشه قواعد نادیده‌گیری (ignore) فایل EditorConfig اعمال شوند.\& .PP هنگام قالب‌بندی مستقیم فایل‌ها، بدون این پرچم از قواعد نادیده‌گیری صرف‌نظر می‌شود.\& این پرچم برای هر ابزار یا ویرایشگری که stdin یا یک تک‌فایل را قالب‌بندی می‌کند، مفید خواهد بود.\& هنگام چاپ نتایج در stdout، یک فایل نادیده‌گرفته‌شده منجر به هیچ خروجی‌ای نمی‌شود.\& .PP .RE \fB--filename\fR str .RS 4 ارائه یک نام برای فایل ورودی استاندارد.\& .PP استفاده از این پرچم برای کارکرد پشتیبانی EditorConfig با stdin ضروری است، زیرا فایل‌های EditorConfig نسبت به مکان یک اسکریپت پیدا می‌شوند.\& .PP .RE .SS پرچم‌های تجزیه‌کننده (Parser flags) .PP \fB-ln\fR, \fB--language-dialect\fR .RS 4 گویش زبان (\fBbash\fR/\fBposix\fR/\fBmksh\fR/\fBbats\fR/\fBzsh\fR، پیش‌فرض \fBauto\fR).\& .PP هنگامی که روی \fBauto\fR تنظیم شود، تا زمانی که نام فایل ورودی دارای یک پسوند شل مانند \fBfoo.\&mksh\fR باشد، زبان از روی آن تشخیص داده می‌شود.\& در غیر این صورت، اگر ورودی با یک shebang شل مانند \fB#!\&/bin/sh\fR آغاز شود، به جای آن استفاده می‌شود.\& اگر هیچ‌کدام نتیجه‌ای نداشته باشند، از \fBbash\fR به عنوان جایگزین پشتیبان (fallback) استفاده می‌شود.\& .PP پسوند نام فایل \fB.\&sh\fR یک حالت ویژه است: نشان‌دهنده \fBposix\fR است، اما ممکن است توسط یک shebang معتبر شل بازنویسی شود.\& .PP .RE \fB-p\fR, \fB--posix\fR .RS 4 کوتاه‌نوشتی برای \fB-ln=posix\fR.\& .PP .RE \fB-s\fR, \fB--simplify\fR .RS 4 ساده‌سازی کد.\& .PP .RE .SS پرچم‌های چاپگر (Printer flags) .PP \fB-i\fR, \fB--indent\fR .RS 4 دندانه‌گذاری: \fB0\fR برای تب‌ها (پیش‌فرض)، و \fB>0\fR برای تعداد فاصله‌ها.\& .PP .RE \fB-bn\fR, \fB--binary-next-line\fR .RS 4 عملگرهای دودویی مانند \fB&&\fR و \fB|\fR می‌توانند یک خط را آغاز کنند.\& .PP .RE \fB-ci\fR, \fB--case-indent\fR .RS 4 بندهای case دندانه‌گذاری می‌شوند.\& .PP .RE \fB-sr\fR, \fB--space-redirects\fR .RS 4 به دنبال عملگرهای تغییر مسیر یک فاصله قرار می‌گیرد.\& .PP .RE \fB-kp\fR, \fB--keep-padding\fR .RS 4 حفظ فاصله‌گذاری‌های تراز ستونی.\& .PP این پرچم منسوخ شده است (\fBDEPRECATED\fR) و در نسخه اصلی بعدی حذف خواهد شد.\& برای اطلاعات بیشتر، ببینید: https://github.\&com/mvdan/sh/issues/658 .PP .RE \fB-fn\fR, \fB--func-next-line\fR .RS 4 کروشه‌های بازکننده تابع در یک خط جداگانه قرار می‌گیرند.\& .PP .RE \fB-mn\fR, \fB--minify\fR .RS 4 کوچک‌سازی کد برای کاهش اندازه آن (شامل \fB-s\fR نیز می‌شود).\& .PP .RE .SS پرچم‌های کاربردی (Utility flags) .PP \fB-f[=0]\fR, \fB--find[=0]\fR .RS 4 یافتن بازگشتی تمام فایل‌های شل و چاپ مسیر آن‌ها؛ مسیرها با خط جدید، یا در صورت تعیین \fB-f=0\fR با یک نویسه نال (null)، از یکدیگر جدا می‌شوند.\& .PP .RE \fB--to-json\fR .RS 4 چاپ درخت نحو در stdout به صورت JSON نوع‌دار.\& .PP .RE \fB--from-json\fR .RS 4 خواندن درخت نحو از stdin به صورت JSON نوع‌دار.\& .PP .RE .SH "مثال‌ها (EXAMPLES)" .PP قالب‌بندی تمام اسکریپت‌های موجود در دایرکتوری جاری و چاپ مواردی که تغییر یافته‌اند: .PP .RS 4 shfmt -l -w .\& .PP .RE برای یکپارچه‌سازی مداوم (CI)، می‌توان از حالتی استفاده کرد که تغییرات قالب‌بندی صرفاً به صورت diff نشان داده شوند: .PP .RS 4 shfmt -d .\& .PP .RE پرچم‌های قالب‌بندی زیر شباهت زیادی به سبک شل گوگل (Google) تعریف‌شده در دارند: .PP .RS 4 shfmt -i 2 -ci -bn .PP .RE در ادامه یک نمونه فایل EditorConfig تعریف‌شده بر اساس آمده است که نحوه تنظیم گزینه‌های پشتیبانی‌شده را نشان می‌دهد: .PP .nf .RS 4 [*\&.sh] # مانند -i=4 indent_style = space indent_size = 4 # --language-dialect shell_variant = posix simplify = true binary_next_line = true # --case-indent switch_case_indent = true space_redirects = true keep_padding = true # --func-next-line function_next_line = true minify = true # نادیده‌گرفتن کل دایرکتوری "third_party" هنگام فراخوانی shfmt روی دایرکتوری‌ها، # مانند "shfmt -l -w \&."\&. هنگام قالب‌بندی مستقیم فایل‌ها، # مانند "shfmt -w third_party/foo\&.sh" یا "shfmt --filename=third_party/foo\&.sh"، # منطق نادیده‌گیری تنها در صورتی اعمال می‌شود که پرچم --apply-ignore داده شده باشد\&. [third_party/**] ignore = true .fi .RE .PP بخش‌های EditorConfig همچنین می‌توانند از `[[shell]]`، `[[bash]]`، یا `[[zsh]]` برای تطبیق با اسکریپت‌های شل استفاده کنند، که به‌ویژه زمانی مفید است که اسکریپت‌ها از shebang استفاده کرده اما پسوندی ندارند.\& توجه داشته باشید که این ویژگی خارج از مشخصات رسمی EditorConfig است و ممکن است در آینده تغییر کند.\& .PP دستور shfmt همچنین می‌تواند جایگزین \fBbash -n\fR برای بررسی خطاهای نحوی اسکریپت‌های شل شود.\& این ابزار جامع‌تر است، زیرا تمام نحو را به صورت ایستا تجزیه کرده و به UTF-8 معتبر نیاز دارد: .PP .nf .RS 4 $ echo \&'${foo:1 2}\&' | bash -n $ echo \&'${foo:1 2}\&' | shfmt >/dev/null 1:9: not a valid arithmetic operator: 2 $ echo \&'foo=(1 2)\&' | bash --posix -n $ echo \&'foo=(1 2)\&' | shfmt -p >/dev/null 1:5: arrays are a bash feature .fi .RE .PP .SH "نویسندگان (AUTHORS)" .PP نگهداری توسط Daniel Martí ، با همراهی سایر مشارکت‌کنندگان متن‌باز انجام می‌شود.\& برای اطلاعات بیشتر و توسعه، ببینید: .\&