.\" .\" David Korn .\" AT&T Bell Laboratories .\" .\" @(#)sh.1 (dgk@research.att.com) 12/28/93 .\" .nr Z 1 \" set to 1 when command name is ksh, 2 for ksh93 .ds OK [\| .ds CK \|] .ds ' \s+4\v@.3m@\'\v@-.3m@\s-4 .ds ` \s+4\v@.3m@\`\v@-.3m@\s-4 .if \nZ=0 \{\ .TH SH 1 .\} .if \nZ=1 \{\ .TH KSH 1 .\} .if \nZ=2 \{\ .TH KSH93 1 .\} .SH "نام (NAME)" .if \nZ=0 \{\ sh, rsh, pfsh \- پوسته تعاملی و زبان برنامه‌نویسی استاندارد/محدودشده .\} .if \nZ=1 \{\ ksh, rksh, pfksh \- پوسته تعاملی و زبان برنامه‌نویسی استاندارد KornShell .\} .SH "نکته (NOTE)" در حال حاضر، .I rksh و .I pfksh در سیستم‌عامل‌های macOS / Darwin در دسترس نیستند. .if \nZ=2 \{\ ksh93, rksh93, pfksh93 \- پوسته تعاملی و زبان برنامه‌نویسی استاندارد KornShell .\} .SH "خلاصه دستور (SYNOPSIS)" .if \nZ=0 \{\ .B sh .\} .if \nZ=1 \{\ .B ksh .\} .if \nZ=2 \{\ .B ksh93 .\} [ .B \(+-abcefhiknoprstuvxBCDP ] [ .B \-R file ] [ .B \(+-o option ] .\|.\|. [ .B \- ] [ arg .\|.\|. ] .SH "توضیحات (DESCRIPTION)" .if \nZ=0 .I Sh\^ .if \nZ=1 .I Ksh\^ .if \nZ=2 .I Ksh93\^ یک دستور و زبان برنامه‌نویسی است که دستورات خوانده‌شده از یک ترمینال یا یک فایل را اجرا می‌کند. .if \nZ=0 .I Rsh\^ .if \nZ=1 .I Rksh\^ .if \nZ=2 .I Rksh93\^ نسخه محدودشده‌ای از مفسر دستور استاندارد .if \nZ=0 .IR sh ؛ .if \nZ=1 .IR ksh ؛ .if \nZ=2 .IR ksh93 ؛ است؛ این پوسته برای تنظیم نام‌های ورود و محیط‌های اجرایی به کار می‌رود که قابلیت‌های آن‌ها نسبت به پوسته استاندارد بیشتر کنترل شده است. .if \nZ=0 .I Rpfsh\^ .if \nZ=1 .I Rpfksh\^ .if \nZ=2 .I Rpfksh93\^ یک نسخه پروفایل‌شل از مفسر دستور استاندارد .if \nZ=0 .IR sh ؛ .if \nZ=1 .IR ksh ؛ .if \nZ=2 .IR ksh93 ؛ است؛ از آن برای اجرای دستورات با ویژگی‌های مشخص‌شده توسط پروفایل‌های کاربر استفاده می‌شود (به .IR pfexec (1) مراجعه کنید). برای مفهوم آرگومان‌های ارسالی به پوسته، بخش .I فراخوانی (Invocation)\^ در زیر را ببینید. .SS "تعاریف (Definitions)" یک .I نویسه کنترلی (metacharacter)\^ یکی از نویسه‌های زیر است: .PP .RS \f3; & ( ) \(bv < > new-line space tab\fP .RE .PP یک .I نویسه خالی (blank)\^ یک .B tab یا یک .BR space است. یک .I شناسه (identifier)\^ توالی‌ای از حروف، ارقام یا زیرخط‌ها است که با یک حرف یا زیرخط شروع می‌شود. شناسه‌ها به‌عنوان اجزای نام‌های .I متغیر\^ استفاده می‌شوند. یک .I vname\^ توالی‌ای از یک یا چند شناسه است که توسط یک \fB\s+2.\s-2\fP از هم جدا شده‌اند و اختیاری است که در ابتدا نیز یک \fB\s+2.\s-2\fP داشته باشند. Vnameها به‌عنوان نام توابع و متغیرها استفاده می‌شوند. یک .I کلمه (word)\^ توالی‌ای از .I نویسه‌ها\^ از مجموعه نویسه‌های تعریف‌شده در لوکال جاری است، به استثنای .IR "نویسه‌های کنترلی" نقل‌قول‌نشده. .PP یک .I دستور (command)\^ توالی‌ای از نویسه‌ها در نحو زبان پوسته است. پوسته هر دستور را می‌خواند و عمل مورد نظر را مستقیماً یا با فراخوانی ابزارهای مجزا به انجام می‌رساند. یک دستور توکار (built-in)، دستوری است که توسط خود پوسته بدون ایجاد فرایند جداگانه اجرا می‌شود. برخی دستورات صرفاً برای سهولت کار توکار هستند و در اینجا مستند نشده‌اند. دستورات توکاری که باعث اثرات جانبی در محیط پوسته می‌شوند و دستورات توکاری که قبل از اجرای جستجوی مسیر یافت می‌شوند (به بخش .I اجرا (Execution)\^ در زیر مراجعه کنید) در اینجا مستند شده‌اند. به دلایل تاریخی، برخی از این دستورات توکار رفتاری متفاوت با سایر دستورات توکار دارند و .IR "دستورات توکار ویژه" نامیده می‌شوند. .SS "دستورها (Commands)" یک .I دستور ساده (simple-command)\^ لیستی از انتساب‌های متغیر (به بخش .I "انتساب متغیرها (Variable Assignments)\^" در زیر مراجعه کنید) یا توالی‌ای از کلمات جداشده با .I نویسه خالی\^ است که ممکن است پیش از آن لیستی از انتساب‌های متغیر قرار گیرد (به بخش .I "محیط (Environment)\^" در زیر مراجعه کنید). کلمه اول نام دستوری را که باید اجرا شود مشخص می‌کند. به استثنای مواردی که در زیر مشخص شده، کلمات باقی‌مانده به‌عنوان آرگومان به دستور فراخوانی‌شده ارسال می‌شوند. نام دستور به‌عنوان آرگومان 0 ارسال می‌شود (به .IR exec (2) مراجعه کنید). .I مقدار (value)\^ یک دستور ساده همان وضعیت خروج آن است؛ در صورت خاتمه عادی 0-255؛ در صورت خاتمه غیرعادی \f2256+signum\^\fP است (نام سیگنال متناظر با وضعیت خروج را می‌توان از طریق گزینه .B \-l در ابزار توکار .B kill\^ به دست آورد). .PP یک .I خط لوله (pipeline)\^ توالی‌ای از یک یا چند .I دستور\^ است که با .BR \(bv از هم جدا شده‌اند. خروجی استاندارد هر دستور به جز دستور آخر توسط یک .IR pipe (2) به ورودی استاندارد دستور بعدی متصل می‌شود. هر دستور، احتمالاً به جز دستور آخر، به‌عنوان یک فرایند جداگانه اجرا می‌شود؛ پوسته منتظر خاتمه آخرین دستور می‌ماند. وضعیت خروج یک خط لوله همان وضعیت خروج آخرین دستور است مگر آنکه گزینه .B pipefail فعال باشد. هر خط لوله می‌تواند با .I "کلمه رزروشده" .B ! شروع شود که باعث می‌شود وضعیت خروج خط لوله در صورت غیرصفر بودن وضعیت خروج آخرین دستور 0 شود و در صورت 0 بودن وضعیت خروج آخرین دستور 1 شود. .PP یک .I لیست (list)\^ توالی‌ای از یک یا چند خط لوله است که با .BR ; ، .BR & ، .BR \(bv& ، .BR && ، یا .BR \(bv\|\(bv از هم جدا شده‌اند و به صورت اختیاری با .BR ; ، .BR & ، یا .BR \(bv& خاتمه می‌یابند. از میان این پنج نماد، .BR ; ، .BR & ، و .B \(bv& دارای تقدم یکسان هستند، که پایین‌تر از تقدم .B && و .BR \(bv\|\(bv است. نمادهای .B && و .B \(bv\|\(bv نیز دارای تقدم یکسان هستند. نقطه‌ویرگول .RB ( ; ) باعث اجرای متوالی خط لوله قبلی می‌شود؛ علامت آمپرسند .RB ( & ) باعث اجرای ناهمگام خط لوله قبلی می‌شود (یعنی پوسته منتظر اتمام آن خط لوله .I نمی‌ماند\^). نماد .B \(bv& باعث اجرای ناهمگام خط لوله قبلی همراه با ایجاد یک لوله دوطرفه با پوسته والد می‌شود؛ پوسته والد می‌تواند با اعمال عملگرهای بازهدایت .B <& و .B >& با آرگومان .B p به دستورات و با استفاده از گزینه .B \-p در دستورات توکار .B read و .B print که بعداً شرح داده شده‌اند، در ورودی و خروجی استاندارد خط لوله ایجادشده بنویسد یا از آن بخواند. نماد .B && .RB (\| \(bv\|\(bv \^) باعث می‌شود .I لیست\^ پس از آن فقط در صورتی اجرا شود که خط لوله قبلی مقدار صفر (غیرصفر) برگرداند. یک یا چند خط جدید ممکن است در یک .I لیست\^ به جای نقطه‌ویرگول برای مرزبندی دستور قرار گیرند. اولین .I مورد\^ از اولین .I خط لوله\^ یک .I لیست\^ که یک دستور ساده است و با بازهدایت شروع نمی‌شود، و درون یک لیست .BR while ، .BR until ، یا .B if قرار ندارد، می‌تواند با یک نقطه‌ویرگول شروع شود. این نقطه‌ویرگول نادیده گرفته می‌شود مگر آنکه گزینه .B showme همان‌طور که در دستور توکار .B set در زیر توضیح داده شده، فعال باشد. .PP یک .I دستور (command)\^ یا یک دستور ساده است یا یکی از موارد زیر. مگر اینکه خلاف آن ذکر شده باشد، مقدار برگردانده‌شده توسط یک دستور همان مقدار آخرین دستور ساده اجراشده در آن دستور است. .TP \f3for\fP \f2vname\^\fP \*(OK \f3in\fP \f2word\^\fP .\|.\|. \*(CK \f3;do\fP \f2list\^\fP \f3;done\fP هر بار که یک دستور .B for اجرا می‌شود، .I vname\^ بر روی .I کلمه\^ بعدی برگرفته از لیست .B in .I word\^ تنظیم می‌شود. اگر .BI in " word\^" \&.\|.\|. حذف شود، آنگاه دستور .B for بخش \f3do\fP \f2list\^\fP را یک بار به ازای هر پارامتر مکانی تنظیم‌شده با شروع از .B 1 اجرا می‌کند (به بخش .I "گسترش پارامتر (Parameter Expansion)\^" در زیر مراجعه کنید). اجرا زمانی پایان می‌یابد که کلمه دیگری در لیست باقی نمانده باشد. .TP \f3for ((\fP \*(OK\f2expr1\^\fP\*(CK \f3;\fP \*(OK\f2expr2\^\fP\*(CK \f3;\fP \*(OK\f2expr3\^\fP\*(CK \f3))\fP \f3;do\fP \f2list\^\fP \f3;done\fP عبارت حسابی .I expr1 ابتدا ارزیابی می‌شود (به بخش .I "ارزیابی حسابی (Arithmetic evaluation)" در زیر مراجعه کنید). عبارت حسابی .I expr2 به طور مکرر ارزیابی می‌شود تا زمانی که مقدار آن صفر شود؛ و در صورت غیرصفر بودن، .I list اجرا شده و عبارت حسابی .I expr3 ارزیابی می‌شود. اگر هر عبارتی حذف شود، طوری رفتار می‌کند که گویی مقدار آن 1 ارزیابی شده است. .TP \f3select\fP \f2vname\^\fP \*(OK \f3in\fP \f2word\^\fP .\|.\|. \*(CK \f3;do\fP \f2list\^\fP \f3;done\fP یک دستور .B select مجموعه .IR کلمات را، که هر کدام با یک عدد پیش‌درآمد شده‌اند، در خطای استاندارد (توصیف‌کننده فایل 2) چاپ می‌کند. اگر .BI in " word\^" \&.\|.\|. حذف شود، آنگاه پارامترهای مکانی با شروع از .B 1 به جای آن استفاده می‌شوند (به بخش .I "گسترش پارامتر (Parameter Expansion)\^" در زیر مراجعه کنید). اعلان .SM .B PS3 چاپ می‌شود و یک خط از ورودی استاندارد خوانده می‌شود. اگر این خط شامل شماره یکی از .IR کلمات فهرست‌شده باشد، آنگاه مقدار متغیر .I vname\^ بر روی .I کلمه\^ متناظر با این شماره تنظیم می‌شود. اگر این خط خالی باشد، لیست گزینه‌ها مجدداً چاپ می‌شود. در غیر این صورت مقدار متغیر .I vname\^ بر روی .IR null تنظیم می‌شود. محتوای خط خوانده‌شده از ورودی استاندارد در متغیر .SM .B REPLY ذخیره می‌شود. .I لیست\^ به ازای هر انتخاب اجرا می‌شود تا زمانی که به یک .B break\^ یا .I پایان فایل (end-of-file)\^ برخورد کند. اگر متغیر .SM .B REPLY با اجرای .I list بر روی .I null\^ تنظیم شود، آنگاه لیست گزینه‌ها قبل از نمایش اعلان .SM .B PS3 برای انتخاب بعدی چاپ می‌شود. .TP \f3case\fP \f2word\^\fP \f3in\fP \*(OK \*(OK\f3(\fP\*(CK\f2pattern\^\fP \*(OK \(bv \f2pattern\^\fP \*(CK .\|.\|. \f3)\fP \f2list\^\fP \f3;;\fP \*(CK .\|.\|. \f3esac\fP یک دستور .B case آن .I لیستی\^ را اجرا می‌کند که با اولین .I الگوی\^ منطبق با .I word مرتبط است. قالب الگوها همان قالبی است که برای تولید نام فایل استفاده می‌شود (به بخش .I "تولید نام فایل (File Name Generation)\^" در زیر مراجعه کنید). عملگر .B ;; باعث خاتمه اجرای .B case می‌شود. اگر از .B ;& به جای .B ;; استفاده شود، لیست بعدی (در صورت وجود) اجرا خواهد شد. .TP \f3if\fP \f2list\^\fP \f3;then\fP \f2list\^\fP \*(OK \ \f3;elif\fP \f2list\^\fP \f3;then\fP \f2list\^\fP \*(CK .\|.\|. \ \*(OK \f3;else\fP \f2list\^\fP \*(CK \f3;f\&i\fP .I لیست\^ پس از \f3if\fP اجرا می‌شود و اگر وضعیت خروج صفر برگرداند، .I لیست\^ پس از اولین .B then اجرا می‌شود. در غیر این صورت، .I لیست\^ پس از \f3elif\fP اجرا شده و اگر مقدار آن صفر باشد، .I لیست\^ پس از .B then بعدی اجرا می‌شود. در صورت عدم موفقیت هر یک از .B elif .IR لیست‌های\^ متوالی، .I لیست\^ .B else اجرا می‌شود. اگر .B if .I لیست\^ وضعیت خروج غیرصفر داشته باشد و هیچ .B else .IR لیستی وجود نداشته باشد، آنگاه دستور .B if وضعیت خروج صفر برمی‌گرداند. .TP .PD 0 \f3while\fP \f2list\^\fP \f3;do\fP \f2list\^\fP \f3;done\fP .TP \f3until\fP \f2list\^\fP \f3;do\fP \f2list\^\fP \f3;done\fP .PD یک دستور .B while به طور مکرر .B while .I لیست\^ را اجرا می‌کند و اگر وضعیت خروج آخرین دستور در لیست صفر باشد، .B do .IR لیست را اجرا می‌کند؛ در غیر این صورت حلقه خاتمه می‌یابد. اگر هیچ دستوری در .B do .I لیست\^ اجرا نشود، آنگاه دستور .B while وضعیت خروج صفر برمی‌گرداند؛ .B until می‌تواند به جای .B while برای نفی شرط خاتمه حلقه استفاده شود. .TP \f3((\fP\f2expression\^\fP\f3))\fP .br .I عبارت\^ با استفاده از قواعد ارزیابی حسابی که در زیر توضیح داده شده ارزیابی می‌شود. اگر مقدار عبارت حسابی غیرصفر باشد، وضعیت خروج 0 است، در غیر این صورت وضعیت خروج 1 خواهد بود. .TP \f3(\fP\f2list\^\fP\f3)\fP .br .I لیست\^ را در یک محیط جداگانه اجرا می‌کند. توجه داشته باشید که اگر دو پرانتز باز مجاور برای تودرتوسازی لازم باشد، باید یک فاصله درج شود تا از ارزیابی به‌عنوان یک دستور حسابی (همان‌طور که در بالا شرح داده شد) جلوگیری شود. .TP \f3{ \fP\f2list\^\fP\f3;}\fP .br .I لیست\^ صرفاً اجرا می‌شود. توجه داشته باشید که بر خلاف نویسه‌های کنترلی .B ( و .BR ) ، نویسه‌های .B { و .B } جزو .IR "کلمات رزروشده" هستند و برای شناخته شدن باید در ابتدای یک خط یا پس از یک .B ; قرار گیرند. .TP \f3[[\fP\f2 expression \^\fP\f3]]\fP .br .I عبارت\^ را ارزیابی کرده و هنگامی که .I عبارت\^ درست باشد وضعیت خروج صفر برمی‌گرداند. برای شرح .IR expression ، به بخش .I "عبارت‌های شرطی (Conditional Expressions)\^" در زیر مراجعه کنید. .TP .PD 0 \f3function\fP \f2varname\^\fP \f3{\fP \f2list\^\fP \f3;}\fP .TP \f2varname\^\fP \f3() {\fP \f2list\^\fP \f3;}\fP .PD تابعی را تعریف می‌کند که با .IR varname ارجاع داده می‌شود. تابعی که .I varname\^ آن شامل یک .B \s+2.\s-2 باشد، تابع انضباطی (discipline function) نامیده می‌شود و بخشی از .I varname\^ که قبل از آخرین .B \s+2.\s-2 می‌آید باید به یک متغیر موجود اشاره کند. بدنه تابع همان .I لیست\^ دستورات بین .B { و .BR } است. تابعی که با نحو \f3function\fP \f2varname\^\fP تعریف شده باشد می‌تواند به‌عنوان آرگومان برای دستور توکار ویژه \f3.\fP نیز استفاده شود تا رفتاری معادل با حالتی که از نحو \f2varname\^\fP\f3()\fP برای تعریف آن استفاده شده به دست آید. (به بخش .I "توابع (Functions)\^" در زیر مراجعه کنید.) .TP \f3namespace\fP \f2varname\^\fP \f3{\fP \f2list\^\fP \f3;}\fP .br فضای نام .I شناسه\^ را تعریف کرده یا استفاده می‌کند و دستورات موجود در .I list\^ را در این فضای نام اجرا می‌نماید. (به بخش .I "فضاهای نام (Name Spaces)\^" در زیر مراجعه کنید.) .TP \f3&\fP \*(OK \f2name\^\fP \*(OK \f2arg...\^\fP \*(CK \*(CK باعث می‌شود دستورات .I لیست\^ بعدی که با .B & خاتمه می‌یابند در استخر کارهای پس‌زمینه .IR name قرار گیرند. اگر .I name\^ حذف شود، یک استخر بدون نام پیش‌فرض استفاده می‌شود. دستورات موجود در یک استخر پس‌زمینه نام‌گذاری‌شده ممکن است از راه دور اجرا شوند. .TP \f3time\fP \*(OK \f2pipeline\^\fP \*(CK .br اگر \f2pipeline\^\fP حذف شود، زمان کاربری و سیستمی برای پوسته جاری و فرایندهای فرزند تکمیل‌شده در خطای استاندارد چاپ می‌شود. در غیر این صورت، .I خط لوله\^ اجرا شده و زمان سپری‌شده و همچنین زمان کاربری و سیستمی در خطای استاندارد چاپ می‌شوند. متغیر .SM .B TIMEFORMAT می‌تواند روی یک رشته قالب‌بندی تنظیم شود که نحوه نمایش اطلاعات زمان‌بندی را مشخص می‌کند. برای شرح متغیر .SM .BR TIMEFORMAT ، به بخش .B "متغیرهای پوسته (Shell Variables)" در زیر مراجعه کنید. .PP کلمات رزروشده زیر تنها زمانی که کلمه اول یک دستور باشند و نقل‌قول نشده باشند به‌عنوان کلمه رزروشده شناخته می‌شوند: .PP .if t .RS .B .if n if then else elif fi case esac for while until do done { } function select time [[ ]] ! .if t if then else elif fi case esac for while until do done { } function select time [[ ]] ! .if t .RE .SS "انتساب متغیرها (Variable Assignments)" یک یا چند انتساب متغیر می‌تواند در ابتدای یک دستور ساده قرار گیرد یا به عنوان آرگومان به دستورات توکار ویژه .BR typeset ، .BR enum ، .BR export ، یا .B readonly و همچنین به سایر دستورات اعلان ایجاد‌شده به عنوان نوع داده (Type) داده شود. نحو یک \f2انتساب\^\fP به فرم زیر است: .TP .PD 0 \f2varname\^\fP\f3=\fP\f2word\^\fP .TP \f2varname\^\fP\f3[\fP\f2word\^\fP\f3]\fP=\fP\f2word\^\fP .PD هیچ فاصله‌ای بین \f2varname\^\fP و \f3=\fP یا بین \f3=\fP و \fIword\^\fP مجاز نیست. .TP \f2varname\^\fP\f3=(\fP\f2assign_list\^\fP\f3)\fP هیچ فاصله‌ای بین \f2varname\^\fP و \f3=\fP مجاز نیست. متغیر .I varname پیش از انتساب، لغو تعریف (unset) می‌شود. یک \f2assign_list\^\fP می‌تواند یکی از موارد زیر باشد: .RS 15 .PD 0 .TP \f2word\^\fP ... انتساب آرایه اندیسی. .TP \f3[\fP\f2word\^\fP\f3]=\fP\f2word\^\fP .\|.\|. انتساب آرایه انجمنی (Associative Array). اگر پیش از آن .B typeset \-a بیاید، در عوض یک آرایه اندیسی ایجاد خواهد شد. .TP \f2assignment\^\fP .\|.\|. انتساب متغیر ترکیبی (Compound Variable). این دستور یک متغیر ترکیبی به نام \f2varname\^\fP با زیرمتغیرهایی به فرم \f2varname\^\fP\f3.\fP\f2name\^\fP ایجاد می‌کند، که در آن \f2name\^\fP بخش نام در \f2assignment\^\fP است. مقدار \f2varname\^\fP شامل تمام عناصر انتساب خواهد بود. انتساب‌های اضافی ایجادشده برای زیرمتغیرهای \f2varname\^\fP نیز به عنوان بخشی از مقدار \f2varname\^\fP نمایش داده می‌شوند. اگر هیچ \f2assignment\fP مشخص نشود، \f2varname\^\fP یک متغیر ترکیبی خواهد بود که اجازه تعریف عناصر فرزند بعدی را می‌دهد. .TP \f3typeset\fP \*(OK\f2options\fP\*(CK \f2assignment\^\fP .\|.\|. انتساب متغیر تو‌در‌تو. انتساب‌های چندگانه را می‌توان با جدا کردن هر کدام با \f3;\fP مشخص کرد. مقدار قبلی پیش از انتساب، لغو تعریف (unset) می‌شود. سایر دستورات اعلان مانند .BR readonly ، .BR enum و سایر دستورات اعلان را می‌توان به جای .B typeset استفاده کرد. .TP \f3\|.\fP \f2filename\^\fP شامل کردن دستورات انتساب موجود در .IR filename . .PD .RE .PP علاوه بر این، می‌توان از \f3+=\fP به جای \f3=\fP استفاده کرد تا به معنای افزودن یا پیوست کردن به مقدار قبلی باشد. هنگامی که \f3+=\fP روی یک نوع محاسباتی اعمال شود، \f2word\^\fP به عنوان یک عبارت محاسباتی ارزیابی شده و به مقدار فعلی افزوده می‌شود. هنگامی که روی یک متغیر رشته‌ای اعمال شود، مقدار مشخص‌شده توسط \f2word\^\fP به مقدار قبلی پیوست می‌شود. برای انتساب‌های ترکیبی، مقدار قبلی لغو تعریف نمی‌شود و مقادیر جدید به مقادیر قبلی پیوست می‌شوند، به شرطی که نوع‌ها سازگار باشند. .PP سمت راست یک انتساب متغیر تحت تمام گسترش‌های ذکرشده در زیر به جز تفکیک کلمات، گسترش آکولاد و تولید نام فایل قرار می‌گیرد. هنگامی که سمت چپ یک انتساب، یک متغیر ترکیبی باشد و سمت راست نام یک متغیر ترکیبی باشد، متغیر ترکیبی سمت راست در متغیر ترکیبی سمت چپ کپی یا به آن پیوست خواهد شد. .SS "توضیحات (Comments)" .PD 0 کلمه‌ای که با .B # شروع شود باعث می‌شود آن کلمه و تمام نویسه‌های بعدی تا خط جدید نادیده گرفته شوند. .SS "نام مستعار (Aliasing)" کلمه اول هر دستور با متن یک .B alias جایگزین می‌شود اگر یک .B alias برای این کلمه تعریف شده باشد. یک نام .B alias شامل هر تعداد نویسه به جز فرا‌نویسه‌ها (Metacharacters)، نویسه‌های نقل‌قول، نویسه‌های گسترش فایل، نویسه‌های گسترش پارامتر و جایگزینی دستور، و نویسه‌های .B / و .B = است. رشته جایگزین می‌تواند شامل هر اسکریپت شل معتبری از جمله فرانویسه‌های ذکرشده در بالا باشد. کلمه اول هر دستور در متن جایگزین‌شده، به جز مواردی که در حال جایگزینی هستند، برای نام‌های مستعار بررسی خواهد شد. اگر آخرین نویسه مقدار نام مستعار یک .I blank\^ (فاصله یا تب) باشد، کلمه پس از نام مستعار نیز برای جایگزینی نام مستعار بررسی خواهد شد. نام‌های مستعار را می‌توان برای بازتعریف دستورات توکار استفاده کرد، اما نمی‌توان از آن‌ها برای بازتعریف کلمات رزروشده ذکرشده در بالا استفاده کرد. نام‌های مستعار را می‌توان با دستور .B alias ایجاد کرد و فهرست نمود و با دستور .B unalias آن‌ها را حذف کرد. .PP .I نام‌گذاری مستعار (Aliasing)\^ هنگامی که اسکریپت‌ها خوانده می‌شوند انجام می‌گیرد، نه در زمان اجرای آن‌ها. بنابراین، برای اینکه یک نام مستعار اعمال شود، دستور تعریف .B alias باید پیش از خوانده شدن دستوری که به نام مستعار ارجاع می‌دهد، اجرا شده باشد. .PP نام‌های مستعار زیر در شل کامپایل شده‌اند اما می‌توان آن‌ها را لغو تعریف یا بازتعریف کرد: .RS 20 .PD 0 .TP .B "autoload=\(fmtypeset \-fu\(fm" .TP .B "bool=\(fm_Bool\(fm" .TP .B "command=\(fmcommand \(fm" .TP .B "compound=\(fmtypeset \-C\(fm" .TP .B "fc=hist" .TP .B "float=\(fmtypeset \-lE\(fm" .TP .B "functions=\(fmtypeset \-f\(fm" .TP .B "hash=\(fmalias \-t \-\^\-\(fm" .TP .B "history=\(fmhist \-l\(fm" .TP .B "integer=\(fmtypeset \-li\(fm" .TP .B "nameref=\(fmtypeset \-n\(fm" .TP .B "nohup=\(fmnohup \(fm" .TP .B "r=\(fmhist \-s\(fm" .TP .B "redirect=\(fmcommand exec\(fm" .TP .B "source=\(fmcommand \s+2.\s-2\(fm" .TP .B "stop=\(fmkill \-s \s-1STOP\s+1\(fm" .TP .B "suspend=\(fmkill \-s \s-1STOP\s+1 \(dq$$\(dq\(fm" .TP .B "type=\(fmwhence \-v\(fm" .PD .RE .SS "جایگزینی مدک (Tilde Substitution)" پس از انجام جایگزینی نام مستعار، هر کلمه بررسی می‌شود تا مشخص شود آیا با یک .B \(ap (مدک) بدون نقل‌قول شروع می‌شود یا خیر. برای جایگزینی مدک، .I word\^ به بخش .I word\^ در گسترش پارامتر نیز اشاره دارد (بخش .I "گسترش متغیرها و پارامترها" در زیر را ببینید). اگر چنین باشد، کلمه تا یک .B / بررسی می‌شود تا مشخص شود آیا با نام کاربری در پایگاه‌داده گذرواژه‌ها مطابقت دارد یا خیر (نگاه کنید به .IR getpwname (3).) اگر تطابقی یافت شود، .B \(ap و نام کاربری منطبق با دایرکتوری ورود کاربر مربوطه جایگزین می‌شوند. اگر تطابقی یافت نشود، متن اصلی دست‌نخورده باقی می‌ماند. یک .B \(ap به تنهایی یا در جلوی یک .BR / ، با .SM .B $HOME جایگزین می‌شود. یک .B \(ap که پس از آن یک .B + یا .B \- بیاید، به ترتیب با مقدار .B .SM $PWD و .B .SM $OLDPWD جایگزین می‌شود. یک .B \(ap که پس از آن .BI { fd } بیاید که در آن .I fd\^ یک شماره توصیف‌کننده فایل (File Descriptor) یا نام متغیری است که مقدار آن یک توصیف‌کننده فایل است، با رشته‌ای جایگزین می‌شود که معادل مسیر فایل یا دایرکتوری مربوط به این توصیف‌کننده فایل است. .PP علاوه بر این، هنگام گسترش یک .IR "انتساب متغیر" ، جایگزینی .I مدک (tilde) زمانی که مقدار انتساب با یک .B \(ap شروع شود، و زمانی که یک .B \(ap پس از یک .B : ظاهر شود، انجام می‌گیرد. نویسه .B : همچنین پایان‌بخش یک نام ورود پس از .B \(ap است. .SS "جایگزینی دستور (Command Substitution)" خروجی استاندارد حاصل از یک لیست دستور محصور در پرانتز که قبل از آن یک علامت دلار قرار دارد ( \f3$(\fP\f2list\^\fP\f3)\fP )، یا در یک گروه آکولاد که قبل از آن یک علامت دلار قرار دارد ( \f3${ \fP\f2list\^\fP\f3;}\fP )، یا در یک جفت نقل‌قول وارون (\^\f3\*`\^\*`\fP\^) می‌تواند به عنوان بخشی از یک کلمه یا کل آن استفاده شود؛ خطوط جدید پایانی حذف می‌شوند. در حالت دوم، \f3{\fP و \f3}\fP به عنوان کلمات رزروشده در نظر گرفته می‌شوند به طوری که پس از \f3{\fP باید یک \f2blank\^\fP (فاصله یا تب) بیاید و \f3}\fP باید در ابتدای خط قرار گیرد یا پس از یک \f3;\fP بیاید. در حالت سوم (منسوخ)، رشته بین نقل‌قول‌ها پیش از اجرای دستور برای نویسه‌های نقل‌قول ویژه پردازش می‌شود (بخش .I نقل‌قول\^ در زیر را ببینید). جایگزینی دستور \^\f3$(\^cat file\^)\fP\^ را می‌توان با معادل سریع‌تر آن \^\f3$(\^(\fP\f2list\^\fP\f3)\fP فرآیند .I list را به صورت ناهمگام متصل به فایلی در .B /dev/fd (اگر این دایرکتوری وجود داشته باشد) یا یک لوله نام‌گذاری‌شده (FIFO) در دایرکتوری موقت اجرا می‌کند. نام این فایل به عنوان آرگومان به دستور داده می‌شود. اگر فرم با .B > انتخاب شود، نوشتن روی این فایل ورودی را برای .I list فراهم می‌کند. اگر از .B < استفاده شود، فایل ارائه‌شده به عنوان آرگومان، حاوی خروجی فرآیند .I list خواهد بود. به عنوان مثال، .PP .RS \f3paste <(cut \-f1\fP \f2file1\fP\f3) <(cut \-f3\fP \f2file2\f3) | tee >(\fP\f2process1\fP\f3) >(\fP\f2process2\fP\f3)\fP .RE .PP فیلدهای ۱ و ۳ را به ترتیب از فایل‌های .I file1 و .I file2 استخراج می‌کند (cut)، نتایج را با هم ترکیب می‌کند (paste)، و آن را به فرآیندهای .I process1 و .IR process2 می‌فرستد، و همچنین آن را در خروجی استاندارد قرار می‌دهد. توجه داشته باشید فایلی که به عنوان آرگومان به دستور داده می‌شود، یک لوله .IR pipe (2) یونیکس است، بنابراین برنامه‌هایی که انتظار دارند روی فایل .IR lseek (2) انجام دهند کار نخواهند کرد. .PP جایگزینی فرآیند به فرم \f3<(\fP\f2list\^\fP\f3)\fP می‌تواند همراه با عملگر تغییر مسیر .B < نیز استفاده شود که باعث می‌شود خروجی .I list\^ به ورودی استاندارد یا ورودی هر توصیف‌کننده فایل مشخص‌شده تبدیل شود. .SS "گسترش متغیرها و پارامترها (Parameter Expansion)" یک .I پارامتر\^ یک .IR متغیر ، یک یا چند رقم، یا هر یک از نویسه‌های .BR * ، .BR @ ، .BR # ، .BR ? ، .BR \- ، .BR $ و .BR !\\^ است. یک .I متغیر\^ با یک \f2vname\fP مشخص می‌شود. برای ایجاد متغیری که .I vname\^ آن حاوی یک \f3\s+2.\s-2\fP باشد، متغیری که .I vname\^ آن شامل همه‌چیز قبل از آخرین \f3\s+2.\s-2\fP است باید از قبل وجود داشته باشد. یک .I متغیر\^ دارای یک .I مقدار\^ و صفر یا چند .IR ویژگی (Attribute) است. می‌توان با استفاده از دستور توکار ویژه .B typeset\^ به .I متغیرها\^ .I مقدار\^ و .I ویژگی اختصاص داد. ویژگی‌های پشتیبانی‌شده توسط شل بعداً همراه با دستور توکار ویژه .B typeset\^ توضیح داده شده‌اند. متغیرهای صادرشده (Exported)، مقادیر و ویژگی‌ها را به محیط (Environment) انتقال می‌دهند. .PP شل هم از آرایه‌های اندیسی و هم از آرایه‌های انجمنی پشتیبانی می‌کند. یک عنصر از متغیر آرایه‌ای با یک .IR زیرنویس/اندیس (Subscript) مورد ارجاع قرار می‌گیرد. یک .I زیرنویس\^ برای آرایه اندیسی با یک .I عبارت محاسباتی\^ (بخش .I "ارزیابی محاسباتی" در زیر را ببینید) بین یک .B [ و یک .B ] مشخص می‌شود. برای انتساب مقادیر به یک آرایه اندیسی، از \f2vname\fP\f3=(\fP\f2value\fP .\|.\|.\f3)\fP یا \f3set \-A\fP \f2vname\fP \f2value\fP .\|.\|. استفاده کنید. مقدار تمام زیرنویس‌های غیرمنفی باید در محدوده 0 تا 4,194,303 باشد. یک زیرنویس منفی به عنوان یک آفست از بیشینه اندیس فعلی + 1 در نظر گرفته می‌شود به طوری که \-1 به آخرین عنصر اشاره دارد. آرایه‌های اندیسی را می‌توان با گزینه .B \-a در .B typeset اعلان کرد. آرایه‌های اندیسی نیازی به اعلان ندارند. هرگونه ارجاع به یک متغیر با یک زیرنویس معتبر، مجاز است و در صورت لزوم یک آرایه ایجاد خواهد شد. .PP یک آرایه انجمنی با گزینه .B \-A در .B typeset ایجاد می‌شود. یک .I زیرنویس\^ برای آرایه انجمنی با یک رشته محصور بین .B [ و .B ] مشخص می‌شود. .PP ارجاع به هر آرایه‌ای بدون زیرنویس، معادل ارجاع به آن آرایه با زیرنویس 0 است. .PP .I مقدار\^ یک .I متغیر\^ را می‌توان به صورت زیر انتساب داد: .PP .RS .IB vname = value\^\| \*(OK .IB vname = value\^ \*(CK .\|.\|. .RE .PP .PD 0 یا .PP .RS .IB vname [ subscript ]= value\^\| \*(OK .IB vname [ subscript ]= value\^ \*(CK .\|.\|. .sp .5 .RE توجه داشته باشید که هیچ فاصله‌ای قبل یا بعد از .B = مجاز نیست. .sp .5 .PP .PD 0 ویژگی‌های اختصاص‌یافته توسط دستور توکار ویژه .I typeset\^ روی تمام عناصر آرایه اعمال می‌شوند. یک عنصر آرایه می‌تواند متغیر ساده، متغیر ترکیبی یا متغیر آرایه‌ای باشد. یک عنصر آرایه اندیسی می‌تواند آرایه اندیسی یا آرایه انجمنی باشد. یک عنصر آرایه انجمنی نیز می‌تواند هر کدام از این‌ها باشد. برای ارجاع به یک عنصر آرایه که خود بخشی از یک عنصر آرایه است، زیرنویس‌ها را در براکت‌ها به هم متصل کنید. به عنوان مثال، برای ارجاع به عنصر .I foobar\^ از یک آرایه انجمنی که به عنوان سومین عنصر آرایه اندیسی تعریف شده است، از .BI ${ vname [ 3 ][ foobar ]} استفاده کنید. .sp .5 .PP .PD 0 یک .I مرجع‌نام (nameref)\^ متغیری است که ارجاعی به یک متغیر دیگر است. یک nameref با ویژگی .B \-n در .B typeset ایجاد می‌شود. مقدار متغیر در زمان اجرای دستور .B typeset تبدیل به متغیری می‌شود که هر زمان متغیر nameref استفاده شود، به آن ارجاع داده خواهد شد. نام یک nameref نمی‌تواند حاوی \fB\s+2.\s-2\fP باشد. هنگامی که نام یک متغیر یا تابع حاوی \fB\s+2.\s-2\fP باشد، و بخشی از نام تا اولین \fB\s+2.\s-2\fP با نام یک nameref مطابقت داشته باشد، متغیر مورد ارجاع با جایگزین کردن بخش nameref با نام متغیر ارجاع‌شده توسط nameref به دست می‌آید. اگر یک nameref به عنوان اندیس یک حلقه \fBfor\fP استفاده شود، یک مرجع نام برای هر آیتم در لیست برقرار می‌شود. یک nameref روشی مناسب برای ارجاع به متغیر داخل تابعی فراهم می‌کند که نام آن به عنوان آرگومان به تابع ارسال شده است. به عنوان مثال، اگر نام یک متغیر به عنوان اولین آرگومان به یک تابع ارسال شود، دستور .PP .RS \fBtypeset \-n var=$1\fR .RE .PP درون تابع باعث می‌شود که ارجاعات و انتساب‌ها به .B var همان ارجاعات و انتساب‌ها به متغیری باشد که نام آن به تابع ارسال شده است. .sp .5 .PP اگر هر یک از ویژگی‌های ممیز شناور، .BR \-E ، .BR \-F یا .BR \-X ، یا ویژگی عدد صحیح، .BR \-i ، برای .IR vname تنظیم شده باشد، آن‌گاه .I مقدار\^ مشمول ارزیابی محاسباتی به شرح زیر می‌شود. .sp .5 .PP پارامترهای موضعی (Positional Parameters)، پارامترهایی که با یک عدد مشخص می‌شوند، می‌توانند با دستور توکار ویژه .B set\^ مقداردهی شوند. پارامتر .B $0 هنگام فراخوانی شل از روی آرگومان صفر تنظیم می‌شود. .sp .5 .PP نویسه .B $ برای معرفی .IR "پارامترهای قابل جایگزینی" به کار می‌رود. .TP \f3${\fP\f2parameter\^\fP\f3}\fP شل تمام نویسه‌ها را از .B ${ تا .B } منطبق به عنوان بخشی از همان کلمه می‌خواند حتی اگر حاوی آکولادها یا فرانویسه‌ها باشد. مقدار پارامتر (در صورت وجود) جایگزین می‌شود. استفاده از آکولادها زمانی الزامی است که پس از .I parameter\^ یک حرف، رقم یا زیرخط (underscore) بیاید که نباید به عنوان بخشی از نام آن تفسیر شود، یا زمانی که نام متغیر حاوی یک \fB\s+2.\s-2\fP باشد. همچنین آکولادها زمانی که یک متغیر دارای زیرنویس است الزامی هستند، مگر اینکه بخشی از یک عبارت محاسباتی یا عبارت شرطی باشد. اگر .I parameter\^ یک یا چند رقم باشد، یک پارامتر موضعی است. یک پارامتر موضعی با بیش از یک رقم باید درون آکولاد قرار گیرد. اگر .I parameter\^ برابر با .B * یا .B @ باشد، تمام پارامترهای موضعی با شروع از .BR $1 جایگزین می‌شوند (که با یک نویسه جداکننده فیلد از هم جدا می‌شوند). اگر یک متغیر آرایه‌ای .I vname\^ با آخرین زیرنویس .BR * ، .B @ یا برای آرایه‌های اندیسی به فرم .I sub1\^ .B .. .IR sub2 استفاده شود، آن‌گاه مقدار هر یک از عناصر بین .I sub1\^ و .I sub2\^ شامل خود آن‌ها (یا تمام عناصر برای .B * و .BR @ ) جایگزین می‌شود، که با اولین نویسه از مقدار .SM .B IFS از یکدیگر جدا می‌شوند. .TP \f3${#\fP\f2parameter\^\fP\f3}\fP اگر .I parameter\^ برابر با .B * یا .B @ باشد، تعداد پارامترهای موضعی جایگزین می‌شود. در غیر این صورت، طول مقدار .I parameter\^ جایگزین می‌شود. .TP .PD 0 \f3${#\fP\f2vname\fP\f3[*]}\fP .TP .PD \f3${#\fP\f2vname\fP\f3[@]}\fP تعداد عناصر موجود در آرایه .I vname\^ جایگزین می‌شود. .TP .PD 0 \f3${@\fP\f2vname\^\fP\f3}\fP به نام نوع داده (بخش .I "متغیرهای نوع داده (Type Variables)"\^ در زیر را ببینید) یا ویژگی‌های متغیر ارجاع‌شده توسط .IR vname گسترش می‌یابد. .TP \f3${$\fP\f2parameter\^\fP\f3}\fP اگر \f3$\fP\f2parameter\fP به نام یک متغیر گسترش یابد، این عبارت به مقدار آن متغیر گسترش می‌یابد. در غیر این صورت، به رشته خالی گسترش می‌یابد. این مورد برای پارامترهای ویژه تعریف نشده است. .TP \f3${!\fP\f2vname\^\fP\f3}\fP به نام متغیر ارجاع‌شده توسط .IR vname گسترش می‌یابد. این مقدار برابر با .I vname\^ خواهد بود به جز زمانی که .I vname\^ یک ارجاع به نام (nameref) باشد. .TP \f3${!\fP\f2vname\^\fP\f3[\f2subscript\^\f3]}\fP به نام اندیس گسترش می‌یابد مگر اینکه .I subscript\^ برابر با .BR * ، .BR @ یا به فرم .I sub1\^ .B .. .IR sub2 باشد. هنگامی که .I subscript\^ برابر .BR * باشد، فهرست اندیس‌های آرایه برای \f2vname\^\fP تولید می‌شود. برای متغیری که آرایه نیست، در صورت مقداردهی بودن متغیر، مقدار 0 خواهد بود؛ در غیر این صورت تهی (null) است. هنگامی که .I subscript\^ برابر .BR @ باشد، همانند بالا عمل می‌کند، با این تفاوت که هنگام استفاده در نقل‌قول دوگانه (double quotes)، هر اندیس آرایه به عنوان یک آرگومان مجزا تولید می‌شود. هنگامی که .I subscript\^ به فرم .I sub1\^ .B .. .I sub2\^ باشد، به فهرست اندیس‌های بین .I sub1\^ تا .I sub2\^ (شامل هر دو) با استفاده از همان قوانین نقل‌قول .BR @ گسترش می‌یابد. .TP \f3${!\fP\f2prefix\^\fP\f3*}\fP به نام‌های متغیرهایی که نام آن‌ها با .I prefix آغاز می‌شود گسترش می‌یابد. .TP \f3${\fP\f2parameter\^\fP\f3:\-\fP\f2word\^\fP\f3}\fP اگر .I parameter\^ مقداردهی شده و غیرتهی باشد، مقدار آن جایگزین می‌شود؛ در غیر این صورت .I word جایگزین می‌گردد. .TP \f3${\fP\f2parameter\^\fP\f3:=\fP\f2word\^\fP\f3}\fP اگر .I parameter\^ مقداردهی نشده یا تهی باشد، مقدار آن برابر .I word تنظیم می‌شود؛ سپس مقدار پارامتر جایگزین می‌گردد. پارامترهای موضعی (Positional parameters) را نمی‌توان از این طریق مقداردهی کرد. .TP \f3${\fP\f2parameter\^\fP\f3:?\fP\f2word\^\fP\f3}\fP اگر .I parameter\^ مقداردهی شده و غیرتهی باشد، مقدار آن جایگزین می‌شود؛ در غیر این صورت، .I word\^ چاپ شده و شل خاتمه می‌یابد (در صورتی که غیرتعاملی باشد). اگر .I word\^ حذف شود، یک پیام استاندارد چاپ می‌شود. .TP \f3${\fP\f2parameter\^\fP\f3:+\fP\f2word\^\fP\f3}\fP اگر .I parameter\^ مقداردهی شده و غیرتهی باشد، .I word جایگزین می‌شود؛ در غیر این صورت هیچ چیز جایگزین نمی‌گردد. .PP در موارد بالا، .I word\^ ارزیابی نمی‌شود مگر آنکه قرار باشد به عنوان رشته جایگزین استفاده شود؛ به طوری که در مثال زیر، .B pwd تنها در صورتی اجرا می‌شود که .B d مقداردهی نشده یا تهی باشد: .PP .RS print \|${d:\-\^$(\^pwd\^)\^} .RE .PP اگر دونقطه ( .B : ) از عبارات فوق حذف شود، شل فقط مقداردهی بودن یا نبودن .I parameter\^ را بررسی می‌کند. .TP .PD 0 \f3${\fP\f2parameter\^\fP\f3:\fP\f2offset\^\fP\f3:\fP\f2length\^\fP\f3}\fP .TP \f3${\fP\f2parameter\^\fP\f3:\fP\f2offset\^\fP\f3}\fP به بخشی از مقدار .I parameter\^ گسترش می‌یابد که از کاراکتری (شمارش از .BR 0\^ ) مشخص‌شده با ارزیابی .I offset\^ به عنوان یک عبارت حسابی آغاز شده و شامل تعداد کاراکترهایی است که با عبارت حسابی تعریف‌شده توسط .IR length مشخص می‌شود. در حالت دوم، باقی‌مانده مقدار استفاده می‌شود. مقدار منفی برای .I offset\^ از انتهای .I parameter به سمت عقب شمارش می‌شود. توجه داشته باشید که قرار دادن یک یا چند فاصله (blank) قبل از علامت منفی الزامی است تا از تفسیر عملگر به عنوان .B :\^-\^ توسط شل جلوگیری شود. اگر .I parameter\^ برابر .B * یا .BR @ باشد، یا نام یک آرایه با اندیس .B * یا .BR @ باشد، آنگاه .I offset\^ و .I length\^ به ترتیب به اندیس آرایه و تعداد عناصر اشاره دارند. مقدار منفی .I offset\^ برای آرایه‌های اندیسی نسبت به یک واحد بیشتر از بالاترین اندیس در نظر گرفته می‌شود. ترتیب در آرایه‌های انجمنی (associative arrays) نامشخص است. .TP .PD 0 \f3${\fP\f2parameter\^\fP\f3#\fP\f2pattern\^\fP\f3}\fP .TP \f3${\fP\f2parameter\^\fP\f3##\fP\f2pattern\^\fP\f3}\fP .PD اگر الگوی شل ( .IR pattern\^ ) با ابتدای مقدار .I parameter تطابق داشته باشد، مقدار این گسترش همان مقدار .I parameter\^ با حذف بخش منطبق‌شده خواهد بود؛ در غیر این صورت مقدار .I parameter\^ جایگزین می‌شود. در حالت اول کوچک‌ترین الگوی منطبق و در حالت دوم بزرگ‌ترین الگوی منطبق حذف می‌شود. هنگامی که .I parameter\^ برابر .BR @ ، .BR * یا یک متغیر آرایه‌ای با اندیس .B @ یا .BR * باشد، عملیات زیررشته به نوبت روی تک‌تک عناصر اعمال می‌شود. .TP .PD 0 \f3${\fP\f2parameter\^\fP\f3%\fP\f2pattern\^\fP\f3}\fP .TP \f3${\fP\f2parameter\^\fP\f3%%\fP\f2pattern\^\fP\f3}\fP .PD اگر الگوی شل ( .IR pattern\^ ) با انتهای مقدار .I parameter تطابق داشته باشد، مقدار این گسترش همان مقدار .I parameter\^ با حذف بخش منطبق‌شده خواهد بود؛ در غیر این صورت مقدار .I parameter جایگزین می‌شود. در حالت اول کوچک‌ترین الگوی منطبق و در حالت دوم بزرگ‌ترین الگوی منطبق حذف می‌شود. هنگامی که .I parameter\^ برابر .BR @ ، .BR * یا یک متغیر آرایه‌ای با اندیس .B @ یا .BR * باشد، عملیات زیررشته به نوبت روی تک‌تک عناصر اعمال می‌شود. .TP .PD 0 \f3${\fP\f2parameter\^\fP\f3/\fP\f2pattern\^\fP\f3/\f2string\^\fP\f3}\fP .TP \f3${\fP\f2parameter\^\fP\f3//\fP\f2pattern\^\fP\f3/\f2string\^\fP\f3}\fP .TP \f3${\fP\f2parameter\^\fP\f3/#\fP\f2pattern\^\fP\f3/\f2string\^\fP\f3}\fP .TP \f3${\fP\f2parameter\^\fP\f3/%\fP\f2pattern\^\fP\f3/\f2string\^\fP\f3}\fP .PD مقدار .I parameter\^ را گسترش داده و طولانی‌ترین تطابق .I pattern\^ را با .IR string داده‌شده جایگزین می‌کند. هر رخداد \f3\e\fP\f2n\^\fP در .I string با بخشی از \f2parameter\^\fP که با \f2n\^\fP-امین زیرالگو تطابق دارد جایگزین می‌شود. در حالت اول، تنها اولین رخداد .I pattern\^ جایگزین می‌شود. در حالت دوم، تمام تطابق‌های .I pattern\^ با .IR string داده‌شده جایگزین می‌گردند. حالت سوم تطابق الگو را به ابتدای رشته محدود می‌کند، در حالی که حالت چهارم تطابق الگو را به انتهای رشته محدود می‌سازد. هنگامی که .I string\^ تهی باشد، .I pattern\^ حذف خواهد شد و .B / قبل از .I string\^ می‌تواند حذف شود. هنگامی که .I parameter\^ برابر .BR @ ، .BR * یا یک متغیر آرایه‌ای با اندیس .B @ یا .BR * باشد، عملیات جایگزینی به نوبت روی هر عنصر اعمال می‌شود. در این حالت، بخش .I string\^ از .I word\^ برای هر عنصر مجدداً ارزیابی خواهد شد. .TP .PD 0 \f3${\fP\f2parameter\^\fP\f3^\fP\f2pattern\^\fP\f3}\fP .TP \f3${\fP\f2parameter\^\fP\f3^^\fP\f2pattern\^\fP\f3}\fP .TP \f3${\fP\f2parameter\^\fP\f3,\fP\f2pattern\^\fP\f3}\fP .TP \f3${\fP\f2parameter\^\fP\f3,,\fP\f2pattern\^\fP\f3}\fP .PD تغییر بزرگی و کوچکی حروف (Case modification). این گسترش بزرگی و کوچکی حروف الفبایی را در پارامتر تغییر می‌دهد. \f2pattern\fP درست مانند گسترش نام مسیر برای تولید الگو گسترش می‌یابد. عملگر \f3^\fP حروف کوچک منطبق با \f2pattern\fP را به حروف بزرگ تبدیل می‌کند. عملگر \f3,\fP حروف بزرگ منطبق را به حروف کوچک تبدیل می‌کند. گسترش‌های \f3^^\fP و \f3,,\fP تمام کاراکترهای منطبق را در مقدار گسترش‌یافته تبدیل می‌کنند. گسترش‌های \f3^\fP و \f3,\fP تنها اولین کاراکتر در مقدار گسترش‌یافته را تطابق داده و تبدیل می‌کنند. اگر الگو حذف شود، همانند \f2?\fP رفتار می‌شود که با هر کاراکتری تطابق دارد. اگر \f2parameter\fP برابر \f3@\fP یا \f3*\fP باشد، یا یک آرایه با اندیس \f3@\fP یا \f3*\fP باشد، عملیات تغییر حالت حروف روی تک‌تک عناصر اعمال می‌شود. .PP پارامترهای زیر به طور خودکار توسط شل تنظیم می‌شوند: .RS .PD 0 .TP .B # تعداد پارامترهای موضعی در مبنای ده. .TP .B \- گزینه‌های ارائه‌شده به شل هنگام فراخوانی یا توسط دستور .BR set . .TP .B ? مقدار ده‌دهی بازگردانده‌شده توسط آخرین دستور اجراشده. .TP .B $ شماره پردازه (PID) این شل. .TP .B _ در ابتدا، مقدار .B _ مسیر مطلق شل یا اسکریپت در حال اجراست که در .I محیط (environment) ارسال شده است. سپس آخرین آرگومان دستور قبلی به آن اختصاص می‌یابد. این پارامتر برای دستوراتی که ناهمگام (asynchronous) هستند تنظیم نمی‌شود. همچنین این پارامتر برای نگهداری نام فایل منطبق‌شده .B .SM MAIL هنگام بررسی نامه‌ها استفاده می‌شود. هنگام تعریف یک متغیر مرکب (compound variable) یا یک نوع (type)، .B _ به عنوان ارجاعی به آن متغیر مرکب یا نوع مقداردهی اولیه می‌شود. هنگامی که یک تابع دیسیپلین (discipline function) فراخوانی می‌شود، .B _ به عنوان ارجاعی به متغیر مرتبط با فراخوانی این تابع مقداردهی اولیه می‌شود. در نهایت هنگامی که .B _ به عنوان نام اولین متغیر در تعریف یک نوع استفاده شود، نوع جدید از نوع اولین متغیر مشتق می‌شود (بخش .I "Type Variables"\^ در ادامه را ببینید). .TP .B ! شناسه پردازه (PID) یا نام استخر (pool) و شماره کار آخرین دستور پس‌زمینه فراخوانی‌شده، یا جدیدترین کاری که با دستور توکار .B bg به پس‌زمینه فرستاده شده است. کارهای پس‌زمینه که در یک استخر نام‌گذاری‌شده شروع شده‌اند به فرم .IB pool . number خواهند بود که در آن .I pool\^ نام استخر و .I number\^ شماره کار در آن استخر است. .TP .B .sh.command هنگام پردازش تله (trap) .SM .B DEBUG این متغیر شامل خط فرمان فعلی است که در آستانه اجرا قرار دارد. .TP .B .sh.edchar این متغیر شامل مقدار کاراکتر صفحه‌کلید (یا توالی کاراکترها در صورتی که اولین کاراکتر یک ESC با کد اسکی .BR 033\^ باشد) است که هنگام پردازش تله .B .SM KEYBD وارد شده است (بخش .I "Key Bindings\^" در ادامه را ببینید). اگر مقدار به عنوان بخشی از کنش تله تغییر داده شود، مقدار جدید جایگزین کلید (یا توالی کلیدها) که باعث ایجاد تله شده بود می‌شود. .TP .B .sh.edcol موقعیت کاراکتری مکان‌نما در زمان وقوع جدیدترین تله .B .SM KEYBD .TP .B .sh.edmode هنگام پردازش تله .B .SM KEYBD در حالت درج ویرایشگر .BR vi ، مقدار آن برابر ESC تنظیم می‌شود (بخش .I "Vi Editing Mode"\^ در ادامه را ببینید). در غیر این صورت، .B .sh.edmode هنگام پردازش تله .B .SM KEYBD تهی (null) است. .TP .B .sh.edtext کاراکترهای موجود در بافر ورودی در زمان وقوع جدیدترین تله .B .SM KEYBD هنگامی که تله .B .SM KEYBD در حال پردازش نباشد، مقدار آن تهی است. .TP .B .sh.file نام مسیر فایلی که شامل دستور فعلی است. .TP .B .sh.fun نام تابع فعلی که در حال اجراست. .TP .B .sh.level عمق تابع فعلی. این متغیر را می‌توان درون یک تله DEBUG تغییر داد و با این کار بافتار (context) روی سطح مشخص‌شده تنظیم می‌شود. .TP .B .sh.lineno در طول یک تله DEBUG روی شماره خط فراخواننده هر تابع تنظیم می‌شود. .TP .B .sh.match یک آرایه اندیسی که جدیدترین تطابق و تطابق‌های زیرالگو را پس از تطابق‌های شرطی الگو و پس از گسترش‌های متغیر با استفاده از عملگرهای .BR # ، .BR % یا .BR / ذخیره می‌کند. عنصر .BR 0 -ام تطابق کامل و عنصر .IR i\^ -ام .IR i\^ -امین زیرتطابق را ذخیره می‌کند. برای .B // آرایه دوبعدی است که در آن اندیس اول نشان‌دهنده جدیدترین تطابق و تطابق زیرالگو است و اندیس دوم نشان می‌دهد کدام تطابق مد نظر است که .B 0 نمایانگر اولین تطابق است. متغیر .B .sh.match هنگامی که به متغیر گسترش‌یافته مقدار جدیدی اختصاص یابد، حذف (unset) می‌شود. .TP .B .sh.math برای تعریف توابع حسابی استفاده می‌شود (بخش .I "Arithmetic evaluation" در ادامه را ببینید) و فهرست توابع حسابی تعریف‌شده توسط کاربر را ذخیره می‌کند. .TP .B .sh.name در زمان فراخوانی یک تابع دیسیپلین، روی نام متغیر تنظیم می‌شود. .TP .B .sh.op_astbin دایرکتوری که چندین دستور توکار شل به آن متصل (bound) شده‌اند. پیش‌فرض .BR /opt/ast/bin است. هنگامی که مقدار آن .BR /bin باشد، دستورات توکار بسته به اینکه فایل اجرایی در کجا پیدا شود به .B /bin یا .B /usr/bin متصل خواهند شد. این متغیر را می‌توان با گنجاندن آن در متغیر .B .SM SH_OPTIONS تنظیم کرد. .TP .B .sh.pgrp گروه پردازه (process group) فعلی این شل. .TP .B .sh.pwdfd شماره توصیف‌کننده فایل (file descriptor) برای دایرکتوری کاری جاری. .TP .B .sh.sig هنگام اجرای یک تله، روی اطلاعات موجود در ساختار siginfo_t تنظیم می‌شود (برای توضیحات این ساختار به .IR siginfo (2) مراجعه کنید). .TP .B .sh.subscript در زمان فراخوانی یک تابع دیسیپلین، روی نام اندیس متغیر تنظیم می‌شود. .TP .B .sh.subshell عمق فعلی برای زیرشل‌ها و جایگزینی دستور. .TP .B .sh.value در زمان فراخوانی تابع دیسیپلین .B set یا .BR append ، روی مقدار متغیر تنظیم می‌شود. هنگامی که یک تابع حسابی تعریف‌شده توسط کاربر فراخوانی می‌شود، مقدار .B .sh.value ذخیره شده و .B .sh.value روی ممیز شناور با دقت مضاعف طولانی (long double precision) تنظیم می‌شود. با بازگشت تابع، .B .sh.value به حالت قبل بازگردانده می‌شود. .TP .B .sh.version روی مقداری تنظیم می‌شود که نسخه این شل را مشخص می‌کند. .TP .B .SM KSH_VERSION یک ارجاع نامی (name reference) به .BR .sh.version . .TP .B .SM LINENO شماره خط جاری در اسکریپت یا تابع در حال اجرا. .TP .B .SM OLDPWD دایرکتوری کاری قبلی که توسط دستور .B cd تنظیم شده است. .TP .B .SM OPTARG مقدار آخرین آرگومان گزینه که توسط دستور توکار .B getopts پردازش شده است. .TP .B .SM OPTIND اندیس آخرین آرگومان گزینه که توسط دستور توکار .B getopts پردازش شده است. .TP .B .SM PPID شماره پردازه والد شل. .TP .B .SM PWD دایرکتوری کاری جاری که توسط دستور .B cd تنظیم شده است. .TP .B .SM RANDOM هر بار که به این متغیر ارجاع داده شود، یک عدد صحیح تصادفی با توزیع یکنواخت بین 0 و 32767 تولید می‌شود. توالی اعداد تصادفی را می‌توان با انتساب یک مقدار عددی به .SM .BR RANDOM مقداردهی اولیه کرد. .TP .B .SM REPLY این متغیر توسط عبارت .B select و توسط دستور توکار .B read در صورتی که هیچ آرگومانی ارائه نشده باشد تنظیم می‌شود. .TP .B .SM SECONDS هر بار که به این متغیر ارجاع داده شود، تعداد ثانیه‌های سپری‌شده از زمان فراخوانی شل بازگردانده می‌شود. اگر به این متغیر مقداری اختصاص یابد، مقدار بازگردانده‌شده در هنگام ارجاع برابر با مقدار اختصاص‌یافته به علاوه تعداد ثانیه‌های سپری‌شده از زمان انتساب خواهد بود. .TP .SM .B SHLVL یک متغیر عدد صحیح که با هر بار فراخوانی شل افزایش یافته و صادر (export) می‌شود. اگر هنگام فراخوانی شل، .SM .B SHLVL در محیط وجود نداشته باشد، روی 1 تنظیم می‌شود. .PD .RE .PP متغیرهای زیر توسط شل استفاده می‌شوند: .RS .PD 0 .TP .B .SM CDPATH مسیر جستجو برای دستور .BR cd . .TP .B .SM COLUMNS در صورت تنظیم بودن این متغیر، مقدار آن برای تعیین عرض پنجره ویرایش در حالت‌های ویرایش شل و برای چاپ فهرست‌های .B select استفاده می‌شود. .TP .B .SM EDITOR اگر متغیر .B .SM VISUAL تنظیم نشده باشد، مقدار این متغیر بر اساس الگوهای شرح‌داده‌شده در .B .SM VISUAL در زیر بررسی می‌شود و گزینه ویرایشی متناظر (بخش دستور ویژه .B set در ادامه را ببینید) فعال خواهد شد. .TP .SM .B ENV اگر این متغیر تنظیم شده باشد، گسترش پارامتر، جایگزینی دستور و جایگزینی حسابی روی مقدار آن انجام می‌شود تا نام مسیر اسکریپتی تولید شود که در هنگام فراخوانی تعاملی شل اجرا خواهد شد (بخش .I Invocation\^ در ادامه را ببینید). این فایل معمولاً برای تعریف .B alias و .B function استفاده می‌شود. مقدار پیش‌فرض .BR \s-1$HOME\s+1/\f3.\fPkshrc است. در سیستم‌هایی که از فایل راه‌اندازی سراسری سیستم \fB/etc/ksh.kshrc\fP پشتیبانی می‌کنند، اگر نام فایل تولیدشده از گسترش .SM .B ENV با .B /./ یا .B .\^/.\^/ آغاز شود، فایل راه‌اندازی سراسری سیستم اجرا نخواهد شد. .TP .B .SM FCEDIT نام منسوخ‌شده برای نام ویرایشگر پیش‌فرض در دستور .BR hist . در صورت تنظیم بودن .B .SM HISTEDIT از .B .SM FCEDIT استفاده نمی‌شود. .TP .SM .B FIGNORE الگویی که مجموعه‌ای از نام‌های فایل را تعریف می‌کند که هنگام تطابق نام فایل نادیده گرفته می‌شوند. .TP .SM .B FPATH مسیر جستجو برای تعاریف توابع. هنگامی که به تابعی با ویژگی .B \-u ارجاع داده شود و هنگامی که دستوری پیدا نشود، دایرکتوری‌های موجود در این مسیر برای یافتن فایلی هم‌نام با تابع یا دستور جستجو می‌شوند. اگر یک فایل اجرایی با نام آن دستور پیدا شود، خوانده شده و در محیط جاری اجرا می‌گردد. برخلاف .SM .BR PATH ، دایرکتوری جاری باید به صورت صریح با .B . نشان داده شود، نه با کاراکترهای .B : مجاور یا .B : در ابتدا یا انتها. .TP .B .SM HISTCMD شماره دستور جاری در فایل تاریخچه. .TP .B .SM HISTEDIT نام ویرایشگر پیش‌فرض برای دستور .BR hist . .TP .SM .B HISTFILE اگر این متغیر هنگام فراخوانی شل تنظیم شده باشد، مقدار آن نام مسیر فایلی است که برای ذخیره تاریخچه دستورات استفاده خواهد شد (بخش .I "Command Re-entry\^" در ادامه را ببینید). .TP .SM .B HISTSIZE اگر این متغیر هنگام فراخوانی شل تنظیم شده باشد، تعداد دستورات واردشده قبلی که برای این شل قابل دسترس هستند، بزرگ‌تر یا مساوی این عدد خواهد بود. پیش‌فرض 512 است. .TP .B .SM HOME آرگومان پیش‌فرض (دایرکتوری خانگی) برای دستور .BR cd . .TP .SM .B IFS جداکننده‌های فیلد داخلی (Internal field separators)، معمولاً .BR space ، .BR tab و .B new-line که برای جداسازی نتایج جایگزینی دستور یا گسترش پارامتر و جداسازی فیلدها با دستور توکار .B read استفاده می‌شوند. اولین کاراکتر متغیر .SM .B IFS برای جداسازی آرگومان‌ها در جایگزینی .B "$*" استفاده می‌شود (بخش .I Quoting در ادامه را ببینید). هر رخداد تکی از یک کاراکتر .SM .B IFS در رشته‌ای که باید تفکیک شود، که در کلاس کاراکتری \f2isspace\^\fP نباشد، و هر کاراکتر مجاور در .SM .B IFS که در کلاس کاراکتری \f2isspace\^\fP باشد، مرز یک فیلد را مشخص می‌کند. یک یا چند کاراکتر در .SM .B IFS که متعلق به کلاس کاراکتری \f2isspace\^\fP باشند، مرز یک فیلد را تعیین می‌کنند. علاوه بر این، اگر همان کاراکتر \f2isspace\^\fP به طور متوالی درون .SM .BR IFS ، ظاهر شود، با این کاراکتر به گونه‌ای رفتار می‌شود که گویی در کلاس \f2isspace\^\fP نیست؛ بنابراین اگر .SM .B IFS شامل دو کاراکتر .B tab باشد، دو کاراکتر مجاور .B tab مرز یک فیلد تهی (null) را تعیین می‌کنند. .TP .B .SM JOBMAX این متغیر حداکثر تعداد کارهای پس‌زمینه در حال اجرا را تعریف می‌کند که می‌توانند همزمان اجرا شوند. هنگامی که این محدودیت حاصل شود، شل قبل از شروع یک کار جدید منتظر تکمیل یک کار می‌ماند. .TP .B .SM LANG این متغیر دسته محلی (locale category) را برای هر دسته‌ای که به طور خاص با متغیری که با .B .SM LC_ یا .SM .B LANG آغاز می‌شود انتخاب نشده باشد، تعیین می‌کند. .TP .B .SM LC_ALL این متغیر مقدار متغیر .B .SM LANG و هر متغیر دیگر .B .SM LC_ را لغو (override) می‌کند. .TP .B .SM LC_COLLATE این متغیر دسته محلی را برای اطلاعات تطبیق و مرتب‌سازی کاراکترها (collation) تعیین می‌کند. .TP .B .SM LC_CTYPE این متغیر دسته محلی را برای توابع مدیریت کاراکتر تعیین می‌کند. این متغیر کلاس‌های کاراکتری را برای تطابق الگو تعیین می‌نماید (بخش .I "File Name Generation\^" در ادامه را ببینید). .TP .B .SM LC_NUMERIC این متغیر دسته محلی را برای کاراکتر ممیز اعشاری تعیین می‌کند. .TP .B .SM LINES در صورت تنظیم بودن این متغیر، مقدار آن برای تعیین طول ستون در چاپ فهرست‌های .B select استفاده می‌شود. فهرست‌های انتخابی به صورت عمودی چاپ می‌شوند تا حدود دو سوم خطوط .B .SM LINES پر شود. .TP .B .SM MAIL اگر این متغیر روی نام یک فایل نامه تنظیم شده باشد .I و\^ متغیر .B .SM MAILPATH تنظیم نشده باشد، شل کاربر را از رسیدن نامه در فایل مشخص‌شده مطلع می‌سازد. .TP .B .SM MAILCHECK این متغیر مشخص می‌کند که شل هر چند وقت یک‌بار (به ثانیه) تغییرات زمان ویرایش هر یک از فایل‌های مشخص‌شده توسط متغیرهای .B .SM MAILPATH یا .B .SM MAIL را بررسی کند. مقدار پیش‌فرض 600 ثانیه است. هنگامی که زمان سپری شد، شل قبل از صدور اعلان (prompt) بعدی بررسی را انجام می‌دهد. .TP .B .SM MAILPATH فهرستی از نام‌های فایل که با دونقطه ( .B : ) جدا شده‌اند. اگر این متغیر تنظیم شده باشد، شل کاربر را از هرگونه تغییری در فایل‌های مشخص‌شده که در طول آخرین .B .SM MAILCHECK ثانیه رخ داده باشد مطلع می‌کند. پس از هر نام فایل می‌تواند یک .B ? و پیامی که باید چاپ شود قرار گیرد. روی پیام گسترش پارامتر، جایگزینی دستور و جایگزینی حسابی انجام خواهد شد که در آن متغیر .B $_ به عنوان نام فایلی که تغییر کرده است تعریف می‌شود. پیام پیش‌فرض .I you have mail in $_\^ است. .TP .B .SM PATH مسیر جستجو برای دستورات (بخش .I Execution\^ در ادامه را ببینید). کاربر نمی‌تواند .B \s-1PATH\s+1 را در صورت اجرا تحت .if \nZ=0 .B rsh .if \nZ=1 .B rksh .if \nZ=2 .B rksh93 تغییر دهد (به جز در .BR .profile\^ ). .TP .SM .B PS1 مقدار این متغیر برای گسترش پارامتر، جایگزینی دستور و جایگزینی حسابی گسترش می‌یابد تا رشته اعلان اصلی (primary prompt string) را تعریف کند که به طور پیش‌فرض .RB `` "$ \|\|\|" '' است. کاراکتر .B ! در رشته اعلان اصلی با شماره .I command\^ جایگزین می‌شود (بخش .I "Command Re-entry\^" در ادامه را ببینید). دو رخداد پیاپی از .B ! یک علامت .B ! منفرد را هنگام چاپ رشته اعلان تولید می‌کند. .TP .SM .B PS2 رشته اعلان ثانویه، به طور پیش‌فرض .RB `` "> \|" '' . .TP .SM .B PS3 رشته اعلان انتخاب که درون یک حلقه .B select استفاده می‌شود، به طور پیش‌فرض .RB `` "#? \|" '' . .TP .SM .B PS4 مقدار این متغیر برای ارزیابی پارامتر، جایگزینی دستور و جایگزینی حسابی گسترش می‌یابد و پیش از هر خط از ردگیری اجرا (execution trace) قرار می‌گیرد. به طور پیش‌فرض، .SM .B PS4 برابر .RB `` "+ \|" '' است. علاوه بر این هنگامی که .SM .B PS4 تنظیم نشده باشد، اعلان ردگیری اجرا نیز .RB `` "+ \|" '' خواهد بود. .TP .SM .B SH_OPTIONS مقدار آن شامل کلمات .IB name = value\^ است که با فاصله جدا شده‌اند. به ازای هر .I name\^ که نام یک گزینه شناخته‌شده باشد، به متغیر .BI .sh.opt_ name\^ مقدار .I value اختصاص داده می‌شود. در حال حاضر تنها نام گزینه معتبر .BR astbin است. .TP .SM .B SHELL نام مسیر .I shell\^ در محیط نگهداری می‌شود. در هنگام فراخوانی، اگر نام پایه (basename) این متغیر .BR rsh ، .BR rksh یا .BR krsh باشد، شل به حالت محدود (restricted) درمی‌آید. اگر .BR pfsh یا .BR pfksh باشد، شل به یک شل پروفایل تبدیل می‌شود (به .IR pfexec (1) مراجعه کنید). .TP .SM .B TIMEFORMAT مقدار این پارامتر به عنوان یک رشته فرمت استفاده می‌شود که مشخص می‌کند اطلاعات زمان‌بندی برای خطوط لوله‌ای (pipelines) که با کلمه کلیدی رزروشده .B time پیشوند شده‌اند چگونه باید نمایش داده شود. کاراکتر \fB%\fP یک توالی فرمت را معرفی می‌کند که به مقدار زمان یا سایر اطلاعات گسترش می‌یابد. توالی‌های فرمت و معانی آن‌ها به شرح زیر است: .sp .5 .RS .PD 0 .TP 10 .B %% یک کاراکتر لفظی \fB%\fP. .TP .B %[\fIp\fP][l]R زمان سپری‌شده به ثانیه. .TP .B %[\fIp\fP][l]U تعداد ثانیه‌های CPU سپری‌شده در حالت کاربر (user mode). .TP .B %[\fIp\fP][l]S تعداد ثانیه‌های CPU سپری‌شده در حالت سیستم (system mode). .TP .B %[\fIp\fP][l]C تعداد کل ثانیه‌های CPU؛ یعنی مجموع زمان سپری‌شده در حالت کاربر به علاوه حالت سیستم. .TP .B %P درصد CPU (یعنی میزان استفاده از پردازنده)، محاسبه‌شده به صورت C / R. .PD .RE .IP براکت‌ها نشان‌دهنده بخش‌های اختیاری هستند. مقدار اختیاری \fIp\fP یک رقم است که \fIدقت\fP (تعداد ارقام اعشاری بعد از نقطه اعشار) را مشخص می‌کند. مقدار 0 باعث می‌شود هیچ ممیز یا بخش اعشاری خروجی داده نشود. حداکثر سه رقم بعد از ممیز قابل نمایش است؛ مقادیر \fIp\fP بزرگ‌تر از 3 به عنوان 3 در نظر گرفته می‌شوند. اگر \fIp\fP مشخص نشود، مقدار 3 استفاده می‌شود. .IP گزینه اختیاری \fBl\fP یک فرمت طولانی‌تر را مشخص می‌کند، شامل ساعت در صورت بزرگ‌تر بودن از صفر، دقیقه و ثانیه به فرم \fIHH\fPh\fIMM\fPm\fISS\fP.\fIFF\fPs. مقدار \fIp\fP مشخص می‌کند که آیا بخش اعشاری گنجانده شود یا خیر. .IP سایر کاراکترها بدون تغییر خروجی داده شده و یک خط جدید به انتها اضافه می‌شود. در صورت عدم تنظیم، مقدار پیش‌فرض، \fB$'\enreal\et%2lR\enuser\et%2lU\ensys\t%2lS'\fP، استفاده می‌شود. اگر مقدار تهی باشد، هیچ اطلاعات زمان‌بندی نمایش داده نمی‌شود. .TP .B .SM TMOUT اگر روی مقداری بزرگ‌تر از صفر تنظیم شود، .B .SM TMOUT مقدار مهلت زمانی (timeout) پیش‌فرض برای دستور توکار .B read خواهد بود. دستور مرکب .B select هنگامی که ورودی از ترمینال باشد پس از .B .SM TMOUT ثانیه خاتمه می‌یابد. در غیر این صورت، اگر خطی در مدت ثانیه‌های تعیین‌شده در حین خواندن از ترمینال وارد نشود، شل خاتمه می‌یابد. (توجه داشته باشید که شل را می‌توان با یک حد بالا برای این مقدار کامپایل کرد که نمی‌توان از آن فراتر رفت). .TP .B .SM VISUAL اگر مقدار این متغیر با الگوی .IR *[Vv][Ii]* تطابق داشته باشد، گزینه .B vi (بخش دستور ویژه .B set در ادامه را ببینید) فعال می‌شود. اگر مقدار با الگوی .I *gmacs* تطابق داشته باشد، گزینه .B gmacs فعال می‌گردد. اگر مقدار با الگوی .IR *macs* تطابق داشته باشد، گزینه .B emacs فعال خواهد شد. مقدار .B .SM VISUAL بر مقدار .B .SM EDITOR اولویت دارد. .PD .RE .PP شل مقادیر پیش‌فرضی به متغیرهای \f3\s-1PATH\s+1\fP، \f3\s-1PS1\s+1\fP، \f3\s-1PS2\s+1\fP، \f3\s-1PS3\s+1\fP، \f3\s-1PS4\s+1\fP، \f3\s-1MAILCHECK\s+1\fP، \f3\s-1FCEDIT\s+1\fP، \f3\s-1TMOUT\s+1\fP و \f3\s-1IFS\s+1\fP می‌دهد، در حالی که متغیرهای .SM .BR HOME ، .SM .BR SHELL ، .SM .BR ENV و .SM .B MAIL اصلاً توسط شل مقداردهی نمی‌شوند (اگرچه .SM .B HOME توسط .IR login (1) تنظیم می‌شود). در برخی سیستم‌ها .SM .B MAIL و .SM .B SHELL نیز توسط .IR login (1) تنظیم می‌شوند..SS "تفکیک فیلدها (Field Splitting)" پس از گسترش پارامتر و جایگزینی دستور، نتایج جایگزینی‌ها برای یافتن نویسه‌های جداکننده فیلد (نویسه‌های موجود در .SM .B IFS\^\c ) بررسی شده و در محل این نویسه‌ها به فیلدهای مجزا تفکیک می‌شوند. فیلدهای تهی صریح (\^\f3"\^"\fP یا \f3\(fm\^\(fm\fP\^) حفظ می‌شوند. فیلدهای تهی ضمنی (آن‌هایی که از .I پارامترهای\^ فاقد مقدار یا جایگزینی‌های دستور بدون خروجی حاصل می‌شوند) حذف می‌گردند. .PP اگر گزینه .B braceexpand .RB ( \-B ) تنظیم شده باشد، آن‌گاه هر یک از فیلدهای حاصل از .SM .B IFS بررسی می‌شوند تا مشخص شود آیا حاوی یک یا چند الگو از الگوهای آکولاد .BR {*,*} ، .BI { l1 .. l2 } ، .BI { n1 .. n2 } ، .BI { n1 .. n2 % .IB fmt } ، .BI { n1 .. n2 .BI .. n3 } ، یا .BI { n1 .. n2 .BI .. n3 % fmt } هستند یا خیر؛ که در آن .B * نشان‌دهنده هر نویسه‌ای است، .IR l1\^ ، l2\^ حروف الفبا هستند، .IR n1\^ ، n2\^ ، n3\^ اعدادی دارای علامت هستند و .I fmt\^ یک قالب مشخص‌شده مطابق با کاربرد .BR printf است. در هر مورد، فیلدها با پیشوند کردن نویسه‌های قبل از .B { و پسوند کردن نویسه‌های بعد از .B } به هر یک از رشته‌های تولیدشده توسط نویسه‌های میان .B { و .BR } ایجاد می‌شوند. فیلدهای حاصل مجدداً بررسی می‌شوند تا در صورت وجود الگوهای آکولادی دیگر پردازش شوند. .PP در حالت اول، یک فیلد برای هر رشته میان .BR { و .BR , ، میان .BR , و .BR , ، و میان .BR , و .BR } ایجاد می‌شود. رشته نشان‌داده‌شده با .B * می‌تواند شامل .B { و .B } متناظر درون‌سازی‌شده بدون نیاز به نقل‌قول باشد. در غیر این صورت، هر .B { و .B } همراه با .B * باید نقل‌قول شود. .PP در حالت دوم، .I l1\^ و .I l2\^ هر دو باید یا نویسه‌های بزرگ باشند یا هر دو نویسه‌های کوچک در لوکال C باشند. در این حالت یک فیلد برای هر نویسه از .I l1\^ تا .IR l2\^ ایجاد می‌شود. .PP در حالت‌های باقی‌مانده، یک فیلد برای هر عدد با شروع از .I n1\^ و ادامه‌یافتن تا رسیدن به .I n2\^ با افزایش .I n1\^ به اندازه .IR n3\^ ایجاد می‌شود. در مواردی که .I n3\^ مشخص نشده باشد، رفتار به‌گونه‌ای است که گویی .I n3\^ برابر با .B 1 است اگر .IB n1 <= n2 باشد، و در غیر این صورت .B \-1 خواهد بود. در حالت‌هایی که .BI % fmt\^ را مشخص می‌کنند، می‌توان هرگونه فلگ‌های قالب، عرض و دقت را تعیین کرد و .I fmt\^ می‌تواند به هر یک از مشخص‌کننده‌های .BR cdiouxX ختم شود. برای مثال، .B {a,z}{1..5..3%02d}{b..c}x به ۸ فیلد زیر گسترش می‌یابد: .BR a01bx ، .BR a01cx ، .BR a04bx ، .BR a04cx ، .BR z01bx ، .BR z01cx ، .B z04bx و .BR z4cx . .SS "تولید نام فایل (File Name Generation)" پس از تفکیک، هر فیلد برای یافتن نویسه‌های .BR * ، .BR ? ، .BR ( ، و .B \*(OK\^ بررسی می‌شود، مگر اینکه گزینه .B \-f تنظیم شده باشد. اگر یکی از این نویسه‌ها وجود داشته باشد، آن‌گاه آن کلمه به عنوان یک .IR الگو در نظر گرفته می‌شود. هر بخش از نام فایل که شامل هر نویسه الگویی باشد، با مجموعه‌ای از نام‌های مرتب‌شده بر اساس حروف الفبا (واژه‌نگاری) که با الگو مطابقت دارند از آن دایرکتوری جایگزین می‌شود. اگر هیچ نام فایلی که با الگو مطابقت داشته باشد پیدا نشود، آن بخش از نام فایل دست‌نخورده باقی می‌ماند مگر اینکه الگو با پیشوند .B \(ap(N)\fP همراه باشد که در این صورت مطابق توضیحات زیر حذف می‌گردد. اگر .SM .B FIGNORE تنظیم شده باشد، هر جزء از نام فایل که با الگوی تعریف‌شده توسط مقدار .SM .B FIGNORE مطابقت داشته باشد، هنگام تولید نام فایل‌های منطبق نادیده گرفته می‌شود. نام‌های .B . و .B .. نیز نادیده گرفته می‌شوند. اگر .SM .B FIGNORE تنظیم نشده باشد، نویسه .B . در ابتدای هر بخش از نام فایل نادیده گرفته خواهد شد، مگر اینکه اولین نویسه الگوی مربوط به این بخش، خود نویسه .BR . باشد. توجه داشته باشید که در سایر کاربردهای تطبیق الگو، با .B / و .B . به‌طور ویژه برخورد نمی‌شود. .PP .PD 0 .RS .TP .B * با هر رشته‌ای، از جمله رشته تهی، مطابقت دارد. هنگام استفاده برای گسترش نام فایل، اگر گزینه .B globstar روشن باشد، یک الگوی مجزا از دو .BR * مجاور با تمام فایل‌ها و صفر یا چند دایرکتوری و زیردایرکتوری مطابقت خواهد داشت. اگر پس از آن یک .B / بیاید، فقط دایرکتوری‌ها و زیردایرکتوری‌ها مطابقت خواهند داشت. .TP .B ? با هر تک‌نویسه‌ای مطابقت دارد. .TP .BR \*(OK \^.\|.\|.\^ \*(CK با هر یک از نویسه‌های محصورشده مطابقت دارد. یک جفت نویسه که با .B \- از هم جدا شده‌اند، با هر نویسه‌ای که از نظر واژه‌نگاری میان این جفت قرار دارد (شامل خود آن‌ها) مطابقت دارد. اگر نخستین نویسه پس از .B \*(OK\^ ابتدایی یک .B ! یا .B ^ باشد، آن‌گاه با هر نویسه‌ای که درون براکت نباشد مطابقت داده می‌شود. یک .B \- می‌تواند با قرار گرفتن به عنوان نخستین یا آخرین نویسه، در مجموعه نویسه‌ها گنجانده شود. .br درون .B \*(OK\^ و .BR \*(CK\^ ، کلاس‌های نویسه را می‌توان با ساختار \f3[:\fP\f2class\fP\f3:]\fP مشخص کرد که در آن class یکی از کلاس‌های زیر تعریف‌شده در استاندارد ANSI-C است: (توجه داشته باشید که \f3word\fP معادل \f3alnum\fP به علاوه نویسه \f3_\fP است.) .br .B .if n alnum alpha blank cntrl digit graph lower print punct space upper word xdigit .if t alnum alpha blank cntrl digit graph lower print punct space upper word xdigit .br درون .B \*(OK\^ و .BR \*(CK\^ ، یک کلاس هم‌ارزی را می‌توان با ساختار \f3[=\fP\f2c\fP\f3=]\fP مشخص کرد که با تمامی نویسه‌های دارای وزن مرتب‌سازی اولیه یکسان (بر اساس تعریف لوکال فعلی) با نویسه \f2c\fP مطابقت دارد. درون .B \*(OK\^ و .BR \*(CK\^ ، \f3[.\fP\f2symbol\fP\f3.]\fP با نماد مرتب‌سازی \f2symbol\fP مطابقت دارد. .RE .PD یک .I فهرست الگو (pattern-list) فهرستی از یک یا چند الگو است که با یک .B & یا .BR \(bv از یکدیگر جدا شده‌اند. یک .B & نشان می‌دهد که همه الگوها باید مطابقت داشته باشند، در حالی که .BR \(bv نیاز دارد که فقط یکی از الگوها مطابقت یابد. الگوهای ترکیبی را می‌توان با یک یا چند مورد از زیرالگوهای زیر تشکیل داد: .PD 0 .RS .TP \f3?(\fP\f2pattern-list\^\fP\f3)\fP به‌صورت اختیاری با هر یک از الگوهای ارائه‌شده مطابقت دارد. .TP \f3*(\fP\f2pattern-list\^\fP\f3)\fP با صفر یا چند بار تکرار الگوهای داده‌شده مطابقت دارد. .TP \f3+(\fP\f2pattern-list\^\fP\f3)\fP با یک یا چند بار تکرار الگوهای داده‌شده مطابقت دارد. .TP \f3{\fP\f2n\^\fP\f3}\fP(\fP\f2pattern-list\^\fP\f3)\fP با \f2n\^\fP بار تکرار الگوهای داده‌شده مطابقت دارد. .TP \f3{\fP\f2m\^\fP\f3,\fP\f2n\^\fP\f3}\fP(\fP\f2pattern-list\^\fP\f3)\fP از \f2m\^\fP تا \f2n\^\fP بار تکرار الگوهای داده‌شده را مطابقت می‌دهد. اگر \f2m\^\fP حذف شود، از \f30\fP استفاده خواهد شد. اگر \f2n\^\fP حذف شود، حداقل \f2m\^\fP بار تکرار مطابقت داده می‌شود. .TP \f3\&@\&(\fP\f2pattern-list\^\fP\f3)\fP دقیقاً با یکی از الگوهای داده‌شده مطابقت دارد. .br .TP \f3!(\fP\f2pattern-list\^\fP\f3)\fP با هر چیزی به جز یکی از الگوهای داده‌شده مطابقت دارد. .PD .RE به‌طور پیش‌فرض، هر الگو یا زیرالگو با طولانی‌ترین رشته ممکن سازگار با ایجاد طولانی‌ترین تطابق کلی مطابقت می‌یابد. اگر بیش از یک تطابق ممکن باشد، تطابقی که نزدیک‌تر به ابتدای رشته شروع شود انتخاب خواهد شد. با این حال، برای هر یک از الگوهای ترکیبی بالا می‌توان یک \f3\-\fP در جلوی \f3(\fP درج کرد تا کوتاه‌ترین تطابق با \f2pattern-list\^\fP مشخص‌شده اعمال گردد. .PP هنگامی که \f2pattern-list\^\fP درون پرانتز قرار گیرد، نویسه بک‌اسلش \f3\e\fP حتی در داخل یک کلاس نویسه نیز به صورت ویژه پردازش می‌شود. تمام توالی‌های گریز نویسه ANSI-C شناخته می‌شوند و با نویسه مشخص‌شده مطابقت دارند. علاوه بر این، توالی‌های گریز زیر نیز شناسایی می‌شوند: .PD 0 .RS .TP .B \ed با هر نویسه‌ای در کلاس \f3digit\fP مطابقت دارد. .TP .B \eD با هر نویسه‌ای خارج از کلاس \f3digit\fP مطابقت دارد. .TP .B \es با هر نویسه‌ای در کلاس \f3space\fP مطابقت دارد. .TP .B \eS با هر نویسه‌ای خارج از کلاس \f3space\fP مطابقت دارد. .TP .B \ew با هر نویسه‌ای در کلاس \f3word\fP مطابقت دارد. .TP .B \eW با هر نویسه‌ای خارج از کلاس \f3word\fP مطابقت دارد. .PD .RE .PP الگویی به شکل \f3%(\fP\f2pattern-pair\^\fP(s)\f3)\fP یک زیرالگو است که می‌تواند برای مطابقت با عبارات نویسه‌ای تو‌در‌تو استفاده شود. هر .I pattern-pair\^ یک توالی دو‌نویسه‌ای است که نمی‌تواند شامل .B & یا .BR \(bv باشد. نخستین .I pattern-pair\^ نویسه‌های شروع و پایان را برای تطابق مشخص می‌کند. هر .I pattern-pair\^ بعدی نشان‌دهنده نویسه‌های شروع و پایان یک گروه تو‌در‌تو است که هنگام شمارش تطابق‌های نویسه شروع و پایان نادیده گرفته (رد) می‌شود. رفتار زمانی که نخستین نویسه یک .I pattern-pair\^ حرفی‌عددی باشد نامشخص است، به جز در موارد زیر: .PD 0 .RS .TP .B D باعث می‌شود نویسه پایانی، جستجو برای این الگو را بدون یافتن تطابق خاتمه دهد. .TP .B E باعث می‌شود نویسه پایانی به عنوان یک نویسه گریز (escape) تفسیر شود. .TP .B L باعث می‌شود نویسه پایانی به عنوان یک نویسه نقل‌قول تفسیر شود و موجب شود تمام نویسه‌ها هنگام جستجو برای تطابق نادیده گرفته شوند. .TP .B Q باعث می‌شود نویسه پایانی به عنوان یک نویسه نقل‌قول تفسیر شود و موجب شود تمام نویسه‌ها به جز هر نویسه گریز هنگام جستجو برای تطابق نادیده گرفته شوند. .PD .RE بنابراین، \f3%(\^{\^}Q"E\e\^)\fP، نویسه‌هایی را که از .B { شروع می‌شوند تا زمانی که .B } متناظر پیدا شود مطابقت می‌دهد، بدون در نظر گرفتن هر .B { یا .B } که درون یک رشته با علامت نقل‌قول دوتایی (دابل‌کوتیشن) قرار داشته یا قبل از آن نویسه گریز .BR \e آمده باشد. بدون .B {\^} این الگو با هر رشته‌ای به زبان C مطابقت دارد. .PP هر زیرالگو در یک الگوی ترکیبی، با شروع از ۱، بر اساس مکان \f3(\fP درون الگو شماره‌گذاری می‌شود. توالی \f3\e\fP\f2n\^\fP، که در آن \f2n\^\fP یک تک‌رقم است و \f3\e\fP\f2n\^\fP پس از زیرالگوی \f2n\fP-ام می‌آید، با همان رشته‌ای که خود زیرالگو مطابقت داده بود، مطابقت می‌یابد. .PP در نهایت یک الگو می‌تواند شامل زیرالگوهایی به شکل \f3\(ap(\fP\f2options\^\fP\f3:\fP\f2pattern-list\^\fP\f3)\fP باشد که در آن هر یک از \f2options\^\fP یا \f3:\fP\f2pattern-list\^\fP می‌توانند حذف شوند. برخلاف سایر الگوهای ترکیبی، این زیرالگوها در شمارش زیرالگوهای شماره‌گذاری‌شده محاسبه نمی‌شوند. بخش \f3:\fP\f2pattern-list\^\fP برای گزینه‌های .BR F ، .BR G ، .B N و .B V در زیر باید حذف شود. اگر \f2options\^\fP وجود داشته باشد، می‌تواند شامل یک یا چند مورد از گزینه‌های زیر باشد: .PD 0 .RS .TP .B + فعال‌سازی گزینه‌های زیر. این حالت پیش‌فرض است. .TP .B \- غیرفعال‌سازی گزینه‌های زیر. .TP .B E باقی‌مانده الگو از ساختار عبارات منظم گسترش‌یافته (Extended Regular Expression) مشابه دستور .IR egrep (1) استفاده می‌کند. .TP .B F باقی‌مانده الگو از ساختار عبارات .IR fgrep (1) استفاده می‌کند. .TP .B G باقی‌مانده الگو از ساختار عبارات منظم پایه (Basic Regular Expression) مشابه دستور .IR grep (1) استفاده می‌کند. .TP .B K باقی‌مانده الگو از ساختار الگوی پوسته استفاده می‌کند. این حالت پیش‌فرض است. .TP .B N این گزینه نادیده گرفته می‌شود. با این حال، هنگامی که نخستین حرف باشد و همراه با تولید نام فایل به کار رود، و هیچ تطابقی رخ ندهد، الگوی فایل به رشته تهی گسترش می‌یابد. .TP .B X باقی‌مانده الگو از ساختار عبارات منظم افزوده مشابه دستور .IR xgrep (1) استفاده می‌کند. .TP .B P باقی‌مانده الگو از ساختار عبارات منظم .IR perl (1) استفاده می‌کند. در حال حاضر تمام ساختارهای عبارات منظم پرل پیاده‌سازی نشده‌اند. .TP .B V باقی‌مانده الگو از ساختار عبارات منظم System V استفاده می‌کند. .TP .B i تطابق الگو را بدون حساسیت به حروف بزرگ و کوچک در نظر می‌گیرد. .TP .B g طولانی‌ترین تطابق ممکن را پیدا می‌کند (حریصانه یا greedy). این حالت پیش‌فرض است. .TP .B l الگو را از سمت چپ مهار (anchor) می‌کند. این حالت پیش‌فرض برای الگوهای به سبک .B K است. .TP .B r الگو را از سمت راست مهار (anchor) می‌کند. این حالت پیش‌فرض برای الگوهای به سبک .B K است. .PD .RE اگر هر دو مورد \f2options\^\fP و \f3:\fP\f2pattern-list\^\fP مشخص شوند، آن‌گاه گزینه‌ها فقط روی \f2pattern-list\^\fP اعمال می‌شوند. در غیر این صورت، این گزینه‌ها تا زمانی که توسط یک \f3\(ap(\fP\f2...\^\fP\f3)\fP بعدی غیرفعال شوند یا در پایان زیرالگوی حاوی \f3\(ap(\fP\f2...\^\fP\f3)\fP معتبر باقی می‌مانند. .SS "نقل‌قول (Quoting)" هر یک از .I فرا‌نویسه‌ها (metacharacters)\^ که پیش‌تر فهرست شدند (بخش .I تعاریف (Definitions)\^ در بالا را ببینید) برای پوسته معنای ویژه‌ای دارند و باعث خاتمه یافتن یک کلمه می‌شوند مگر اینکه نقل‌قول شوند. یک نویسه می‌تواند با قرار گرفتن یک .BR \e پیش از آن .I نقل‌قول\^ شود (یعنی نمایانگر خود نویسه باشد). جفت .B \enew-line (بک‌اسلش و خط جدید) حذف می‌شود. تمام نویسه‌های محصور میان یک جفت علامت نقل‌قول تکی (تک‌کوتیشن) (\^\f3\(fm\^\(fm\fP\^) که قبل از آن یک .B $ نیامده باشد، نقل‌قول می‌شوند. علامت تک‌کوتیشن نمی‌تواند درون تک‌کوتیشن‌ها ظاهر شود. یک رشته نقل‌قول‌شده تکی که قبل از آن یک .B $ بدون نقل‌قول آمده باشد، به عنوان یک رشته ANSI-C پردازش می‌شود، به استثنای موارد زیر: .PD 0 .TP .B \e0 باعث می‌شود باقی‌مانده رشته نادیده گرفته شود. .TP .B \eE معادل نویسه گریز یا escape (اسکی .BR 033 )، .TP .B \ee معادل نویسه گریز یا escape (اسکی .BR 033 )، .TP .BI \ec x به نویسه کنترل-\f2x\fP گسترش می‌یابد. .TP .BI \eC[. name .] به عنصر مرتب‌سازی \f2name\fP گسترش می‌یابد. .PD .PP درون علامت‌های نقل‌قول دوتایی (دابل‌کوتیشن) (\f3"\^"\fP)، گسترش پارامتر و جایگزینی دستور انجام می‌شود و .B \e نویسه‌های .BR \e ، .BR \*` ، \f3"\fP و .BR $ را نقل‌قول می‌کند. یک .B $ در جلوی یک رشته با نقل‌قول دوتایی، در لوکال "C" یا "POSIX" نادیده گرفته می‌شود، و در غیر این صورت ممکن است باعث جایگزینی رشته با یک رشته مخصوص لوکال گردد. معنای .B "$*" و .B "$@" هنگامی که نقل‌قول نشده باشند یا زمانی که به عنوان مقدار انتساب متغیر یا به عنوان نام فایل به کار روند یکسان است. با این حال، هنگام استفاده به عنوان آرگومان دستور، .B "$*" معادل است با \f3"$1\fP\f2d\fP\f3\|$2\fP\f2d\fP\|.\|.\|.\f3"\fP، که در آن .I d نخستین نویسه متغیر .SM .B IFS است، در حالی که .B "$@" معادل است با .B "$1"\| .B "$2"\| \&.\|.\|.\^. درون علامت‌های بک‌تیک (grave quote) (\f3\*`\^\*`\fP)، .B \e نویسه‌های .BR \e ، .BR \*` و .BR $ را نقل‌قول می‌کند. اگر بک‌تیک‌ها درون نقل‌قول دوتایی قرار گیرند، آن‌گاه .B \e نویسه \f3"\fP را نیز نقل‌قول می‌کند. .PP معنای ویژه کلمات کلیدی رزروشده یا نام‌های مستعار را می‌توان با نقل‌قول کردن هر نویسه‌ای از آن کلمه رزروشده حذف کرد. تشخیص نام‌های توابع یا نام دستورات داخلی فهرست‌شده در زیر با نقل‌قول کردن آن‌ها تغییر نمی‌کند. .SS "ارزیابی محاسباتی (Arithmetic Evaluation)" پوسته، ارزیابی محاسباتی را برای جایگزینی محاسباتی، ارزیابی یک دستور محاسباتی، ارزیابی زیرنویس آرایه اندیس‌دار، و ارزیابی آرگومان‌های دستورات داخلی .B shift\^ و .BR let انجام می‌دهد. ارزیابی‌ها با استفاده از محاسبات ممیز شناور با دقت مضاعف (double precision) یا ممیز شناور با دقت مضاعف طولانی (long double) برای سیستم‌هایی که این نوع داده را ارائه می‌دهند انجام می‌شود. ثابت‌های ممیز شناور از قواعد ممیز شناور زبان برنامه‌نویسی ANSI-C پیروی می‌کنند. ثابت‌های ممیز شناور .B Nan و .B Inf می‌توانند به ترتیب برای نشان دادن "غیر عدد" (not a number) و بی‌نهایت استفاده شوند. ثابت‌های عدد صحیح از قواعد ثابت‌های عدد صحیح زبان برنامه‌نویسی ANSI-C پیروی می‌کنند، اگرچه تنها ثابت‌های نویسه‌ای تک‌بایتی شناسایی می‌شوند و تبدیل نوع (cast) نویسه‌ای پشتیبانی نمی‌شود. علاوه بر این، ثابت‌ها می‌توانند به شکل \*(OK\f2base\f3#\^\f1\*(CK\f2n\^\fP باشند که در آن .I base\^ یک عدد ده‌دهی میان ۲ تا ۶۴ است که مبنای محاسباتی را نشان می‌دهد و .I n\^ عددی در آن مبنا است. ارقام بالاتر از ۹ به ترتیب با حروف کوچک، حروف بزرگ، .BR @ و .B _ نشان داده می‌شوند. برای مبناهای کمتر یا مساوی ۳۶، نویسه‌های بزرگ و کوچک را می‌توان به جای یکدیگر استفاده کرد. .PP یک عبارت محاسباتی از همان ساختار، اولویت و شرکت‌پذیری عبارات در زبان C استفاده می‌کند. تمام عملگرهای زبان C که برای مقادیر ممیز شناور به کار می‌روند قابل استفاده هستند. علاوه بر این، عملگر .B ** می‌تواند برای توان‌رسانی استفاده شود. این عملگر اولویت بالاتری نسبت به ضرب دارد و شرکت‌پذیر از چپ است. همچنین هنگامی که مقدار یک متغیر محاسباتی یا زیرعبارت بتواند به عنوان یک عدد صحیح بلند (long integer) نمایش داده شود، تمام عملیات محاسباتی عدد صحیح زبان C قابل انجام است. متغیرها را می‌توان با نام آن‌ها در یک عبارت محاسباتی بدون استفاده از ساختار گسترش پارامتر ارجاع داد. هنگامی که به یک متغیر ارجاع داده می‌شود، مقدار آن به عنوان یک عبارت محاسباتی ارزیابی می‌گردد. .PP هر یک از توابع ریاضی زیر که در کتابخانه ریاضی C موجود هستند می‌توانند درون یک عبارت محاسباتی استفاده شوند: .PP .if t .RS .B .if n abs acos acosh asin asinh atan atan2 atanh cbrt ceil copysign cos cosh erf erfc exp exp2 expm1 fabs fdim finite floor fma fmax fmin fmod hypot ilogb int isfinite sinf isnan isnormal issubnormal issubordered iszero j0 j1 jn lgamma log log10 log2 logb nearbyint pow remainder rint round scanb signbit sin sinh sqrt tan tanh tgamma trunc y0 y1 yn .if t abs acos acosh asin asinh atan atan2 atanh cbrt ceil copysign cos cosh erf erfc exp exp2 expm1 fabs fdim finite floor fma fmax fmod j0 j1 jn hypot ilogb int isfinite isinf isnan isnormal issubnormal issubordered iszero lgamma log log10 log2 logb nearbyint pow rint round scalb signbit sin sinh sqrt tan tanh tgamma trunc y0 y1 yn .if t .RE علاوه بر این، توابع محاسباتی را می‌توان به عنوان توابع پوسته با گونه‌ای از ساختار .B function .I name\^ تعریف کرد: .TP .PD 0 \f3function .sh.math.\fP\f2name ident\^\fP ... \f3{\fP \f2list\^\fP \f3;}\fP .PD که در آن .I name\^ نام تابع مورد استفاده در عبارت محاسباتی است. اگر آرگومان فراخوانی متناظر با .I ident\^ نام یک متغیر آرایه‌ای باشد، آن‌گاه .I ident\^ یک ارجاع نامی (name reference) به این آرایه است. در غیر این صورت، .I ident\^ یک ارجاع به متغیر ممیز شناور با دقت مضاعف طولانی (long double) حاوی مقدار دریافتی از فراخواننده است. مقدار .B .sh.value هنگام بازگشت تابع، مقدار این تابع خواهد بود. توابع تعریف‌شده توسط کاربر می‌توانند حداکثر ۳ آرگومان دریافت کرده و جایگزین توابع کتابخانه ریاضی C شوند. .PP یک نمایش داخلی از یک .I متغیر\^ به عنوان ممیز شناور با دقت مضاعف را می‌توان با گزینه \f3\-E\fP \*(OK\f2n\^\fP\*(CK، \f3\-F\fP \*(OK\f2n\^\fP\*(CK، یا \f3\-X\fP \*(OK\f2n\^\fP\*(CK از دستور داخلی ویژه .B typeset تعیین کرد. گزینه .B \-E باعث می‌شود که هنگام گسترش مقدار، با نمادگذاری علمی نمایش داده شود. آرگومان اختیاری گزینه .I n تعداد ارقام با‌معنی را مشخص می‌کند. گزینه .B \-F باعث می‌شود که هنگام گسترش مقدار، به عنوان یک عدد ده‌دهی ممیز شناور نمایش داده شود. گزینه .B \-X باعث می‌شود که گسترش با استفاده از قالب .B %a تعریف‌شده در ISO C-99 نمایش داده شود. آرگومان اختیاری گزینه .I n در این حالت تعداد ارقام بعد از ممیز (یا نقطه مبنا) را مشخص می‌کند. .PP یک نمایش داخلی عدد صحیح از یک .I متغیر\^ را می‌توان با گزینه \f3\-i\fP \*(OK\f2n\^\fP\*(CK از دستور داخلی ویژه .B typeset تعیین کرد. آرگومان اختیاری گزینه .I n مبنای محاسباتی مورد استفاده هنگام گسترش متغیر را مشخص می‌کند. اگر مبنای محاسباتی را تعیین نکنید، مبنای ۱۰ استفاده خواهد شد. .PP ارزیابی محاسباتی روی مقدار هر انتساب به یک متغیر دارای ویژگی .BR \-E ، .BR \-F ، .BR \-X یا .B \-i انجام می‌شود. انتساب یک عدد ممیز شناور به متغیری که نوع آن عدد صحیح است باعث حذف بخش اعشاری (قطع شدن) می‌شود. .PP درون یک عبارت محاسباتی، تمام متغیرهای عدد صحیح و ممیز شناور می‌توانند با .BR .MIN ، .BR .MAX یا .BR .DIG دنبال شوند تا بیشترین مقدار، کمترین مقدار یا تعداد ارقام با‌معنی برای متغیرهای آن نوع را ارائه دهند. .PP متغیرهای ممیز شناور همچنین می‌توانند با .B .INT_MAX یا .B .INT_MIN دنبال شوند تا بزرگ‌ترین یا کوچک‌ترین اعداد صحیح قابل‌نمایش توسط آن نوع را ارائه دهند. .PP متغیرهای ممیز شناور همچنین می‌توانند با .B .EPSILON دنبال شوند تا فاصله تا عدد ممیز شناور بعدی از آن نوع را ارائه دهند. متغیرهای ممیز شناور می‌توانند با .B MAX_10_EXP دنبال شوند تا بیشترین توان مبنای ۱۰ را که می‌تواند توسط آن نوع نمایش داده شود ارائه دهند. .PP درون یک عبارت محاسباتی، ثابت‌های زیر شناخته می‌شوند و از نوع .BR typeset -lE هستند: .RS .PD 0 .TP .B NaN غیر عدد (Not a number). به حروف بزرگ و کوچک حساس نیست. .TP .B Inf بی‌نهایت (Infinity). به حروف بزرگ و کوچک حساس نیست. .TP .B E .TP .B PI .TP .B 1_PI 1.0/PI. .TP .B 2_PI 2.0/PI. .TP .B PI_2 PI/2.0 .TP .B PI_4 PI/4.0. .TP .B SQRTPI sqrt(PI). .TP .B SQRT2 sqrt(2.0). .TP .B SQRT1_2 sqrt(1./2.) .TP .B LOGE log(E) .TP .B LOG10E log10(E) .TP .B LN2 log(2.0) .TP .B LOG2E log2(E) .PD .RE .PP .SS "مرتب‌سازی آرایه‌ها (Array Sorting)" گزینه .B \-s در دستور توکار .B set می‌تواند برای مرتب‌سازی آرگومان‌های آن یا مرتب‌سازی آرایه‌های شاخص‌دار، آرایه‌های شاخص‌دار از متغیرهای ترکیبی و آرایه‌های شاخص‌دار از نوع‌ها استفاده شود (بخش «متغیرهای نوع» در زیر را ببینید). به‌طور پیش‌فرض، ترتیب مرتب‌سازی بر اساس محلی‌سازی (locale) جاری تعریف می‌شود. برای متغیرهای ترکیبی و برای نوع‌ها، گزینه .B \-K برای .B set می‌تواند با فهرستی از زیرفیلدها که با کاما از هم جدا شده‌اند برای مرتب‌سازی دنبال شود. هر فیلد می‌تواند با یک .B : و حرف .B n برای مرتب‌سازی عددی و/یا .B r برای مرتب‌سازی معکوس دنبال شود. برای یک آرایه شاخص‌دار ساده، گزینه .B \-K می‌تواند با .B :n و .B :r برای مرتب‌سازی عددی یا معکوس دنبال شود. .PP .SS "اعلان خط فرمان (Prompting)" هنگامی که پوسته به صورت تعاملی استفاده شود، پیش از خواندن یک دستور، با مقدار .SM .B PS1 پس از بسط آن برای بسط پارامتر، جایگزینی دستور و جایگزینی حسابی، اعلان خط فرمان داده می‌شود. علاوه بر این، هر .B ! منفرد در اعلان با شماره دستور جایگزین می‌شود. یک .B !! برای قرار دادن .B ! در اعلان مورد نیاز است. اگر در هر زمان یک خط جدید تایپ شود و برای تکمیل یک دستور به ورودی بیشتری نیاز باشد، اعلان ثانویه (یعنی مقدار .BR \s-1PS2\s+1 ) صادر می‌شود. .SS "عبارات شرطی (Conditional Expressions)" یک .I "عبارت شرطی" با دستور ترکیبی .B [[ برای آزمودن ویژگی‌های فایل‌ها و مقایسه رشته‌ها استفاده می‌شود. تفکیک فیلد و تولید نام فایل روی کلمات بین .B [[ و .BR ]] انجام نمی‌شود. هر عبارت می‌تواند از یک یا چند مورد از عبارات یکانی یا دوگانی زیر ساخته شود: .PD 0 .TP \f2string\fP درست است اگر .I string تهی نباشد. .TP \f3\-a\fP \f2file\fP مشابه \f3\-e\fP در زیر است. این گزینه منسوخ شده است. .TP \f3\-b\fP \f2file\fP درست است اگر .I file\^ وجود داشته باشد و یک فایل ویژه بلوکی باشد. .TP \f3\-c\fP \f2file\fP درست است اگر .I file\^ وجود داشته باشد و یک فایل ویژه کاراکتری باشد. .TP \f3\-d\fP \f2file\fP درست است اگر .I file\^ وجود داشته باشد و یک دایرکتوری باشد. .TP \f3\-e\fP \f2file\fP درست است اگر .I file\^ وجود داشته باشد. .TP \f3\-f\fP \f2file\fP درست است اگر .I file\^ وجود داشته باشد و یک فایل معمولی باشد. .TP \f3\-g\fP \f2file\fP درست است اگر .I file\^ وجود داشته باشد و بیت setgid آن تنظیم شده باشد. .TP \f3\-k\fP \f2file\fP درست است اگر .I file\^ وجود داشته باشد و بیت چسبنده (sticky bit) آن تنظیم شده باشد. .TP \f3\-n\fP \f2string\fP درست است اگر طول .I string\^ غیرصفر باشد. .TP \f3\-o\fP \f3?\fP\f2option\fP درست است اگر گزینه با نام .I option\^ یک نام گزینه معتبر باشد. .TP \f3\-o\fP \f2option\fP درست است اگر گزینه با نام .I option\^ روشن باشد. .TP \f3\-p\fP \f2file\fP درست است اگر .I file\^ وجود داشته باشد و یک فایل ویژه fifo یا یک لوله (pipe) باشد. .TP \f3\-r\fP \f2file\fP درست است اگر .I file\^ وجود داشته باشد و توسط فرآیند جاری قابل خواندن باشد. .TP \f3\-s\fP \f2file\fP درست است اگر .I file\^ وجود داشته باشد و اندازه آن بزرگ‌تر از صفر باشد. .TP \f3\-t\fP \f2fildes\fP درست است اگر توصیف‌گر فایل شماره .I fildes\^ باز بوده و مرتبط با یک دستگاه ترمینال باشد. .TP \f3\-u\fP \f2file\fP درست است اگر .I file\^ وجود داشته باشد و بیت setuid آن تنظیم شده باشد. .TP \f3\-v\fP \f2name\fP درست است اگر متغیر .I name\^ یک نام متغیر معتبر باشد و مقداردهی شده باشد. .TP \f3\-w\fP \f2file\fP درست است اگر .I file\^ وجود داشته باشد و توسط فرآیند جاری قابل نوشتن باشد. .TP \f3\-x\fP \f2file\fP درست است اگر .I file\^ وجود داشته باشد و توسط فرآیند جاری قابل اجرا باشد. اگر .I file\^ وجود داشته باشد و یک دایرکتوری باشد، در صورتی درست است که فرآیند جاری مجوز جستجو در دایرکتوری را داشته باشد. .TP \f3\-z\fP \f2string\fP درست است اگر طول .I string\^ صفر باشد. .TP \f3\-L\fP \f2file\fP درست است اگر .I file\^ وجود داشته باشد و یک پیوند نمادین باشد. .TP \f3\-h\fP \f2file\fP درست است اگر .I file\^ وجود داشته باشد و یک پیوند نمادین باشد. .TP \f3\-N\fP \f2file\fP درست است اگر .I file\^ وجود داشته باشد و زمان آخرین تغییر آن بزرگ‌تر از زمان آخرین دسترسی باشد. .TP \f3\-O\fP \f2file\fP درست است اگر .I file\^ وجود داشته باشد و مالک آن شناسه کاربری مؤثر این فرآیند باشد. .TP \f3\-G\fP \f2file\fP درست است اگر .I file\^ وجود داشته باشد و گروه آن با شناسه گروه مؤثر این فرآیند مطابقت داشته باشد. .TP \f3\-R\fP \f2name\fP درست است اگر متغیر .I name\^ یک ارجاع نام (name reference) باشد. .TP \f3\-S\fP \f2file\fP درست است اگر .I file\^ وجود داشته باشد و یک سوکت باشد. .TP \f2file1\fP \f3\-nt\fP \f2file2\fP درست است اگر .I file1\^ وجود داشته باشد و .I file2\^ وجود نداشته باشد، یا .I file1\^ جدیدتر از .IR file2 باشد. .TP \f2file1\fP \f3\-ot\fP \f2file2\fP درست است اگر .I file2\^ وجود داشته باشد و .I file1\^ وجود نداشته باشد، یا .I file1\^ قدیمی‌تر از .IR file2 باشد. .TP \f2file1\fP \f3\-ef\fP \f2file2\fP درست است اگر .I file1\^ و .I file2\^ وجود داشته باشند و به یک فایل یکسان اشاره کنند. .TP \f2string\fP \f3==\fP \f2pattern\fP درست است اگر .I string\^ با .IR pattern مطابقت داشته باشد. هر بخشی از .I pattern\^ می‌تواند نقل‌قول شود تا به عنوان یک رشته مطابقت داده شود. با یک تطابق موفق با الگو، متغیر آرایه‌ای .B .sh.match شامل تطابق و زیرتطابق‌های الگو خواهد بود. .TP \f2string\fP \f3=\fP \f2pattern\fP مشابه \f3==\fP در بالا است، اما منسوخ شده است. .TP \f2string\fP \f3!=\fP \f2pattern\fP درست است اگر .I string\^ با .IR pattern مطابقت نداشته باشد. هنگامی که .I string\^ با .I pattern\^ مطابقت داشته باشد، متغیر آرایه‌ای .B .sh.match شامل تطابق و زیرتطابق‌های الگو خواهد بود. .TP \f2string\fP \f3=\(ap\fP \f2ere\fP درست است اگر .I string\^ با الگوی .BI \(ap(E) ere\^ مطابقت داشته باشد که در آن .I ere\^ یک عبارت باقاعده گسترش‌یافته است. .TP \f2string1\fP \f3<\fP \f2string2\fP درست است اگر .I string1\^ بر اساس محلی‌سازی (locale) جاری پیش از .I string2\^ بیاید. .TP \f2string1\fP \f3>\fP \f2string2\fP درست است اگر .I string1\^ بر اساس محلی‌سازی (locale) جاری پس از .I string2\^ بیاید. .PP مقایسه‌های حسابی منسوخ زیر نیز مجاز هستند: .PD 0 .TP \f2exp1\fP \f3\-eq\fP \f2exp2\fP درست است اگر .I exp1\^ برابر با .IR exp2 باشد. .TP \f2exp1\fP \f3\-ne\fP \f2exp2\fP درست است اگر .I exp1\^ برابر با .IR exp2 نباشد. .TP \f2exp1\fP \f3\-lt\fP \f2exp2\fP درست است اگر .I exp1\^ کوچک‌تر از .IR exp2 باشد. .TP \f2exp1\fP \f3\-gt\fP \f2exp2\fP درست است اگر .I exp1\^ بزرگ‌تر از .IR exp2 باشد. .TP \f2exp1\fP \f3\-le\fP \f2exp2\fP درست است اگر .I exp1\^ کوچک‌تر یا مساوی .IR exp2 باشد. .TP \f2exp1\fP \f3\-ge\fP \f2exp2\fP درست است اگر .I exp1\^ بزرگ‌تر یا مساوی .IR exp2 باشد. .PD .PP در هر یک از عبارات بالا، اگر .I file\^ به فرم \f3/dev/fd/\fP\f2n\fP باشد که در آن .I n\^ یک عدد صحیح است، آزمایش روی فایل بازی که توصیف‌گر فایل آن .IR n است اعمال می‌شود. .PP یک عبارت ترکیبی می‌تواند از این عناصر اولیه با استفاده از هر یک از موارد زیر که به ترتیب اولویت نزولی فهرست شده‌اند ساخته شود: .PD 0 .TP \f3(\fP\f2expression\fP\f3)\fP درست است اگر .I expression\^ درست باشد. برای گروه‌بندی عبارات استفاده می‌شود. .TP \f3!\fP \f2expression\fP درست است اگر .I expression\^ نادرست باشد. .TP \f2expression1\fP \f3&&\fP \f2expression2\fP درست است اگر هر دو عبارت .I expression1\^ و .I expression2\^ درست باشند. .TP \f2expression1\fP \f3\(bv\(bv\fP \f2expression2\fP درست است اگر حداقل یکی از .I expression1\^ یا .I expression2\^ درست باشد. .PD .SS "ورودی/خروجی (Input/Output)" پیش از اجرای یک دستور، ورودی و خروجی آن ممکن است با استفاده از یک نمادگذاری ویژه که توسط پوسته تفسیر می‌شود، تغییر مسیر داده شوند. موارد زیر ممکن است در هر کجای یک دستور ساده ظاهر شوند یا قبل و بعد از یک .I command\^ قرار گیرند و به دستور فراخوانی‌شده ارسال .I نمی‌شوند\^ . جایگزینی دستور، بسط پارامتر و جایگزینی حسابی پیش از استفاده از .I word\^ یا .I digit\^ رخ می‌دهند، مگر در مواردی که در زیر ذکر شده است. تولید نام فایل تنها در صورتی انجام می‌شود که پوسته تعاملی باشد و الگو فقط با یک فایل مطابقت داشته باشد. تفکیک فیلد انجام نمی‌شود. .PP در هر یک از تغییر مسیرهای زیر، اگر .I file\^ به فرم \f3/dev/sctp/\fP\f2host\fP\f3/\fP\f2port\fP ، \f3/dev/tcp/\fP\f2host\fP\f3/\fP\f2port\fP یا \f3/dev/udp/\fP\f2host\fP\f3/\fP\f2port\fP باشد، که در آن .I host\^ یک نام میزبان یا نشانی میزبان است و .I port\^ یک سرویس با نام یا یک شماره پورت صحیح است، آنگاه تغییر مسیر تلاش می‌کند یک اتصال \f3tcp\fP ، \f3sctp\fP یا \f3udp\fP به سوکت متناظر برقرار کند. .PP هیچ فاصله‌ای بین کاراکترهای عملگرهای تغییر مسیر مجاز نیست. .TP 14 .BI < word استفاده از فایل .I word\^ به عنوان ورودی استاندارد (توصیف‌گر فایل 0). .TP .BI > word استفاده از فایل .I word\^ به عنوان خروجی استاندارد (توصیف‌گر فایل 1). اگر فایل وجود نداشته باشد، ایجاد می‌شود. اگر فایل وجود داشته باشد و گزینه .B noclobber روشن باشد، این امر موجب خطا می‌شود؛ در غیر این صورت، طول آن به صفر کاهش می‌یابد (خالی می‌شود). .TP .BI >| word مشابه .BR > است، با این تفاوت که بر گزینه .B noclobber غلبه می‌کند. .TP .BI >; word نوشتن خروجی در یک فایل موقت. اگر دستور با موفقیت به پایان برسد، نام آن به .IR word تغییر می‌یابد، در غیر این صورت، فایل موقت حذف می‌شود. .BI >; word نمی‌تواند با دستور توکار .IR exec (2) استفاده شود. .TP .BI >> word استفاده از فایل .I word\^ به عنوان خروجی استاندارد. اگر فایل وجود داشته باشد، خروجی به آن ضمیمه می‌شود (با رفتن اولیه به انتهای فایل)؛ در غیر این صورت، فایل ایجاد می‌شود. .TP .BI <> word باز کردن فایل .I word\^ برای خواندن و نوشتن به عنوان ورودی استاندارد. .TP .BI <>; word مشابه .BI <> word است، با این تفاوت که اگر دستور با موفقیت پایان یابد، اندازه .I word\^ به آفست پایان دستور کوتاه می‌شود. .BI <>; word نمی‌تواند با دستور توکار .IR exec (2) استفاده شود. .TP \f3<<\fP\*(OK\f3\-\fP\*(CK\f2word\fP ورودی پوسته تا خطی خوانده می‌شود که پس از حذف نقل‌قول‌ها همانند .IR word باشد، یا تا انتهای فایل. هیچ جایگزینی پارامتر، جایگزینی دستور، جایگزینی حسابی یا تولید نام فایل روی .IR word انجام نمی‌شود. سند حاصل که .IR here-document نامیده می‌شود، به ورودی استاندارد تبدیل می‌شود. اگر هر کاراکتری از .I word\^ نقل‌قول شده باشد، هیچ تفسیری روی کاراکترهای سند صورت نمی‌گیرد؛ در غیر این صورت، بسط پارامتر، جایگزینی دستور و جایگزینی حسابی رخ می‌دهند، .B \enew-line نادیده گرفته می‌شود و .B \e باید برای نقل‌قول کردن کاراکترهای .BR \e ، .BR $ و .BR \*` استفاده شود. اگر .B \- به .BR << ضمیمه شود، تمام تب‌های ابتدایی از .I word\^ و از سند حذف می‌شوند. اگر .B # به .BR << ضمیمه شود، فاصله‌ها و تب‌های ابتدایی از خط اول سند حذف می‌شوند و تا میزان معادل فرورفتگی از خطوط باقی‌مانده و از .IR word حذف خواهد شد. برای اهداف تعیین فرورفتگی، فرض می‌شود که در هر ۸ ستون یک توقف تب (tab stop) رخ می‌دهد. .TP \f3<<<\fP\f2word\fP شکل کوتاهی از here-document که در آن \f2word\fP پس از انجام هرگونه بسط پارامتر، جایگزینی دستور و جایگزینی حسابی، به محتوای here-document تبدیل می‌شود. .TP .BI <& digit ورودی استاندارد از توصیف‌گر فایل .I digit تکثیر می‌شود (نگاه کنید به .IR dup (2)). به طور مشابه برای خروجی استاندارد با استفاده از \f3>&\^\f2digit\fR. .TP .BI <& digit \- توصیف‌گر فایل ارائه‌شده توسط .I digit به ورودی استاندارد منتقل می‌شود. به طور مشابه برای خروجی استاندارد با استفاده از \f3>&\^\f2digit\f3\-\fR. .TP .B <&\- ورودی استاندارد بسته می‌شود. به طور مشابه برای خروجی استاندارد با استفاده از .BR >&\- . .TP .B <&p ورودی از هم‌پوشه (co-process) به ورودی استاندارد منتقل می‌شود. .TP .B >&p خروجی به هم‌پوشه (co-process) به خروجی استاندارد منتقل می‌شود. .TP .BI <# \^\^\^ (( expr )) ارزیابی عبارت حسابی .I expr\^ و تنظیم موقعیت توصیف‌گر فایل 0 به اندازه مقدار حاصل به بایت از ابتدای فایل. متغیرهای .B CUR و .B EOF هنگام ارزیابی .IR expr به ترتیب به آفست جاری و آفست پایان فایل ارزیابی می‌شوند. .TP .BI ># \^\^\^ (( offset )) مشابه .B <# است، با این تفاوت که روی توصیف‌گر فایل 1 اعمال می‌شود. .TP .BI <# pattern پیمایش به جلو تا ابتدای خط بعدی حاوی .IR pattern . .TP .BI <## pattern مشابه .B <# است، با این تفاوت که بخشی از فایل که رد می‌شود در خروجی استاندارد کپی می‌گردد. .PP اگر یکی از موارد بالا بدون فاصله با یک رقم همراه باشد، شماره توصیف‌گر فایل ارجاع داده شده همان رقمی است که مشخص شده است (به جای 0 یا 1 پیش‌فرض). اگر یکی از موارد بالا به جز .BR >&\- و شکل‌های .B ># و .B <# ، بدون فاصله با .BI { varname } همراه باشد، یک شماره توصیف‌گر فایل > 10 توسط پوسته انتخاب شده و در متغیر .IR varname ذخیره خواهد شد. اگر .B >&\- یا هر یک از شکل‌های .B ># و .B <# با .BI { varname } همراه باشد، مقدار .I varname\^ توصیف‌گر فایلی را مشخص می‌کند که باید بسته شود یا موقعیت آن تنظیم گردد. به عنوان مثال: .PP .RS \fB\&.\|.\|. \|2>&1\fR .RE .PP به این معنی است که توصیف‌گر فایل 2 برای نوشتن به عنوان یک نسخه تکراری از توصیف‌گر فایل 1 باز شود و .PP .RS \fBexec {n}\f2fname\^\fP 2>&1\fR .RE .PP ابتدا توصیف‌گر فایل 1 را با فایل .I fname\^ مرتبط می‌کند. سپس توصیف‌گر فایل 2 را با فایلی که با توصیف‌گر فایل 1 مرتبط است (یعنی .IR fname\^ ) مرتبط می‌سازد. اگر ترتیب تغییر مسیرها معکوس بود، توصیف‌گر فایل 2 با ترمینال مرتبط می‌شد (با فرض اینکه توصیف‌گر فایل 1 با آن مرتبط بوده باشد) و سپس توصیف‌گر فایل 1 با فایل .I fname\^ مرتبط می‌شد. .PP اگر پس از یک دستور .B & بیاید و کنترل کار (job control) فعال نباشد، ورودی استاندارد پیش‌فرض برای دستور، فایل خالی .B /dev/null خواهد بود. در غیر این صورت، محیط اجرای یک دستور شامل توصیف‌گرهای فایل پوسته فراخوان به همان صورتی است که توسط مشخصات ورودی/خروجی اصلاح شده است. .SS "محیط (Environment)" .I محیط\^ (نگاه کنید به .IR environ (7)) فهرستی از جفت‌های نام-مقدار است که به همان روش یک فهرست آرگومان معمولی به یک برنامه در حال اجرا ارسال می‌شود. نام‌ها باید .I شناسه‌ها\^ (identifiers) باشند و مقادیر رشته‌های کاراکتری هستند. پوسته به روش‌های گوناگونی با محیط تعامل دارد. در زمان فراخوانی، پوسته محیط را پویش کرده و برای هر نام یافت‌شده یک متغیر ایجاد می‌کند، مقدار و ویژگی‌های مربوطه را به آن اختصاص می‌دهد و آن را به عنوان .I export علامت‌گذاری می‌کند. دستورات اجرا شده محیط را به ارث می‌برند. اگر کاربر مقادیر این متغیرها را تغییر دهد یا متغیرهای جدیدی ایجاد کند، با استفاده از دستورات .B export یا .B typeset \-x آن‌ها بخشی از محیط می‌شوند. محیطی که توسط هر دستور اجرا شده دیده می‌شود، بدین ترتیب از هر جفت نام-مقداری تشکیل می‌شود که در ابتدا توسط پوسته به ارث برده شده و ممکن است مقادیر آن‌ها توسط پوسته جاری تغییر یافته باشد، به علاوه هر مورد اضافه‌شده‌ای که باید در دستورات .B export یا .B typeset \-x مشخص شود. .PP محیط برای هر .I simple-command\^ یا تابع ممکن است با پیشوند قرار دادن یک یا چند انتساب متغیر تقویت شود. یک آرگومان انتساب متغیر کلمه‌ای به فرم .IR identifier=value است. بنابراین: .PP .RS \fB\s-1TERM\s+1=450 \|cmd \|args\fR و .br \fB(export \|\s-1TERM\s+1; \|\s-1TERM\s+1=450; \|cmd \|args)\fR .RE .PP معادل هستند (تا جایی که به اجرای .I cmd\^ در بالا مربوط می‌شود، به جز دستورات توکار ویژه‌ای که در زیر فهرست شده‌اند \- مواردی که یک خنجر (dagger) قبل از آن‌ها آمده است). .PP اگر گزینه منسوخ‌شده .B \-k تنظیم شده باشد، .I تمام\^ آرگومان‌های انتساب متغیر در محیط قرار می‌گیرند، حتی اگر پس از نام دستور بیایند. دستورات زیر ابتدا .B "a=b c" و سپس .B c را چاپ می‌کنند: .PP .RS .nf .ft B echo \|a=b \|c set \|\-k echo \|a=b \|c .ft R .fi .RE این قابلیت برای استفاده در اسکریپت‌های نوشته‌شده برای نسخه‌های اولیه پوسته در نظر گرفته شده است و استفاده از آن در اسکریپت‌های جدید اکیداً نهی می‌شود. احتمال دارد روزی این ویژگی حذف شود. .SS "توابع (Functions)" .PP به دلایل تاریخی، دو روش برای تعریف توابع وجود دارد: نحو .IB name (\^) و نحو .B function .I name\^ که در بخش .I "دستورات (Commands)" در بالا توضیح داده شده‌اند. توابع پوسته خوانده شده و به صورت داخلی ذخیره می‌شوند. نام‌های نام‌مستعار هنگام خوانده شدن تابع تفکیک می‌شوند. توابع همانند دستورات اجرا می‌شوند و آرگومان‌ها به عنوان پارامترهای مکانی به آن‌ها ارسال می‌گردند. (بخش .I "اجرا (Execution)" در ادامه را ببینید.) .PP توابعی که با نحو .B function .I name تعریف شده و با نام فراخوانی می‌شوند، در همان پردازش فراخواننده اجرا می‌گردند و تمام فایل‌ها و دایرکتوری کاری جاری را با فراخواننده به اشتراک می‌گذارند. تله‌های (traps) دریافت‌شده توسط فراخواننده، درون تابع به رفتار پیش‌فرض خود بازنشانی می‌شوند. یک شرط تله که توسط تابع دریافت یا نادیده گرفته نشود، باعث خاتمه تابع و ارسال شرط به فراخواننده می‌گردد. یک تله روی .SM .B EXIT که درون یک تابع تنظیم شده باشد، پس از اتمام تابع در محیط فراخواننده اجرا می‌شود. به طور معمول، متغیرها میان برنامه فراخواننده و تابع به اشتراک گذاشته می‌شوند. با این حال، دستور داخلی ویژه .B typeset که درون یک تابع استفاده شود، متغیرهای محلی تعریف می‌کند که حوزه دید آن‌ها شامل تابع جاری است. این متغیرها را می‌توان در فهرست انتساب متغیر پیش از فراخوانی یا به عنوان آرگومان‌های ارجاع نامی، به توابعی که فراخوانی می‌کنند ارسال کرد. خطاهای درون توابع، کنترل را به فراخواننده بازمی‌گردانند. .PP توابع تعریف‌شده با نحو .IB name (\^) و توابع تعریف‌شده با نحو .B function .I name که با دستور داخلی ویژه \f3\s+2.\s-2\fP فراخوانی می‌شوند، در محیط فراخواننده اجرا شده و تمام متغیرها و تله‌ها را با فراخواننده به اشتراک می‌گذارند. خطاهای درون اجرای این توابع باعث توقف اسکریپت حاوی آن‌ها می‌شود. .PP دستور داخلی ویژه .B return برای بازگشت از فراخوانی‌های تابع استفاده می‌شود. .PP نام‌های توابع را می‌توان با گزینه .B \-f یا .B +f از دستور داخلی ویژه .B typeset فهرست کرد. متن توابع نیز در صورت در دسترس بودن با .B \-f فهرست خواهد شد. توابع را می‌توان با گزینه .B \-f از دستور داخلی ویژه .B unset لغو تعریف (undefined) کرد. .PP به طور معمول، هنگامی که پوسته یک اسکریپت را اجرا می‌کند، توابع لغو می‌شوند. توابعی که نیاز است در میان فراخوانی‌های مجزای پوسته تعریف‌شده باقی بمانند، باید در یک دایرکتوری قرار گیرند و متغیر .B .SM FPATH باید حاوی نام این دایرکتوری باشد. آن‌ها همچنین می‌توانند در فایل .B .SM ENV مشخص شوند. .SS "توابع انضباطی (Discipline Functions)" هر متغیر می‌تواند صفر یا چند تابع انضباطی مرتبط با خود داشته باشد. پوسته در ابتدا نام‌های انضباطی \f3get\fP، \f3set\fP، \f3append\fP و \f3unset\fP را می‌شناسد، اما هنگام تعریف انواع جدید می‌توان به آن‌ها افزود. در بیشتر سیستم‌ها، سایر موارد را می‌توان در زمان اجرا از طریق افزونه رابط برنامه‌نویسی C ارائه‌شده توسط ابزار داخلی .B builtin اضافه کرد. اگر تابع انضباطی \f3get\fP برای یک متغیر تعریف شده باشد، هر زمان که به متغیر داده‌شده ارجاع شود، فراخوانی می‌گردد. اگر درون تابع انضباطی به متغیر \f3.sh.value\fP مقداری انتساب داده شود، متغیر مورد ارجاع به جای مقدار خود، این مقدار را ارزیابی می‌کند. اگر تابع انضباطی \f3set\fP برای یک متغیر تعریف شده باشد، هر زمان که مقداری به متغیر انتساب داده شود، فراخوانی می‌گردد. اگر تابع انضباطی \f3append\fP برای یک متغیر تعریف شده باشد، هر زمان که مقداری به متغیر داده‌شده الصاق شود، فراخوانی می‌گردد. به متغیر \f3.sh.value\fP مقدار متغیر پیش از فراخوانی تابع انضباطی داده می‌شود، و پس از اتمام تابع انضباطی، مقدار \f3.sh.value\fP به متغیر انتساب داده خواهد شد. اگر \f3.sh.value\fP درون تابع انضباطی لغو شود (unset)، آن مقدار بدون تغییر باقی می‌ماند. اگر تابع انضباطی \f3unset\fP برای یک متغیر تعریف شده باشد، هر زمان که متغیر داده‌شده لغو شود، فراخوانی می‌گردد. متغیر لغو نخواهد شد مگر اینکه صریحاً از درون این تابع انضباطی لغو شود. .PP متغیر .B .sh.name حاوی نام متغیری است که تابع انضباطی برای آن فراخوانی شده است، .B .sh.subscript اندیس (subscript) متغیر است، و .B .sh.value حاوی مقداری خواهد بود که درون تابع انضباطی .B set انتساب داده می‌شود. متغیر .B _ ارجاعی به متغیر شامل اندیس آن (در صورت وجود) است. برای تابع انضباطی \f3set\fP، تغییر دادن .B .sh.value مقداری را که انتساب داده می‌شود تغییر خواهد داد. در نهایت، بسط \f3${\fP\f2var\^\fP\f3.\fP\f2name\^\fP\f3}\fP، هنگامی که \f2name\^\fP نام یک تابع انضباطی است و هیچ متغیری با این نام وجود ندارد، معادل جایگزینی دستور \f3${ \fP\f2var\^\fP\f3.\fP\f2name\^\fP\f3;}\fP است. .SS "فضاهای نام (Name Spaces)" دستورات و توابعی که به عنوان بخشی از .I list\^ یک دستور .B namespace اجرا می‌شوند و متغیرها را تغییر می‌دهند یا متغیرهای جدید ایجاد می‌کنند، متغیر جدیدی ایجاد می‌نمایند که نام آن برابر با نام فضای نام مشخص‌شده توسط .I identifier\^ به همراه پیشوند \fB\s+2.\s-2\fP است. هنگامی که به متغیری با نام .I name\^ ارجاع می‌شود، ابتدا با استفاده از \fB\s+2.\s-2\fP\f2identifier\fP\fB\s+2.\s-2\fP\f2name\fP جستجو می‌گردد. به طور مشابه، تابعی که توسط دستوری در .I list\^ دستور .B namespace تعریف شود، با استفاده از نام فضای نام به همراه پیشوند \fB\s+2.\s-2\fP ایجاد می‌گردد. .PP هنگامی که .I list\^ یک دستور .B namespace حاوی یک دستور .B namespace دیگر باشد، نام‌های متغیرها و توابعی که ایجاد می‌شوند شامل نام متغیر یا تابع به همراه پیشوند فهرست .IR identifier\^ ها است که پیش از هر کدام \fB\s+2.\s-2\fP قرار دارد. .PP خارج از یک فضای نام، به متغیر یا تابعی که درون یک فضای نام ایجاد شده است می‌توان با قرار دادن نام فضای نام در ابتدای آن ارجاع داد. .PP به طور پیش‌فرض، متغیرهایی که با \fB\s+2.\s-2sh\fP شروع می‌شوند در فضای نام .B sh قرار دارند. .SS "متغیرهای نوع (Type Variables)" متغیرهای دارای نوع (Typed variables) روشی برای ایجاد ساختار داده‌ها و اشیاء فراهم می‌کنند. یک نوع می‌تواند توسط یک کتابخانه مشترک، توسط دستور داخلی .B enum که در ادامه توضیح داده شده، یا با استفاده از گزینه جدید .B \-T از دستور داخلی .B typeset تعریف شود. با گزینه .B \-T از .BR typeset ، نام نوع که به عنوان آرگومان گزینه به .B \-T مشخص می‌شود، با یک انتساب متغیر مرکب که نوع را تعریف می‌کند تنظیم می‌گردد. تعاریف توابع می‌توانند درون انتساب متغیر مرکب ظاهر شوند و این توابع به توابع انضباطی برای این نوع تبدیل شده و می‌توانند توسط هر نمونه (instance) از آن نوع فراخوانی یا بازتعریف شوند. نام تابع .B create به صورت ویژه مدیریت می‌شود. این تابع برای هر نمونه از نوع که ایجاد می‌شود فراخوانی می‌گردد اما به ارث برده نمی‌شود و نمی‌تواند برای هر نمونه بازتعریف شود. .PP هنگامی که یک نوع تعریف می‌شود، یک دستور داخلی ویژه با همان نام اضافه می‌گردد. این دستورات داخلی، دستورات اعلانی هستند و از همان قوانین بسط تمام دستورات داخلی ویژه تعریف‌شده در ادامه که با \(dg\(dg مشخص شده‌اند پیروی می‌کنند. این دستورات متعاقباً می‌توانند درون تعاریف انواع بعدی استفاده شوند. صفحه راهنما برای این دستورات را می‌توان با استفاده از گزینه .B \-\-man یا هر یک از گزینه‌های دیگر .B \-\- که همراه با .B getopts توضیح داده شده‌اند ایجاد کرد. گزینه‌های .BR \-r ، .BR \-a ، .BR \-A ، .BR \-h و .B \-S از .B typeset همراه با هر یک از این دستورات داخلی جدید مجاز هستند. .PP یک نمونه از یک نوع با فراخوانی نام نوع به همراه یک یا چند نام نمونه ایجاد می‌شود. هر نمونه از نوع با یک کپی از زیرمتغیرها مقداردهی اولیه می‌شود، به جز زیرمتغیرهایی که با گزینه .B \-S تعریف شده‌اند. متغیرهای تعریف‌شده با .B \-S بین تمام نمونه‌های آن نوع به اشتراک گذاشته می‌شوند. هر نمونه می‌تواند مقدار هر زیرمتغیری را تغییر دهد و همچنین می‌تواند توابع انضباطی جدیدی با همان نام‌های تعریف‌شده توسط تعریف نوع و نیز هر نام انضباطی استاندارد تعریف کند. هیچ زیرمتغیر اضافی را نمی‌توان برای هیچ نمونه‌ای تعریف کرد. .PP هنگام تعریف یک نوع، اگر مقدار یک زیرمتغیر تنظیم نشده باشد و صفت .B \-r مشخص شده باشد، باعث می‌شود که آن زیرمتغیر به یک زیرمتغیر الزامی تبدیل شود. هر زمان که نمونه‌ای از یک نوع ایجاد می‌شود، تمام زیرمتغیرهای الزامی باید مشخص شوند. این زیرمتغیرها در هر نمونه به صورت فقط‌خواندنی (readonly) درمی‌آیند. .PP هنگامی که .B unset روی یک زیرمتغیر درون یک نوع فراخوانی شود و صفت .B \-r برای این فیلد مشخص نشده باشد، مقدار آن به مقدار پیش‌فرض مرتبط با آن نوع بازنشانی می‌شود. فراخوانی .B unset روی یک نمونه نوع که درون نوع دیگری قرار ندارد، تمام زیرمتغیرها و خود متغیر را حذف می‌کند. .PP یک تعریف نوع می‌تواند از تعریف نوع دیگری مشتق شود؛ این کار با تعریف نخستین نام زیرمتغیر به عنوان .B _ و تعریف نوع آن به عنوان نوع پایه انجام می‌پذیرد. هر تعریف باقی‌مانده، اضافات و تغییراتی خواهد بود که روی نوع جدید اعمال می‌شود. اگر نام نوع جدید با نام نوع پایه یکسان باشد، نوع جایگزین شده و نوع اصلی دیگر در دسترس نخواهد بود. .PP دستور .B typeset با گزینه .B \-T و بدون آرگومان گزینه یا عملوند، تمام تعاریف نوع را در خروجی استاندارد با قالبی می‌نویسد که برای ایجاد مجدد تمام آن انواع قابل خواندن باشد. .SS "کارها و پردازش‌ها (Jobs)" .PP اگر گزینه .B monitor از دستور .B set روشن باشد، یک پوسته تعاملی یک \fIکار (job)\fR را به هر خط‌لوله (pipeline) نسبت می‌دهد. پوسته جدولی از کارهای جاری را نگهداری می‌کند که توسط دستور .B jobs چاپ می‌شود و اعداد صحیح کوچکی را به آن‌ها اختصاص می‌دهد. هنگامی که یک کار به صورت ناهمگام با .B & آغاز می‌شود، پوسته خطی شبیه به زیر چاپ می‌کند: .PP .DT [1] 1234 .PP که نشان می‌دهد کارِ ناهمگام آغازشده، کار شماره ۱ بوده و دارای یک پردازش (سطح بالا) با شناسه پردازش ۱۲۳۴ بوده است. .PP این بند و بند بعدی نیازمند ویژگی‌هایی هستند که در همه نسخه‌های UNIX وجود ندارند و ممکن است اعمال نشوند. اگر در حال اجرای یک کار هستید و مایلید کار دیگری انجام دهید، می‌توانید کلید \fB^Z\fR (control-Z) را فشار دهید که یک سیگنال STOP به کار جاری ارسال می‌کند. سپس پوسته معمولاً نشان می‌دهد که کار متوقف شده است (`Stopped`) و اعلان (prompt) دیگری را چاپ می‌کند. سپس می‌توانید وضعیت این کار را دستکاری کنید، آن را با دستور .B bg در پس‌زمینه قرار دهید، یا دستورات دیگری را اجرا کنید و در نهایت با دستور اجرای پیش‌زمینه .BR fg کار را مجدداً به پیش‌زمینه بازگردانید. یک \fB^Z\fR فوراً اعمال می‌شود و مانند یک وقفه (interrupt) عمل می‌کند، به این صورت که خروجی‌های معلق و ورودی‌های خوانده‌نشده هنگام فشرده شدن آن دور ریخته می‌شوند. .PP کاری که در پس‌زمینه اجرا می‌شود، در صورتی که تلاش کند از ترمینال بخواند، متوقف خواهد شد. کارهای پس‌زمینه معمولاً مجاز به تولید خروجی هستند، اما این امکان را می‌توان با اجرای دستور .B "stty tostop" غیرفعال کرد. اگر این گزینه tty را تنظیم کنید، کارهای پس‌زمینه هنگام تلاش برای تولید خروجی، درست مانند زمانی که تلاش می‌کنند ورودی بخوانند، متوقف خواهند شد. .PP یک استخر کار (job pool) مجموعه‌ای از کارها است که با .I list\^ .B & آغاز شده و با یک نام مرتبط شده‌اند. .PP چندین روش برای ارجاع به کارها در پوسته وجود دارد. یک کار را می‌توان با شناسه پردازش هر یک از پردازش‌های آن کار یا با یکی از موارد زیر مشخص کرد: .PD 0 .TP .BI % number کار با شماره مشخص‌شده. .TP .I pool\^ تمام کارهای موجود در استخر کار با نام .IR pool . .TP .IB pool . number کار شماره .I number\^ در استخر کار با نام .IR pool . .TP .BI % string هر کاری که خط فرمان آن با .I string شروع شود. .TP .BI %? string هر کاری که خط فرمان آن حاوی .I string باشد. .TP .BI %% کار جاری. .TP .BI %+ معادل .BR %% . .TP .BI %\- کار قبلی. .PD علاوه بر این، مگر در مواردی که خلاف آن ذکر شده باشد، هر جا که بتوان یک کار را مشخص کرد، نام یک استخر کار پس‌زمینه را می‌توان برای نشان دادن تمام کارهای آن استخر به کار برد. .PP پوسته به محض اینکه پردازشی تغییر وضعیت دهد، بلافاصله مطلع می‌شود. پوسته معمولاً هر زمان که کاری مسدود شود و امکان پیشرفت بیشتر وجود نداشته باشد شما را مطلع می‌سازد، اما این کار را درست قبل از چاپ اعلان (prompt) انجام می‌دهد. این کار به این دلیل انجام می‌شود تا در فعالیت‌های شما اختلالی ایجاد نگردد. گزینه .B notify از دستور .B set باعث می‌شود پوسته این پیام‌های تغییر وضعیت کار را به محض رخ دادن چاپ کند. .PP هنگامی که گزینه .B monitor روشن است، هر کار پس‌زمینه‌ای که تکمیل می‌شود، هر تله تنظیم‌شده برای .B CHLD را فعال می‌کند. .PP هنگامی که تلاش می‌کنید در زمان اجرای کارها یا متوقف بودن آن‌ها از پوسته خارج شوید، با پیام `You have stopped(running) jobs.` به شما هشدار داده می‌شود. می‌توانید از دستور .B jobs برای مشاهده آن‌ها استفاده کنید. اگر بلافاصله دوباره برای خروج تلاش کنید، پوسته بار دوم هشدار نخواهد داد و کارهای متوقف‌شده خاتمه می‌یابند. هنگامی که یک پوسته ورود (login shell) سیگنال HUP دریافت می‌کند، یک سیگنال HUP به هر کاری که با دستور داخلی .B disown (توضیح داده شده در ادامه) سلب مالکیت نشده باشد، ارسال می‌نماید. .SS "سیگنال‌ها (Signals)" سیگنال‌های \s-1INT\s+1 و \s-1QUIT\s+1 برای یک دستور فراخوانی‌شده، در صورتی که پس از دستور .B & آمده باشد و گزینه .B monitor فعال باشد، نادیده گرفته می‌شوند. در غیر این صورت، سیگنال‌ها مقادیر به ارث برده شده توسط پوسته از والد خود را خواهند داشت (اما دستور داخلی .B trap در ادامه را نیز ببینید). .SS "اجرا (Execution)" هر بار که دستوری خوانده می‌شود، جایگزینی‌های فوق انجام می‌پذیرند. اگر نام دستور با یکی از .I "دستورات داخلی ویژه (Special Built-in Commands)\^" فهرست‌شده در زیر مطابقت داشته باشد، درون پردازش جاری پوسته اجرا می‌شود. سپس نام دستور بررسی می‌شود تا مشخص گردد آیا با یک تابع تعریف‌شده توسط کاربر مطابقت دارد یا خیر. در صورت مطابقت، پارامترهای مکانی ذخیره شده و سپس به آرگومان‌های فراخوانی .I function\^ بازنشانی می‌شوند. یک تابع نیز درون پردازش جاری پوسته اجرا می‌شود. هنگامی که .I function\^ تکمیل شود یا دستور .B return را صادر کند، فهرست پارامترهای مکانی بازیابی می‌شود. برای توابع تعریف‌شده با نحو .B function .I name\^ ، هر تله تنظیم‌شده روی .SM .B EXIT درون تابع اجرا می‌گردد. مقدار خروج یک .I function\^ برابر با مقدار آخرین دستور اجراشده است. اگر نام دستور یک .I "دستور داخلی ویژه\^" یا یک .I function\^ تعریف‌شده توسط کاربر نباشد، اما یکی از دستورات داخلی فهرست‌شده در ادامه باشد، درون پردازش جاری پوسته اجرا می‌شود. .PP متغیرهای پوسته .B .SM PATH به همراه متغیر .B .SM FPATH فهرست دایرکتوری‌ها را برای جستجوی نام دستور مشخص می‌کنند. نام‌های دایرکتوری جایگزین با دونقطه .RB ( : ) از یکدیگر جدا می‌شوند. مسیر پیش‌فرض برابر با خروجی .BI getconf\ PATH است. دایرکتوری جاری را می‌توان با دو یا چند دونقطه متوالی یا با یک دونقطه در ابتدا یا انتهای فهرست مسیر مشخص کرد. اگر نام دستور حاوی \f3/\fP باشد، مسیر جستجو استفاده نمی‌شود. در غیر این صورت، هر دایرکتوری در فهرست دایرکتوری‌های تعریف‌شده توسط .B .SM PATH و .B .SM FPATH به ترتیب بررسی می‌شود. اگر دایرکتوریِ در حال جستجو در .B .SM FPATH قرار داشته باشد و حاوی فایلی باشد که نام آن با دستور مورد جستجو مطابقت دارد، این فایل در محیط پوسته جاری بارگذاری می‌شود، به گونه‌ای که گویی آرگومانی برای دستور \fB.\fP است، با این تفاوت که تنها نام‌های مستعار از پیش تنظیم‌شده بسط می‌یابند و تابعی با نام داده‌شده مطابق با توضیحات بالا اجرا می‌گردد. .P اگر این دایرکتوری در .B .SM FPATH نباشد، پوسته ابتدا بررسی می‌کند که آیا نسخه داخلی از دستور مربوط به مسیر داده‌شده وجود دارد یا خیر و در صورت وجود، آن را در پردازش جاری فراخوانی می‌کند. اگر هیچ دستور داخلی یافت نشود، پوسته وجود فایلی به نام .B .paths را در این دایرکتوری بررسی می‌کند. در صورت یافت شدن و وجود خطی به شکل .BI FPATH= path که در آن .I path\^ نام یک دایرکتوری موجود است، آن دایرکتوری بلافاصله پس از دایرکتوری جاری جستجو می‌شود، گویی در متغیر .B .SM FPATH یافت شده است. اگر .I path\^ با / شروع نشود، به صورت نسبی نسبت به دایرکتوریِ در حال جستجو بررسی می‌شود. .P فایل .B .paths سپس برای یافتن خطی به شکل .BI PLUGIN_LIB= libname \*(OK \f3:\fP \f2libname\^\fP \*(CK .\|.\|. بررسی می‌شود. هر کتابخانه مشخص‌شده توسط .I libname\^ به گونه‌ای جستجو می‌شود که گویی یک آرگومان گزینه برای .B "builtin \-f" است و اگر حاوی یک دستور داخلی با نام مشخص‌شده باشد، به جای دستوری با این نام اجرا خواهد شد. هر دستور داخلی بارگذاری‌شده از کتابخانه‌ای که به این روش یافت شود، با دایرکتوری حاوی فایل .B .paths مرتبط می‌گردد، بنابراین فقط در صورتی اجرا می‌شود که در دایرکتوری قبلی یافت نشده باشد. .P در نهایت، دایرکتوری برای یافتن فایلی با نام داده‌شده بررسی می‌شود. اگر فایل دسترسی اجرا داشته باشد اما یک فایل .B a.out نباشد، فرض می‌شود که فایلی حاوی دستورات پوسته است. یک پوسته مجزا برای خواندن آن ایجاد (spawn) می‌شود. در این حالت، تمام متغیرهای سراسری‌نشده (non-exported) حذف می‌شوند. اگر فایل دستورات پوسته دسترسی خواندن نداشته باشد، یا اگر بیت‌های .I setuid یا .I setgid روی فایل تنظیم شده باشند، پوسته یک عامل کمکی (agent) را اجرا می‌کند که وظیفه آن تنظیم دسترسی‌ها و اجرای پوسته با ارسال فایل دستور پوسته به عنوان یک فایل باز است. اگر فایل .B .paths حاوی خطی به شکل .IB name\^ = value\^ در خط اول یا دوم باشد، متغیر محیطی .I name\^ با افزودن دایرکتوری مشخص‌شده توسط .I value\^ به ابتدای فهرست دایرکتوری‌ها تغییر می‌یابد. اگر .I value\^ یک دایرکتوری مطلق نباشد، دایرکتوری را به صورت نسبی نسبت به دایرکتوری‌ای که فایل اجرایی در آن یافت شده است مشخص می‌کند. اگر متغیر محیطی .I name\^ از قبل وجود نداشته باشد، به فهرست متغیرهای محیطی برای دستور مشخص‌شده اضافه خواهد شد. یک دستور داخل پرانتز در یک زیرپوسته (sub-shell) بدون حذف متغیرهای سراسری‌نشده اجرا می‌شود. .SS "ورود مجدد دستور (Command Re-entry)" متن آخرین .B .SM HISTSIZE دستور (پیش‌فرض ۵۱۲) واردشده از یک دستگاه ترمینال در یک فایل تاریخچه .RI ( history ) ذخیره می‌شود. اگر متغیر .B .SM HISTFILE تنظیم نشده باشد یا فایلی که نام می‌برد قابل نوشتن نباشد، از فایل .B \s-1$HOME\s+1/.sh_history استفاده می‌شود. یک پوسته می‌تواند به دستورات تمام پوسته‌های .I تعاملی که از همان .SM .B HISTFILE مشخص‌شده استفاده می‌کنند دسترسی داشته باشد. دستور داخلی .B hist\^ برای فهرست کردن یا ویرایش بخشی از این فایل استفاده می‌شود. بخشی از فایل که قرار است ویرایش یا فهرست شود را می‌توان با شماره یا با دادن حرف یا حروف اول دستور انتخاب کرد. یک دستور منفرد یا بازه‌ای از دستورات را می‌توان مشخص نمود. اگر برنامه ویرایشگری را به عنوان آرگومان به .B hist\^ مشخص نکنید، مقدار متغیر .SM .B HISTEDIT استفاده می‌شود. اگر .SM .B HISTEDIT تنظیم نشده باشد، متغیر منسوخ .SM .B FCEDIT استفاده می‌شود. اگر .SM .B FCEDIT تعریف نشده باشد، از .B /bin/ed استفاده می‌گردد. دستور(ات) ویرایش‌شده پس از خروج از ویرایشگر چاپ و مجدداً اجرا می‌شوند مگر اینکه بدون ذخیره کردن خارج شوید. گزینه .B \-s (و در نسخه‌های منسوخ، نام ویرایشگر .BR \-\^ ) برای رد کردن مرحله ویرایش و اجرای مجدد دستور استفاده می‌شود. در این حالت یک پارامتر جایگزینی به شکل \f2old\fP\f3=\fP\f2new\fP می‌تواند برای تغییر دستور پیش از اجرا استفاده شود. به عنوان مثال، با نام مستعار از پیش تنظیم‌شده .BR r که به .B "\(fmhist \-s\(fm" نام‌مستعار داده شده است، تایپ کردن `\f3r bad=good c\fP' جدیدترین دستوری را که با حرف .B c شروع می‌شود مجدداً اجرا می‌کند و اولین رخداد رشته .B bad را با رشته .B good جایگزین می‌نماید. .SS "گزینه‌های ویرایش درون‌خطی (In-line Editing Options)" به‌طور معمول، هر خط دستوری که از یک دستگاه ترمینال وارد می‌شود صرفاً تایپ شده و پس از آن یک \f3new-line\fP (کلید «RETURN» یا «LINE\ FEED») می‌آید. اگر هر یک از گزینه‌های .BR emacs ، .BR gmacs یا .B vi فعال باشد، کاربر می‌تواند خط دستور را ویرایش کند. برای ورود به هر یک از این حالت‌های ویرایش، گزینه متناظر را با .B set تنظیم کنید. هر بار که به متغیر .SM .B VISUAL یا .SM .B EDITOR مقداری اختصاص یابد که به یکی از این نام‌های گزینه ختم شود، گزینه ویرایشی متناظر به‌طور خودکار انتخاب می‌شود. .PP قابلیت‌های ویرایش نیازمند این هستند که ترمینال کاربر «RETURN» را به عنوان بازگشت مکان‌نما (carriage return) بدون خط جدید (line feed) بپذیرد و کاراکتر فاصله («\ ») روی نویسه جاری در صفحه بازنویسی شود. .PP مگر در حالتی که گزینه .B multiline روشن باشد، حالت‌های ویرایش مفهومی را پیاده‌سازی می‌کنند که در آن کاربر از درون یک پنجره به خط جاری نگاه می‌کند. عرض این پنجره مقدار متغیر .SM .B COLUMNS (در صورت تعریف شدن) و در غیر این صورت ۸۰ است. اگر عرض پنجره برای نمایش اعلان (prompt) و باقی گذاشتن حداقل ۸ ستون برای ورود ورودی بسیار کوچک باشد، اعلان از سمت چپ بریده می‌شود. اگر خط از عرض پنجره منهای دو طولانی‌تر باشد، نشانه‌ای در انتهای پنجره نمایش داده می‌شود تا به کاربر اطلاع دهد. با حرکت مکان‌نما و رسیدن آن به مرزهای پنجره، پنجره حول مکان‌نما مرکزیت می‌یابد. این نشانه یک .BR > " (<" , .BR * ) است در صورتی که خط در سمت راست (چپ، هر دو طرف) پنجره امتداد یافته باشد. .PP دستورات جستجو در هر حالت ویرایش دسترسی به فایل تاریخچه را فراهم می‌کنند. فقط رشته‌ها مطابقت داده می‌شوند و نه الگوها، اگرچه وجود یک .B ^ در ابتدای رشته، تطبیق را به شروع از اولین نویسه خط محدود می‌کند. .PP هر یک از حالت‌های ویرایش عملیاتی برای فهرست کردن فایل‌ها یا دستوراتی دارند که با کلمه نیمه‌کاره واردشده مطابقت دارند. هنگامی که این عملیات روی اولین کلمه خط، یا اولین کلمه پس از یک .BR ; ، .BR \(bv ، .BR & یا .BR ( اعمال شود، و کلمه با .B \(ap شروع نشود یا حاوی یک .BR / نباشد، فهرستی از نام‌های مستعار (alias)، توابع و دستورات اجرایی تعریف‌شده توسط متغیر .B .SM PATH که می‌توانند با این کلمه جزئی مطابقت داشته باشند نمایش داده می‌شود. در غیر این صورت، فهرست فایل‌هایی که با کلمه داده‌شده مطابقت دارند نمایش می‌یابد. اگر کلمه نیمه‌کاره واردشده شامل نویسه‌های بسط فایل نباشد، پیش از ایجاد این فهرست‌ها یک .B * به انتهای آن افزوده می‌شود. پس از نمایش فهرست ایجادشده، خط ورودی دوباره رسم می‌شود. این عملیات‌ها به‌ترتیب فهرست‌بندی نام دستور (command name listing) و فهرست‌بندی نام فایل (file name listing) نامیده می‌شوند. عملیات دیگری نیز وجود دارند که تکمیل نام دستور (command name completion) و تکمیل نام فایل (file name completion) نامیده می‌شوند و فهرست دستورات یا فایل‌های منطبق را محاسبه کرده، اما به جای چاپ فهرست، کلمه جاری را با تطبیق کامل یا جزئی جایگزین می‌کنند. برای تکمیل نام فایل، در صورت یکتا بودن تطبیق، اگر فایل یک دایرکتوری باشد یک .B / و اگر دایرکتوری نباشد یک فاصله به انتهای آن افزوده می‌شود. در غیر این صورت، طولانی‌ترین پیشوند مشترک میان تمامی فایل‌های منطبق جایگزین کلمه می‌شود. برای تکمیل نام دستور، تنها بخشی از نام فایل‌ها که پس از آخرین .B / قرار دارد برای یافتن طولانی‌ترین پیشوند دستور استفاده می‌شود. اگر تنها یک نام با این پیشوند مطابقت داشته باشد، کلمه با نام دستور به همراه یک فاصله جایگزین می‌گردد. هنگام استفاده از کلید .I tab\^ برای تکمیل در صورتی که منجر به یک تطبیق یکتا نشود، فشردن مجدد .I tab\^ فهرستی شماره‌گذاری‌شده از گزینه‌های منطبق را ارائه می‌دهد. می‌توان با وارد کردن شماره گزینه موردنظر و به دنبال آن یک کلید .IR tab ، انتخاب مشخصی را انجام داد. .SS "کلیدهای میانبر (Key Bindings)" تله (trap) .B .SM KEYBD می‌تواند برای رهگیری کلیدها هنگام تایپ شدن و تغییر کاراکترهایی که عملاً توسط شل دیده می‌شوند استفاده شود. این تله پس از ورود هر نویسه (یا دنباله‌ای از نویسه‌ها هنگامی که اولین نویسه ESC باشد) در حین خواندن از ترمینال اجرا می‌شود. متغیر .B .sh.edchar حاوی نویسه یا دنباله نویسه‌ای است که تله را ایجاد کرده است. تغییر مقدار .B .sh.edchar در عملیات تله باعث می‌شود شل طوری رفتار کند که گویی مقدار جدید به جای مقدار اصلی از صفحه‌کلید وارد شده است. .PP متغیر .B .sh.edcol روی شماره ستون ورودی مکان‌نما در زمان ورود ورودی تنظیم می‌شود. متغیر .B .sh.edmode هنگام قرار داشتن در حالت درج .B vi (به زیر مراجعه کنید) روی ESC تنظیم شده و در غیر این صورت تهی (null) است. افزودن .B ${.sh.editmode} به ابتدای مقداری که به .B .sh.edchar اختصاص داده می‌شود باعث خواهد شد شل در صورتی که در حالت کنترل نیست به این حالت تغییر وضعیت دهد. .PP این تله برای نویسه‌هایی که به عنوان آرگومان دستورالعمل‌های ویرایش وارد می‌شوند یا هنگام خواندن ورودی برای جستجوی نویسه فراخوانی نمی‌شود. .SS "حالت ویرایش ایمکس (Emacs Editing Mode)" این حالت با فعال کردن یکی از گزینه‌های .B emacs یا .B gmacs فعال می‌شود. تنها تفاوت میان این دو حالت شیوه مدیریت .BR ^T توسط آن‌ها است. برای ویرایش، کاربر مکان‌نما را به نقطه‌ای که نیازمند اصلاح است منتقل کرده و سپس بر حسب نیاز نویسه‌ها یا کلمات را درج یا حذف می‌کند. تمامی دستورات ویرایشی نویسه‌های کنترلی یا دنباله‌های گریز (escape sequences) هستند. نماد نویسه‌های کنترلی یک علامت توان .RB ( ^ ) به همراه نویسه مربوطه است. برای نمونه، .B ^F نماد کلید کنترلی .BR F است. این کلید با نگه‌داشتن کلید «CTRL» (کنترل) و فشردن «f» وارد می‌شود. کلید «SHIFT» فشرده .I نمی‌شود. (نماد .B ^? نشان‌دهنده کلید DEL یا همان delete است.) .PP نماد دنباله‌های گریز .B M- به همراه یک نویسه است. برای نمونه، .B M-f (تلفظ می‌شود متا f) با فشردن کلید ESC (اسکی .BR 033 ) و به دنبال آن «f» وارد می‌شود. .RB ( M-F نماد فشردن کلید ESC و به دنبال آن کلید «SHIFT» به همراه «F» بزرگ است.) .PP تمامی دستورات ویرایشی از هر کجای خط (نه فقط از ابتدای آن) عمل می‌کنند. به جز در مواردی که ذکر شده، کلید «RETURN» یا «LINE FEED» بعد از دستورات ویرایشی وارد نمی‌شود. .PP .PD 0 .TP 10 .BI ^F انتقال مکان‌نما به اندازه یک نویسه به جلو (راست). .PP .TP 10 .BI M-[C انتقال مکان‌نما به اندازه یک نویسه به جلو (راست). .PP .TP 10 .BI M-f انتقال مکان‌نما به اندازه یک کلمه به جلو. (مفهوم کلمه در ویرایشگر .B emacs رشته‌ای از نویسه‌ها شامل حروف، ارقام و زیرخط‌ها است.) .PP .TP 10 .BI ^B انتقال مکان‌نما به اندازه یک نویسه به عقب (چپ). .PP .TP 10 .BI M-[D انتقال مکان‌نما به اندازه یک نویسه به عقب (چپ). .PP .TP 10 .BI M-b انتقال مکان‌نما به اندازه یک کلمه به عقب. .PP .TP 10 .BI ^A انتقال مکان‌نما به ابتدای خط. .PP .TP 10 .BI M-[H انتقال مکان‌نما به ابتدای خط. .PP .TP 10 .BI ^E انتقال مکان‌نما به انتهای خط. .PP .TP 10 .BI M-[Y انتقال مکان‌نما به انتهای خط. .PP .TP 10 .BI ^] char انتقال مکان‌نما به سمت جلو تا نویسه .I char در خط جاری. .PP .TP 10 .BI M-^] char انتقال مکان‌نما به سمت عقب تا نویسه .I char در خط جاری. .PP .TP 10 .BI ^X^X تعویض جایگاه مکان‌نما و نشانه‌گذار (mark). .PP .TP 10 .I erase (نویسه حذف تعریف‌شده توسط کاربر بر اساس دستور .IR stty (1) که معمولاً .B ^H یا .BR # است.) حذف نویسه قبلی. .PP .TP 10 .I lnext (نویسه درج لفظی بعدی تعریف‌شده توسط کاربر بر اساس دستور .IR stty (1) یا .B ^V در صورت عدم تعریف.) ویژگی‌های ویرایشی نویسه بعدی را (در صورت وجود) حذف می‌کند. .PP .TP 10 .BI ^D حذف نویسه جاری. .PP .TP 10 .BI M-d حذف کلمه جاری. .PP .TP 10 .BI M-^H (متا-backspace) حذف کلمه قبلی. .PP .TP 10 .BI M-h حذف کلمه قبلی. .PP .TP 10 .BI M-^? (متا-DEL) حذف کلمه قبلی (اگر نویسه وقفه شما .B ^? (DEL، حالت پیش‌فرض) باشد، این دستور کار نخواهد کرد). .PP .TP 10 .BI ^T جابجایی نویسه جاری با نویسه قبلی و پیشروی مکان‌نما در حالت .IR emacs . جابجایی دو نویسه قبلی در حالت .IR gmacs . .PP .TP 10 .BI ^C تبدیل نویسه جاری به حرف بزرگ. .PP .TP 10 .BI M-c تبدیل کلمه جاری به حرف بزرگ (Capitalize). .PP .TP 10 .BI M-l تبدیل کلمه جاری به حروف کوچک (lower case). .PP .TP 10 .BI ^K حذف از مکان‌نما تا انتهای خط. اگر پارامتر عددی با مقداری کمتر از موقعیت فعلی مکان‌نما پیش از آن بیاید، حذف از موقعیت داده‌شده تا مکان‌نما انجام می‌شود. اگر پارامتر عددی با مقداری بزرگتر از موقعیت فعلی مکان‌نما پیش از آن بیاید، حذف از مکان‌نما تا موقعیت مکان‌نمای داده‌شده انجام می‌شود. .PP .TP 10 .BI ^W حذف از مکان‌نما تا نشانه‌گذار (kill to mark). .PP .TP 10 .BI M-p قرار دادن ناحیه بین مکان‌نما تا نشانه‌گذار در پشته (stack). .PP .TP 10 .I kill (نویسه kill تعریف‌شده توسط کاربر طبق دستور stty، معمولاً .B ^G یا .BR @ .) پاک کردن کل خط جاری. اگر دو نویسه .I kill پشت سر هم وارد شوند، تمام نویسه‌های kill از آن پس باعث رفتن به خط جدید می‌شوند (کاربردی در ترمینال‌های کاغذی). .PP .TP 10 .BI ^Y بازیابی آخرین آیتم حذف‌شده از خط (بازگرداندن آیتم به خط / Yank). .PP .TP 10 .BI ^L رفتن به سطر بعد (Line feed) و چاپ خط جاری. .PP .TP 10 .BI M-^L پاک کردن صفحه نمایش. .PP .TP 10 .BI ^@ (نویسه Null) تنظیم نشانه‌گذار (Set mark). .PP .TP 10 .BI M- space (متا space) تنظیم نشانه‌گذار. .PP .TP 10 .BI ^J (خط جدید / New line) اجرای خط جاری. .PP .TP 10 .BI ^M (بازگشت / Return) اجرای خط جاری. .PP .TP 10 .I eof نویسه پایان فایل (End-of-file)، معمولاً .BR ^D ، تنها در صورتی به عنوان پایان فایل پردازش می‌شود که خط جاری تهی باشد. .PP .TP 10 .BI ^P واکشی دستور قبلی. هر بار که .B ^P وارد شود، به دستور قبلی در تاریخچه دسترسی پیدا می‌کند. در دستورات چندخطی در صورتی که در خط اول نباشد، یک سطر به عقب بازمی‌گردد. .PP .TP 10 .BI M-[A اگر مکان‌نما در انتهای خط باشد، معادل .B ^R است که در آن .I string\^ برابر با محتوای خط جاری تنظیم شده باشد. در غیر این صورت، معادل .B ^P است. .PP .TP 10 .BI M-< واکشی قدیمی‌ترین (دورترین) خط تاریخچه. .PP .TP 10 .BI M-> واکشی جدیدترین (تازه‌ترین) خط تاریخچه. .PP .TP 10 .BI ^N واکشی خط دستور بعدی. هر بار که .B ^N وارد شود، به خط دستور بعدی رو به جلو دسترسی پیدا می‌کند. .PP .TP 10 .BI M-[B معادل .BR ^N . .PP .TP 10 .BI ^R string جستجوی معکوس در تاریخچه برای یافتن خط دستور قبلی حاوی .IR string . اگر پارامتر صفر داده شود، جستجو رو به جلو انجام می‌شود. .I string با فشردن کلید «RETURN» یا «NEW\ LINE» خاتمه می‌یابد. اگر در ابتدای رشته علامت .B ^ قرار گیرد، خط منطبق باید با .I string آغاز شود. اگر .I string حذف شود، خط دستور بعدی حاوی جدیدترین .I string در دسترس قرار می‌گیرد. در این حالت، پارامتر صفر جهت جستجو را معکوس می‌کند. .PP .TP 10 .B ^O اجرا و واکشی \- اجرای خط جاری و واکشی خط بعدی نسبت به خط جاری از فایل تاریخچه. .PP .TP 10 .BI M- digits (Escape) تعریف پارامتر عددی؛ ارقام به عنوان پارامتر دستور بعدی در نظر گرفته می‌شوند. دستوراتی که پارامتر می‌پذیرند عبارتند از: .BR ^F ، .BR ^B ، .IR erase ، .BR ^C ، .BR ^D ، .BR ^K ، .BR ^R ، .BR ^P ، .BR ^N ، .BR ^] ، .BR M-. ، .BR M-^] ، .BR M-_ ، .BR M-= ، .BR M-b ، .BR M-c ، .BR M-d ، .BR M-f ، .BR M-h ، .B M-l و .BR M-^H . .PP .TP 10 .BI M- letter کلید نرم‌افزاری (Soft-key) \- در فهرست نام‌های مستعار شما به دنبال نام مستعاری به نام .BI _ letter جستجو می‌شود و در صورت تعریف بودن چنین نام مستعاری، مقدار آن در صف ورودی درج می‌گردد. .I letter نباید از متاتوابع فوق باشد. .PP .TP 10 .BI M-[ letter کلید نرم‌افزاری \- در فهرست نام‌های مستعار شما به دنبال نام مستعاری به نام .BI _\&_ letter جستجو می‌شود و در صورت تعریف بودن، مقدار آن در صف ورودی درج می‌گردد. از این قابلیت می‌توان برای برنامه‌ریزی کلیدهای تابعی (Function keys) در بسیاری از ترمینال‌ها استفاده کرد. .PP .TP 10 .B M-. آخرین کلمه از دستور قبلی در خط درج می‌شود. اگر پیش از آن یک پارامتر عددی بیاید، مقدار این پارامتر تعیین می‌کند که به جای کلمه آخر کدام کلمه درج شود. .PP .TP 10 .B M-_ مشابه .BR M-. . .PP .TP 10 .B M-* تلاش برای بسط نام فایل (تولید نام) روی کلمه جاری. اگر کلمه با هیچ فایلی مطابقت نداشته باشد یا شامل نویسه‌های الگوی ویژه نباشد، یک ستاره به انتهای آن افزوده می‌شود. .PP .TP 10 .B M-ESC تکمیل نام دستور یا نام فایل همان‌طور که در بالا شرح داده شد. .PP .TP 10 .BI ^I " tab" تلاش برای تکمیل نام دستور یا نام فایل همان‌طور که در بالا شرح داده شد. اگر تکمیل جزئی رخ دهد، تکرار آن همانند ورود .B M-= رفتار خواهد کرد. اگر هیچ تطبیقی یافت نشود یا بعد از .I space\^ وارد شود، یک .I tab\^ درج می‌شود. .PP .TP 10 .B M-= اگر پارامتر عددی پیش از آن نیاید، فهرستی از دستورات یا نام‌های فایل منطبق را طبق توضیحات بالا ایجاد می‌کند. در غیر این صورت، کلمه زیر مکان‌نما با آیتم متناظر با مقدار پارامتر عددی از تازه‌ترین فهرست دستور یا فایل ایجادشده جایگزین می‌شود. اگر مکان‌نما روی کلمه‌ای نباشد، به جای آن درج می‌گردد. .PP .TP 10 .BI ^U ضرب کردن پارامتر دستور بعدی در ۴. .PP .TP 10 .BI \e گریز دادن (Escape) نویسه بعدی. نویسه‌های ویرایشی، نویسه‌های erase، kill و وقفه (interrupt، معمولاً .BR ^? ) کاربر در صورت قرار گرفتن .B \e پیش از آن‌ها می‌توانند در خط دستور یا رشته جستجو وارد شوند. .B \e ویژگی‌های ویرایشی نویسه بعدی را (در صورت وجود) حذف می‌کند. .PP .TP 10 .B M-^V نمایش نسخه شل. .PP .TP 10 .B M-# اگر خط با .B # شروع نشود، یک .B # در ابتدای خط و بعد از هر خط جدید درج شده و خط وارد می‌شود. این کار باعث درج یک توضیح در فایل تاریخچه می‌گردد. اگر خط با .B # شروع شود، علامت .B # حذف شده و یک .B # بعد از هر خط جدید نیز حذف می‌شود. .PD .SS "حالت ویرایش Vi (Vi Editing Mode)" دو حالت تایپ وجود دارد. در ابتدا، هنگامی که دستوری را وارد می‌کنید، در حالت .I input\^ (ورودی) قرار دارید. برای ویرایش، کاربر با فشردن کلید ESC .RB ( 033 ) وارد حالت .I control\^ (کنترل) می‌شود و مکان‌نما را به نقطه‌ای که نیاز به اصلاح دارد منتقل می‌کند و سپس کاراکترها یا کلمات را بر حسب نیاز درج یا حذف می‌نماید. اکثر دستورات کنترلی یک .I count (شمارنده تکرار) اختیاری را پیش از دستور می‌پذیرند. .PP در اکثر سیستم‌ها در حالت .BR vi ، پردازش استاندارد (canonical processing) در ابتدا فعال است و چنانچه سرعت ۱۲۰۰ باود یا بیشتر باشد و دستور شامل کاراکترهای کنترلی باشد یا کمتر از یک ثانیه از نمایش خط اعلان (prompt) سپری شده باشد، دستور مجدداً چاپ (echo) خواهد شد. کاراکتر ESC پردازش استاندارد را برای باقی‌مانده دستور متوقف می‌کند و سپس کاربر می‌تواند خط فرمان را اصلاح نماید. این سازوکار، مزایای پردازش استاندارد را همراه با بازتاب پیش‌تایپ (type-ahead) در حالت خام (raw mode) فراهم می‌کند. .PP اگر گزینه .B viraw نیز تنظیم شده باشد، پردازش استاندارد ترمینال همواره غیرفعال خواهد بود. این حالت برای سیستم‌هایی که از دو جداکننده جایگزین پایان خط پشتیبانی نمی‌کنند ضمنی است، و ممکن است برای برخی ترمینال‌ها سودمند باشد. .SS "\ \ \ \ \ دستورات ویرایش ورودی (Input Edit Commands)" .PP .RS به‌طور پیش‌فرض، ویرایشگر در حالت ورودی قرار دارد. .PD 0 .TP 10 .I erase (کاراکتر حذف تعریف‌شده توسط کاربر مطابق دستور stty، معمولاً .B ^H یا .BR # .) حذف کاراکتر قبلی. .TP 10 .BI ^W حذف کلمه قبلیِ جداشده با فاصله. .TP 10 .I eof به عنوان اولین کاراکتر خط، باعث خروج و پایان کار پوسته می‌شود مگر اینکه گزینه \f3ignoreeof\fP تنظیم شده باشد. در غیر این صورت، این کاراکتر نادیده گرفته می‌شود. .TP 10 .I lnext (کاراکتر درج تحت‌اللفظی بعدی تعریف‌شده توسط کاربر مطابق .IR stty (1) یا .B ^V در صورت عدم تعریف.) ویژگی‌های ویرایشی کاراکتر بعدی (در صورت وجود) را حذف می‌کند. .TP 10 .BI \e نادیده‌گیری (Escape) کاراکتر .I erase یا .I kill بعدی. .TP 10 .BI ^I " tab" تلاش برای تکمیل نام دستور یا فایل مطابق توضیحات بالا انجام می‌دهد و به حالت ورودی بازمی‌گردد. اگر تکمیل جزئی انجام شود، تکرار مجدد آن رفتاری مشابه وارد کردن .B = از حالت کنترل خواهد داشت. اگر تطابقی یافت نشود یا بعد از .IR space\^ وارد شود، یک کاراکتر .I tab\^ درج می‌گردد. .RE .SS "\ \ \ \ \ دستورات ویرایش حرکتی (Motion Edit Commands)" .RS این دستورات مکان‌نما را جابه‌جا می‌کنند. .TP 10 [\f2count\fP]\f3l\fP حرکت مکان‌نما یک کاراکتر به جلو (راست). .TP 10 [\f2count\fP]\f3[C\fP حرکت مکان‌نما یک کاراکتر به جلو (راست). .TP 10 [\f2count\fP]\f3w\fP حرکت مکان‌نما به اندازه یک کلمه حرفی-عددی به جلو. .TP 10 [\f2count\fP]\f3W\fP حرکت مکان‌نما به ابتدای کلمه بعدی پس از فاصله خالی. .TP 10 [\f2count\fP]\f3e\fP حرکت مکان‌نما به انتهای کلمه. .TP 10 [\f2count\fP]\f3E\fP حرکت مکان‌نما به انتهای کلمه جاری که با فاصله محدود شده است. .TP 10 [\f2count\fP]\f3h\fP حرکت مکان‌نما یک کاراکتر به عقب (چپ). .TP 10 [\f2count\fP]\f3[D\fP حرکت مکان‌نما یک کاراکتر به عقب (چپ). .TP 10 [\f2count\fP]\f3b\fP حرکت مکان‌نما یک کلمه به عقب. .TP 10 [\f2count\fP]\f3B\fP حرکت مکان‌نما به کلمه قبلی جداشده با فاصله. .TP 10 [\f2count\fP]\f3\(bv\fP حرکت مکان‌نما به ستون .IR count . .TP 10 [\f2count\fP]\f3f\fP\f2c\fP یافتن کاراکتر بعدی \fIc\fP در خط جاری. .TP 10 [\f2count\fP]\f3F\fP\f2c\fP یافتن کاراکتر قبلی \fIc\fP در خط جاری. .TP 10 [\f2count\fP]\f3t\fP\f2c\fP معادل .B f به دنبال آن .BR h . .TP 10 [\f2count\fP]\f3T\fP\f2c\fP معادل .B F به دنبال آن .BR l . .TP 10 [\f2count\fP]\f3;\fP تکرار آخرین دستور جستجوی تک‌کاراکتری .BR f ، .BR F ، .BR t یا .BR T به تعداد .I count مرتبه. .TP 10 [\f2count\fP]\f3,\fP تکرار معکوس آخرین دستور جستجوی تک‌کاراکتری به تعداد .I count مرتبه. .TP 10 .B 0 حرکت مکان‌نما به ابتدای خط. .TP 10 .B ^ حرکت مکان‌نما به ابتدای خط. .TP 10 .B [H حرکت مکان‌نما به اولین کاراکتر غیرفاصله در خط. .TP 10 .B $ حرکت مکان‌نما به انتهای خط. .TP 10 .B [Y حرکت مکان‌نما به انتهای خط. .TP 10 .B % حرکت به جفت متناظر .BR ( ، .BR ) ، .BR { ، .BR } ، .B [ یا .BR ] . اگر مکان‌نما روی یکی از کاراکترهای بالا نباشد، ابتدا باقی‌مانده خط برای اولین رخداد یکی از این کاراکترها جستجو می‌شود. .RE .SS "\ \ \ \ \ دستورات ویرایش جستجو (Search Edit Commands)" .RS این دستورات به تاریخچه دستورات شما دسترسی پیدا می‌کنند. .TP 10 [\f2count\fP]\f3k\fP واکشی دستور قبلی. هر بار که .B k وارد شود، به دستور قبلی در زمان گذشته دسترسی حاصل می‌شود. .TP 10 [\f2count\fP]\f3\-\fP معادل .BR k . .TP 10 [\f2count\fP]\f3[A\fP اگر مکان‌نما در انتهای خط باشد، معادل .B / همراه با .I string^\ تنظیم‌شده به محتویات خط جاری است. در غیر این صورت، معادل .B k است. .TP 10 [\f2count\fP]\f3j\fP واکشی دستور بعدی. هر بار که .B j وارد شود، به دستور بعدی در زمان آینده دسترسی حاصل می‌شود. .TP 10 [\f2count\fP]\f3+\fP معادل .BR j . .TP 10 [\f2count\fP]\f3[B\fP معادل .BR j . .TP 10 [\f2count\fP]\f3G\fP دستور شماره .I count واکشی می‌شود. مقدار پیش‌فرض، قدیمی‌ترین دستور در تاریخچه است. .TP 10 .BI / string جستجو رو به عقب در تاریخچه برای دستور قبلیِ حاوی .IR string . .I String با یک کاراکتر «RETURN» یا «NEW\ LINE» پایان می‌یابد. اگر در ابتدای رشته یک کاراکتر .B ^ قرار گیرد، خط منطبق‌شده باید با .I string شروع شود. اگر \fIstring\fP خالی باشد، از رشته قبلی استفاده می‌شود. .TP 10 .BI ? string مشابه .B / با این تفاوت که جستجو در جهت رو به جلو انجام می‌شود. .TP 10 .B n جستجو برای تطابق بعدی آخرین الگوی دستورات .B / یا .BR ? . .TP 10 .B N جستجو برای تطابق بعدی آخرین الگوی دستورات .B / یا .BR ? ، اما در جهت معکوس. .RE .SS "\ \ \ \ \ دستورات ویرایش تغییر متن (Text Modification Edit Commands)" .RS این دستورات خط را اصلاح می‌کنند. .TP 10 .B a ورود به حالت ورودی و درج متن پس از کاراکتر جاری. .TP 10 .B A افزودن متن به انتهای خط. معادل .BR $a . .TP 10 [\f2count\fP]\f3c\fP\f2motion\fP .TP 10 \f3c\fP[\f2count\fP]\f2motion\fP حذف کاراکتر جاری تا کاراکتری که .I motion مکان‌نما را به آن منتقل می‌کند، و ورود به حالت ورودی. اگر \fImotion\fP برابر با .B c باشد، کل خط حذف شده و وارد حالت ورودی می‌شود. .TP 10 .B C حذف کاراکتر جاری تا انتهای خط و ورود به حالت ورودی. معادل .BR c$ . .TP 10 .B S معادل .BR cc . .TP 10 [\f2count\fP]\f3s\fP جایگزینی کاراکترهای زیر مکان‌نما در حالت ورودی. .TP 10 .B D حذف کاراکتر جاری تا انتهای خط. معادل .BR d$ . .TP 10 [\f2count\fP]\f3d\fP\f2motion\fP .TP 10 \f3d\fP[\f2count\fP]\f2motion\fP حذف کاراکتر جاری تا کاراکتری که .I motion به آن منتقل می‌شود. اگر \fImotion\fP برابر با .B d باشد، کل خط حذف می‌شود. .TP 10 .B i ورود به حالت ورودی و درج متن پیش از کاراکتر جاری. .TP 10 .B I درج متن پیش از ابتدای خط. معادل .BR 0i . .TP 10 [\f2count\fP]\f3P\fP قرار دادن آخرین تغییر متنی قبل از مکان‌نما. .TP 10 [\f2count\fP]\f3p\fP قرار دادن آخرین تغییر متنی بعد از مکان‌نما. .TP 10 .B R ورود به حالت ورودی و جایگزینی کاراکترهای روی صفحه با کاراکترهای تایپ‌شده به روش رونویسی (overlay). .TP 10 [\f2count\fP]\f3r\fP\f2c\fP جایگزینی .I count کاراکتر از موقعیت جاری مکان‌نما با .IR c ، و جلو بردن مکان‌نما. .TP 10 [\f2count\fP]\f3x\fP حذف کاراکتر جاری. .TP 10 [\f2count\fP]\f3X\fP حذف کاراکتر قبلی. .TP 10 [\f2count\fP]\f3.\fP تکرار دستور قبلی تغییر متن. .TP 10 [\f2count\fP]\f3\(ap\fP معکوس کردن بزرگی/کوچکی حروف (case) برای .I count کاراکتر از موقعیت جاری مکان‌نما و جلو بردن مکان‌نما. .TP 10 [\f2count\fP]\f3_\fP باعث الصاق کلمه شماره .I count\^ از دستور قبلی و ورود به حالت ورودی می‌شود. در صورت حذف .IR count\^ ، از آخرین کلمه استفاده می‌شود. .TP 10 .B * باعث افزودن یک کاراکتر .B * به کلمه جاری و تلاش برای تولید نام فایل می‌شود. اگر تطابقی یافت نشود، بوق سیستم به صدا درمی‌آید. در غیر این صورت، کلمه با الگوی منطبق جایگزین شده و وارد حالت ورودی می‌شود. .TP 10 .B \e تکمیل نام دستور یا فایل مطابق توضیحات بالا. .RE .SS "\ \ \ \ \ سایر دستورات ویرایش (Other Edit Commands)" .RS دستورات گوناگون. .TP 10 [\f2count\fP]\f3y\fP\f2motion\fP .TP 10 \f3y\fP[\f2count\fP]\f2motion\fP کپی کردن (Yank) کاراکتر جاری تا کاراکتری که .I motion مکان‌نما را به آن منتقل می‌کند و قرار دادن آن‌ها در بافر حذف. متن و مکان‌نما بدون تغییر باقی می‌مانند. .TP 10 .B yy کپی کردن کل خط. .TP 10 .B Y کپی کردن از موقعیت جاری تا انتهای خط. معادل .BR y$ . .TP 10 .B u واگردانی (Undo) آخرین دستور تغییر متن. .TP 10 .B U واگردانی تمام دستورات تغییر متن اعمال‌شده روی خط. .TP 10 [\f2count\fP]\f3v\fP دستور .BI "hist \-e ${\s-1VISUAL\s+1:\-${\s-1EDITOR\s+1:\-vi}}" " count" را در بافر ورودی برمی‌گرداند. اگر .I count\^ ذکر نشود، از خط جاری استفاده می‌شود. .TP 10 .BI ^L تعویض خط (Line feed) و چاپ خط جاری. تنها در حالت کنترل مؤثر است. .TP 10 .BI ^J (خط جدید \- New\ line) اجرای خط جاری، صرف‌نظر از حالت فعال. .TP 10 .BI ^M (بازگشت \- Return) اجرای خط جاری، صرف‌نظر از حالت فعال. .TP 10 .B # اگر اولین کاراکتر دستور یک .B # باشد، این دستور آن .B # و هر .B # دیگری که پس از یک خط جدید می‌آید را حذف می‌کند. در غیر این صورت، با قرار دادن یک .B # در ابتدای هر خط از دستور، خط را ارسال می‌کند. برای قرار دادن خط جاری به صورت کامنت در تاریخچه و خارج کردن دستورات قبلاً کامنت‌شده در فایل تاریخچه از حالت کامنت کاربرد دارد. .TP 10 [\f2count\fP]\f3=\fP اگر \f2count\fP مشخص نشده باشد، فهرستی از نام‌های دستورات یا فایل‌های منطبق را مطابق توضیحات بالا تولید می‌کند. در غیر این صورت، کلمه زیر مکان‌نما با مورد شماره \f2count\fP از تازه‌ترین فهرست دستورات یا فایل‌های تولیدشده جایگزین می‌شود. اگر مکان‌نما روی کلمه‌ای نباشد، به جای جایگزینی، درج می‌گردد. .TP 10 .BI @ letter فهرست نام‌های مستعار (alias) شما برای یافتن نام مستعاری به نام .BI _ letter جستجو می‌شود و اگر نام مستعاری با این نام تعریف شده باشد، مقدار آن برای پردازش در صف ورودی درج خواهد شد. .TP 10 .BI ^V نمایش نگارش پوسته. .RE .PD .SS "تکمیل خودکار قابل برنامه‌ریزی (Programmable Completion)" به‌طور پیش‌فرض، فشردن کلید .B tab باعث تطبیق کلمه جاری با فایل‌هایی می‌شود که با کاراکترهای تایپ‌شده شروع می‌شوند و تا جای ممکن کاراکترهایی که یک تطابق منحصربه‌فرد را فراهم کنند اضافه می‌کند. اگر پیشوند منطبق منحصربه‌فرد نباشد، فشردن مجدد .B tab یک فهرست شماره‌گذاری‌شده از گزینه‌ها را نمایش می‌دهد و وارد کردن .I number\^ .B tab کلمه جاری را با آن انتخاب جایگزین می‌کند. .P تکمیل خودکار قابل برنامه‌ریزی به شما امکان می‌دهد نحوه گسترش کلمات را هنگام فشردن کلید .B tab برای یک یا چند دستور مشخص کنترل کنید. دستور توکار .B complete به شما امکان می‌دهد نحوه تکمیل کلمه جاری برای دستور مشخص‌شده را تعیین کنید. .SS "دستورات توکار (Built-in Commands)" دستورات ساده زیر درون فرآیند پوسته اجرا می‌شوند. تغییر مسیر ورودی/خروجی مجاز است. مگر در مواردی که خلاف آن ذکر شده باشد، خروجی در توصیف‌گر پرونده ۱ نوشته می‌شود و وضعیت خروج، در صورتی که خطای ترتیبی وجود نداشته باشد، صفر است. به جز .BR : ، .BR true ، .BR false ، .BR echo ، .BR newgrp و .BR login ، تمام دستورات توکار .B \-\- را برای مشخص کردن پایان گزینه‌ها می‌پذیرند. آن‌ها همچنین گزینه .B \-\-man را به عنوان درخواستی برای نمایش صفحه راهنما در خروجی خطای استاندارد و .B \-? را به عنوان درخواست راهنمایی تفسیر می‌کنند که یک پیام .I usage\^ (نحوه استفاده) در خروجی خطای استاندارد چاپ می‌کند. دستوراتی که قبل از آن‌ها یک یا دو نماد \(dg قرار دارد دستورات توکار ویژه هستند و در موارد زیر به صورت ویژه با آن‌ها رفتار می‌شود: .PD 0 .TP 1. فهرست انتساب متغیرها پیش از دستور، پس از اتمام دستور نیز معتبر باقی می‌ماند. .TP 2. تغییر مسیرهای ورودی/خروجی پس از انتساب متغیرها پردازش می‌شوند. .TP 3. خطاها باعث لغو و خروج اسکریپت حاوی آن‌ها می‌شوند. .TP 4. آن‌ها نام‌های مجاز برای توابع نیستند. .TP 5. کلماتی که پس از یک دستور با پیشوند \(dg\(dg می‌آیند و در قالب یک انتساب متغیر هستند، با همان قوانین انتساب متغیر بسط داده می‌شوند. این بدان معناست که جایگزینی تیلدا بعد از علامت .B = انجام می‌شود و تفکیک فیلد و تولید نام پرونده انجام نمی‌شود. به این‌ها توکارهای .I declaration\^ (اعلانی) گفته می‌شود. .PD .TP \(dg \f3:\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK این دستور فقط پارامترها را بسط می‌دهد. .br .ne 2 .TP \(dg \f3\|. \f2name\^\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK اگر .I name\^ تابعی باشد که با نحو کلمه کلیدی رزروشده .B function .I name\^ تعریف شده باشد، تابع در محیط جاری اجرا می‌شود (مانند اینکه با نحو .IB name () تعریف شده باشد.) در غیر این صورت، اگر .I name\^ به یک پرونده اشاره کند، پرونده به طور کامل خوانده شده و دستورات در محیط جاری پوسته اجرا می‌شوند. مسیر جستجوی مشخص‌شده توسط .B .SM PATH برای یافتن دایرکتوری حاوی پرونده استفاده می‌شود. اگر هرگونه آرگومان .I arg\^ داده شود، آن‌ها هنگام پردازش دستور .B . به پارامترهای مکانی تبدیل می‌شوند و پارامترهای مکانی اصلی پس از اتمام بازیابی می‌شوند. در غیر این صورت، پارامترهای مکانی دست‌نخورده باقی می‌مانند. وضعیت خروج برابر با وضعیت خروج آخرین دستور اجرا شده است. .TP \(dg\(dg \f3alias\fP \*(OK \f3\-ptx\fP \*(CK \*(OK \f2name\fP\*(OK \f3=\fP\f2value\^\fP \*(CK \*(CK .\|.\|. دستور .B alias\^ بدون هیچ آرگومانی، فهرست نام‌های مستعار را به شکل .I name=value\^ در خروجی استاندارد چاپ می‌کند. گزینه .B \-p باعث می‌شود کلمه .B alias قبل از هر کدام درج شود. هنگامی که یک یا چند آرگومان داده شود، یک .I alias\^ (نام مستعار) برای هر .I name\^ که .I value\^ آن مشخص شده باشد، تعریف می‌شود. یک فاصله در انتهای .I value\^ باعث می‌شود کلمه بعدی نیز برای جایگزینی نام مستعار بررسی شود. گزینه منسوخ‌شده .B \-t برای تنظیم و فهرست کردن نام‌های مستعار ردیابی‌شده (tracked aliases) استفاده می‌شود. مقدار یک نام مستعار ردیابی‌شده، مسیر کامل مربوط به .I name\^ داده‌شده است. این مقدار در صورت بازنشانی مقدار .SM .B PATH نامعتبر و تعریف‌نشده می‌شود، اما نام مستعار همچنان ردیابی‌شده باقی می‌ماند. بدون گزینه .BR \-t ، برای هر .I name\^ در فهرست آرگومان‌ها که مقداری برای .I value\^ آن داده نشده باشد، نام و مقدار نام مستعار چاپ می‌شود. گزینه منسوخ‌شده .B \-x هیچ تاثیری ندارد. اگر یک .I name\^ داده شود اما مقداری تعیین نشود و هیچ نام مستعاری برای آن .I name\^ تعریف نشده باشد، وضعیت خروج غیرصفر خواهد بود. .TP \f3bg\fP \*(OK \f2job\^\fP.\|.\|. \*(CK این دستور تنها در سیستم‌هایی که از کنترل کارها (job control) پشتیبانی می‌کنند در دسترس است. هر .I job\^ (کار) مشخص‌شده را به پس‌زمینه می‌برد. اگر .I job\^ مشخص نشده باشد، کار جاری به پس‌زمینه برده می‌شود. برای توضیحات مربوط به ساختار .IR job ، بخش .I Jobs (کارها) را ببینید. .TP \(dg \f3break\fP \*(OK \f2n\^\fP \*(CK خروج از حلقه دربرگیرنده .BR for\^ ، .BR while\^ ، .BR until\^ یا .BR select\^ ، در صورت وجود. اگر .I n\^ مشخص شده باشد، به اندازه .I n\^ سطح از حلقه‌ها خارج می‌شود. .TP \f3builtin\fP \*(OK \f3\-dsp\fP \*(CK \*(OK \f3\-f\fP \f2file\^\fP \*(CK \*(OK \f2name\^\fP .\|.\|. \*(CK اگر .I name\^ مشخص نشده باشد، و هیچ گزینه .B \-f تعیین نشده باشد، دستورات توکار در خروجی استاندارد چاپ می‌شوند. گزینه .B \-s تنها دستورات توکار ویژه را چاپ می‌کند. در غیر این صورت، هر .I name\^ بیانگر نام مسیری است که نام پایه (basename) آن، نام دستور توکار است. نام تابع نقطه ورود (entry point) با پیشوند .B b_ به نام دستور توکار تعیین می‌شود. یک دستور توکار که با نام مسیر مشخص شده باشد تنها زمانی اجرا می‌شود که آن نام مسیر در حین جستجوی مسیر (path search) پیدا شود. دستورات توکار یافت‌شده در کتابخانه‌های بارگذاری‌شده از طریق پرونده .B .paths با نام مسیر دایرکتوری حاوی پرونده .B .paths مرتبط خواهند شد. .sp .5 نمونه اولیه (prototype) استاندارد ISO C/C++ برای دستور توکار .I mycommand\^ به صورت \f3b_\fP\f2mycommand\fP\f3(int\fP \f2argc\fP, \f3char *\fP\f2argv\fP\f3[]\fP, \f3void *\fP\f2context\fP\f3)\fP است که در آن .I argv\^ آرایه‌ای از .I argc\^ عنصر است و context یک اشاره‌گر اختیاری به ساختار .B Shell_t مطابق شرح ارائه‌شده در .B می‌باشد. .sp .5 دستورات توکار ویژه را نمی‌توان به یک نام مسیر پیوند زد یا حذف کرد. گزینه .B \-d هر یک از دستورات توکار داده‌شده را حذف می‌کند. در سیستم‌هایی که از بارگذاری پویا پشتیبانی می‌کنند، گزینه .B \-f نام یک کتابخانه اشتراکی حاوی کد دستورات توکار را مشخص می‌کند. پیشوند و/یا پسوند کتابخانه اشتراکی که به سیستم بستگی دارد، می‌تواند حذف شود. به محض بارگذاری یک کتابخانه، نمادهای آن برای فراخوانی‌های بعدی .B builtin در دسترس قرار می‌گیرند. می‌توان چندین کتابخانه را با فراخوانی‌های جداگانه دستور .B builtin مشخص کرد. کتابخانه‌ها به ترتیب معکوس تعیین آن‌ها جستجو می‌شوند. هنگامی که یک کتابخانه بارگذاری می‌شود، به دنبال تابعی با نام .B lib_init() در کتابخانه می‌گردد و این تابع را با آرگومان .B 0 فراخوانی می‌کند. .sp .5 گزینه .B \-p باعث می‌شود خروجی به صورت قالبی از دستورات .B builtin تولید شود که بتوان از آن به عنوان ورودی پوسته برای بازسازی مجموعه توکارهای جاری استفاده کرد. .TP .PD 0 \f3cd\fP \*(OK \f3\-LP\fP \*(CK \*(OK \f2arg\^\fP \*(CK .TP \f3cd\fP \*(OK \f3\-LP\fP \*(CK \f2old\^\fP \f2new\^\fP .PD این دستور می‌تواند به یکی از دو شکل باشد. در شکل اول، دایرکتوری جاری را به .I arg تغییر می‌دهد. اگر .I arg\^ برابر با .B \- باشد، دایرکتوری به دایرکتوری قبلی تغییر می‌یابد. متغیر پوسته .B .SM HOME مقدار پیش‌فرض .I arg است. متغیر .SM .B PWD روی دایرکتوری جاری تنظیم می‌شود. متغیر پوسته .B .SM CDPATH مسیر جستجو برای دایرکتوری حاوی .I arg را تعریف می‌کند. نام دایرکتوری‌های جایگزین با دو نقطه .RB ( : ) از هم جدا می‌شوند. مسیر پیش‌فرض .B (مشخص‌کننده دایرکتوری جاری) است. توجه داشته باشید که دایرکتوری جاری با یک نام مسیر پوچ (null) مشخص می‌شود، که می‌تواند بلافاصله بعد از علامت مساوی یا بین جداکننده‌های دو نقطه در هر جای دیگری از فهرست مسیرها ظاهر شود. اگر .I arg با یک \f3/\fP آغاز شود، مسیر جستجو استفاده نمی‌شود. در غیر این صورت، هر دایرکتوری در مسیر برای یافتن .I arg جستجو می‌شود. .sp .5 شکل دوم .B cd رشته .I new را جایگزین رشته .I old در نام دایرکتوری جاری، یعنی .SM .BR PWD ، کرده و تلاش می‌کند به این دایرکتوری جدید تغییر مکان دهد. .sp .5 به طور پیش‌فرض، نام‌های پیوند نمادین هنگام یافتن نام دایرکتوری به صورت تحت‌اللفظی رفتار می‌شوند. این معادل گزینه .B \-L است. گزینه .B \-P باعث می‌شود هنگام تعیین دایرکتوری، پیوندهای نمادین برطرف و حل شوند. آخرین نمونه از .B \-L یا .B \-P در خط فرمان تعیین می‌کند که از کدام روش استفاده شود. .sp .5 دستور .B cd\^ ممکن است توسط .if \nZ=0 .B rsh\^. .if \nZ=1 .B rksh\^. .if \nZ=2 .B rksh93\^. اجرا نشود. .TP \f3command\fP \*(OK \f3\-pvxV\fP \*(CK \f2name\^\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK بدون گزینه‌های .B \-v یا .BR \-V ، دستور .B command دستور .I name\^ را با آرگومان‌های ارائه‌شده توسط .I arg اجرا می‌کند. گزینه .B \-p باعث می‌شود به جای مسیر تعریف‌شده توسط مقدار .SM .BR PATH ، یک مسیر پیش‌فرض جستجو شود. هنگام یافتن .IR name ، توابع جستجو نخواهند شد. علاوه بر این، اگر .I name\^ به یک دستور توکار ویژه اشاره کند، هیچ‌یک از ویژگی‌های خاص مرتبط با خنجرهای ابتدایی اعمال نخواهند شد. (برای مثال، نام مستعار از پیش تعریف‌شده .B "redirect=\(fmcommand exec\(fm" از پایان یافتن اسکریپت در هنگام تغییر مسیر نامعتبر جلوگیری می‌کند.) با گزینه .BR \-x ، اگر اجرای دستور به دلیل زیاد بودن بیش از حد آرگومان‌ها با شکست مواجه شود (کد خطای .SM .BR E2BIG )، پوسته دستور .I name\^ را چندین بار و با زیرمجموعه‌ای از آرگومان‌ها در هر بار فراخوانی اجرا خواهد کرد. آرگومان‌هایی که قبل از اولین کلمه‌ای که به چندین آرگومان بسط می‌یابد و بعد از آخرین کلمه‌ای که به چندین آرگومان بسط می‌یابد قرار دارند، در هر بار فراخوانی ارسال خواهند شد. وضعیت خروج برابر با بیشینه وضعیت خروج فراخوانی‌ها خواهد بود. با گزینه .BR \-v ، دستور .B command معادل دستور توکار .B whence است که در زیر شرح داده شده است. گزینه .B \-V باعث می‌شود .B command مانند .B "whence \-v" عمل کند. .TP \(dg \f3continue\fP \*(OK \f2n\^\fP \*(CK ادامه تکرار بعدی حلقه دربرگیرنده .BR for\^ ، .BR while\^ ، .BR until\^ یا .BR select\^ . اگر .I n\^ مشخص شده باشد، اجرای حلقه از .IR n \-امین حلقه دربرگیرنده ادامه می‌یابد. .TP \f3disown\fP \*(OK \f2job\^\fP.\|.\|. \*(CK باعث می‌شود هنگامی که یک پوسته ورود (login shell) خاتمه می‌یابد، پوسته سیگنال HUP را به هر .I job\^ (کار) داده‌شده ارسال نکند، یا در صورتی که .I job حذف شده باشد، به تمام کارهای فعال ارسال نکند. .TP \f3echo\fP \*(OK \f3\-n\fP \f3\-e\fP \*(CK \*(OK \f2 arg\^\fP .\|.\|. \*(CK دستور توکار echo تمامی آرگومان‌های خود را که با فاصله از هم جدا شده‌اند چاپ کرده و با یک خط جدید به پایان می‌رساند. گزینه .B \-n از قرار دادن نویسه خط جدید در انتهای خروجی صرف‌نظر می‌کند. اگر .B \-e تنظیم شده باشد، تفسیر توالی‌های گریز (escape sequences) را فعال می‌کند. .TP \(dg\(dg \f3enum\fP \*(OK \f3\-i\fP \*(CK \f2type\^\fP\*(OK=(\f2value\^\fP .\|.\|. \*(CK یک دستور اعلانی به نام \f2type\^\fP ایجاد می‌کند که یک نوع عددی صحیح است و به یکی از \f2value\fPهای مشخص‌شده به عنوان نام‌های شمارشی اجازه می‌دهد. اگر \f3=(\fP\f2value\^\ .\|.\|.\|\fP\f3)\fP حذف شود، آنگاه \f2type\^\fP باید یک متغیر آرایه اندیس‌دار با حداقل دو عنصر باشد و مقادیر از این متغیر آرایه‌ای گرفته می‌شوند. اگر .B \-i مشخص شده باشد، مقادیر حساس به کوچک و بزرگی حروف نیستند. .sp .5 هنگامی که یک متغیر شمارشی در یک عبارت محاسباتی استفاده می‌شود، مقدار آن برابر با اندیس در آرایه تعریف‌کننده آن با شروع از اندیس ۰ است. رشته‌های شمارشی را می‌توان در یک عبارت محاسباتی هنگام مقایسه با یک متغیر شمارشی استفاده کرد. همچنین، هر متغیر شمارشی بدون اندیس که پس از آن .B .name بیاید (که name یکی از نام‌های شمارشی است)، به اندیس متناظر با .B name بسط می‌یابد. .sp .5 نوع شمارشی .B _Bool با مقادیر .B true و .B false ایجاد می‌شود. نام مستعار از پیش تعریف‌شده .B bool به عنوان .B _Bool تعریف شده است. .TP \(dg \f3eval\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK آرگومان‌ها به عنوان ورودی پوسته خوانده می‌شوند و دستور(ات) حاصل اجرا می‌گردند. .TP \(dg \f3exec\fP \*(OK \f3\-c\fP \*(CK \*(OK \f3\-a\fP \f2name\^\fP \*(CK \*(OK \f2arg\^\fP .\|.\|. \*(CK اگر .I arg\^ داده شود، دستور مشخص‌شده توسط آرگومان‌ها به جای این پوسته بدون ایجاد یک فرآیند جدید اجرا می‌شود. گزینه .B \-c باعث می‌شود محیط قبل از اعمال انتساب‌های متغیر مرتبط با فراخوانی .B exec پاکسازی شود. گزینه .B \-a باعث می‌شود .I name\^ به جای اولین .IR arg ، به عنوان .B argv[0] برای فرآیند جدید در نظر گرفته شود. آرگومان‌های ورودی/خروجی ممکن است ظاهر شده و بر فرآیند جاری تاثیر بگذارند. اگر .I arg\^ داده نشود، اثر این دستور این است که توصیف‌گرهای پرونده را طبق فهرست تغییر مسیر ورودی/خروجی اصلاح کند. در این حالت، هر شماره توصیف‌گر پرونده بزرگتر از ۲ که با این سازوکار باز شده باشد، هنگام فراخوانی برنامه دیگر بسته می‌شود. .TP \(dg \f3exit\fP \*(OK \f2n\^\fP \*(CK باعث خروج پوسته با وضعیت خروج مشخص‌شده توسط .I n می‌شود. مقدار خروج برابر با کم‌ارزش‌ترین ۸ بیت از وضعیت مشخص‌شده خواهد بود. اگر .I n\^ حذف شود، وضعیت خروج برابر با وضعیت آخرین دستور اجرا شده خواهد بود. رسیدن به پایان پرونده (EOF) نیز باعث خروج پوسته می‌شود، مگر برای پوسته‌ای که گزینه .B ignoreeof در آن فعال باشد (دستور .B set در زیر را ببینید). .TP \(dg\(dg \f3export\fP \*(OK \f3\-p\fP \*(CK \*(OK \f2name\^\fP\*(OK\f3=\fP\f2value\^\fP\*(CK \*(CK .\|.\|. اگر .I name\^ داده نشود، نام‌ها و مقادیر هر متغیر دارای خصیصه برون‌سپاری (export) چاپ می‌شوند، در حالی که مقادیر به گونه‌ای نقل‌قول شده‌اند که امکان ورود مجدد آن‌ها فراهم باشد. دستور .B export همانند .B typeset \-x است به جز اینکه اگر از .B export درون یک تابع استفاده کنید، هیچ متغیر محلی ایجاد نمی‌شود. گزینه .B \-p باعث می‌شود کلمه .B export قبل از هر کدام درج شود. در غیر این صورت، .IR name های داده‌شده برای برون‌سپاری خودکار به .I environment\^ (محیط) دستوراتی که پس از آن اجرا می‌شوند علامت‌گذاری می‌گردند. .TP \f3false\fP کاری انجام نمی‌دهد و با وضعیت ۱ خارج می‌شود. همراه با .B until برای حلقه‌های بی‌پایان استفاده می‌شود. .TP \f3fg\fP \*(OK \f2job\^\fP.\|.\|. \*(CK این دستور تنها در سیستم‌هایی که از کنترل کارها پشتیبانی می‌کنند در دسترس است. هر .I job\^ (کار) مشخص‌شده به پیش‌زمینه آورده شده و به ترتیب مشخص‌شده منتظر آن می‌ماند. در غیر این صورت، کار جاری به پیش‌زمینه آورده می‌شود. برای توضیحات مربوط به ساختار .IR job ، بخش .I Jobs را ببینید. .TP \f3getopts\fP \*(OK \f3\ \-a\fP \f2name\^\fP \*(CK \f2optstring vname\^\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK آرگومان .I arg را برای گزینه‌های مجاز بررسی می‌کند. اگر .I arg حذف شود، از پارامترهای مکانی استفاده می‌شود. یک آرگومان گزینه با .B + یا .B \- شروع می‌شود. گزینه‌ای که با .B + یا .B \- شروع نشود یا آرگومان .B \-\|\- به گزینه‌ها پایان می‌دهد. گزینه‌هایی که با .B + شروع می‌شوند تنها زمانی شناسایی می‌شوند که .I optstring\^ با یک .B + شروع شود. رشته .I optstring\^ شامل حروفی است که .B getopts آن‌ها را می‌شناسد. اگر پس از یک حرف علامت .B : بیاید، انتظار می‌رود آن گزینه دارای آرگومان باشد. گزینه‌ها را می‌توان با فاصله از آرگومان جدا کرد. گزینه .B \-? باعث می‌شود .B getopts یک پیام نحوه استفاده (usage) در خروجی خطای استاندارد تولید کند. آرگومان .B \-a می‌تواند برای تعیین نام مورد استفاده در پیام نحوه استفاده به کار رود، که به طور پیش‌فرض .B $0 است. .sp .5 دستور .B getopts هر بار که فراخوانی می‌شود، حرف گزینه بعدی را که می‌یابد درون متغیر .I vname\^ قرار می‌دهد. هنگامی که .I arg با .B + آغاز شود، یک علامت .B + به ابتدای حرف گزینه اضافه خواهد شد. اندیس .I arg بعدی در .SM .B OPTIND ذخیره می‌شود. آرگومان گزینه، در صورت وجود، در .SM .B OPTARG ذخیره می‌گردد. .sp .5 علامت .B : در ابتدای .I optstring باعث می‌شود .B getopts حرف یک گزینه نامعتبر را در .SM .B OPTARG ذخیره کند، و در صورت ناشناخته بودن گزینه، مقدار .I vname را به .B ? و در صورت جا افتادن آرگومان الزامی گزینه، آن را به .B : تنظیم کند. در غیر این صورت، .B getopts یک پیام خطا چاپ می‌کند. هنگامی که گزینه دیگری وجود نداشته باشد، وضعیت خروج غیرصفر است. .sp .5 هیچ راهی برای تعیین هیچ‌یک از گزینه‌های .BR : ، .BR + ، .BR \- ، .BR ? ، .BR [ و .B ] وجود ندارد. گزینه .B # تنها می‌تواند به عنوان گزینه اول مشخص شود. .TP .PD 0 \f3hist\fP \*(OK \f3\-e\fP \f2ename\^\fP \ \*(CK \*(OK \f3\-nlr\^\fP \*(CK \*(OK \f2first\^\fP \*(OK \f2last\^\fP \*(CK \*(CK .TP \f3hist \-s \fP \*(OK \f2old\fP\f3\=\fP\f2new\^\fP \*(CK \*(OK \f2command\^\fP \*(CK .PD در شکل اول، محدوده‌ای از دستورات از .I first\^ تا .I last\^ از میان آخرین .SM .B HISTSIZE دستوری که در ترمینال تایپ شده‌اند انتخاب می‌شود. آرگومان‌های .I first\^ و .I last\^ می‌توانند به صورت یک عدد یا به عنوان یک رشته مشخص شوند. یک رشته برای یافتن جدیدترین دستوری که با رشته داده‌شده شروع می‌شود استفاده می‌گردد. یک عدد منفی به عنوان آفست نسبت به شماره دستور جاری استفاده می‌شود. اگر گزینه .B \-l انتخاب شود، دستورات در خروجی استاندارد فهرست می‌شوند. در غیر این صورت، برنامه ویرایشگر .I ename\^ روی پرونده‌ای حاوی این دستورات صفحه‌کلید فراخوانی می‌شود. اگر .I ename\^ ارائه نشود، مقدار متغیر .SM .B HISTEDIT استفاده می‌شود. اگر .SM .B HISTEDIT تنظیم نشده باشد، آنگاه .SM .B FCEDIT (پیش‌فرض .BR /bin/ed\^ ) به عنوان ویرایشگر استفاده می‌شود. هنگامی که ویرایش کامل شد، دستور(ات) ویرایش‌شده در صورت ذخیره شدن تغییرات اجرا می‌شوند. اگر .I last\^ مشخص نشده باشد، روی .I first تنظیم خواهد شد. اگر .I first\^ مشخص نشده باشد، مقدار پیش‌فرض برای ویرایش برابر با دستور قبلی و برای فهرست کردن برابر با \-16 است. گزینه .B \-r ترتیب دستورات را معکوس می‌کند و گزینه .B \-n شماره دستورات را هنگام فهرست کردن حذف می‌کند. در شکل دوم، .I command\^ همان‌طور که در بالا برای .I first\^ شرح داده شد تفسیر می‌شود و پیش‌فرض آن آخرین دستور اجرا شده است. دستور حاصل پس از انجام جایگزینی اختیاری \f2old\^\fP\f3=\fP\f2new\^\fP اجرا می‌شود. .TP \f3jobs\fP \*(OK \f3\-lnp\^\fP \*(CK \*(OK \f2job\^\fP \.\|.\|. \*(CK اطلاعات مربوط به هر کار داده‌شده را فهرست می‌کند؛ یا اگر .I job حذف شود، تمام کارهای فعال را فهرست می‌کند. گزینه .B \-l علاوه بر اطلاعات عادی، شناسه‌های فرآیند (PID) را نیز فهرست می‌کند. گزینه .B \-n تنها کارهایی را نمایش می‌دهد که از زمان آخرین اعلان متوقف شده یا خارج شده‌اند. گزینه .B \-p باعث می‌شود تنها گروه فرآیند (process group) فهرست شود. برای شرح ساختار .IR job ، بخش .I Jobs را ببینید. .TP .PD 0 \f3kill\fP \*(OK \f3\-s\fP \f2signame\^\fP \*(CK \*(OK \f3\-q\fP \f2n\^\fP \ \*(CK \f2job\^\fP .\|.\|. .TP .PD 0 \f3kill\fP \*(OK \f3\-n\fP \f2signum\^\fP \*(CK \*(OK \f3\-q\fP \f2n\^\fP \ \*(CK \f2job\^\fP .\|.\|. .TP \f3kill\fP \f3\-Ll\fP \*(OK \f2sig\^\fP .\|.\|. \*(CK .PD سیگنال TERM (خاتمه) یا سیگنال مشخص‌شده را به کارها یا فرآیندهای تعیین‌شده ارسال می‌کند. سیگنال‌ها یا با عدد توسط گزینه .B \-n یا با نام توسط گزینه .B \-s مشخص می‌شوند (همان‌طور که در .B داده شده است، بدون پیشوند «SIG» به استثنای اینکه SIGCLD با نام CHLD شناخته می‌شود). برای سازگاری با گذشته، .B n و .B s می‌توانند حذف شوند و عدد یا نام بلافاصله بعد از .B \- قرار گیرد. اگر سیگنال ارسالی TERM (خاتمه) یا HUP (قطع ارتباط) باشد، در صورت متوقف بودن کار یا فرآیند، یک سیگنال CONT (ادامه) نیز به آن ارسال خواهد شد. آرگومان .I job\^ می‌تواند شناسه فرآیند (PID) مربوط به فرآیندی باشد که عضوی از یکی از کارهای فعال نیست. برای توضیحات مربوط به ساختار .IR job ، بخش .I Jobs را ببینید. در شکل سوم، .BR "kill \-l" یا .BR "kill \-L" ، اگر .I sig\^ مشخص نشده باشد، نام سیگنال‌ها فهرست می‌شوند. گزینه .B \-l تنها نام سیگنال‌ها را فهرست می‌کند. گزینه .B \-L هر نام سیگنال و شماره متناظر با آن را فهرست می‌کند. در غیر این صورت، برای هر .I sig\^ که یک نام است، شماره سیگنال متناظر فهرست می‌شود. برای هر .I sig\^ که یک عدد است، نام سیگنال متناظر با کم‌ارزش‌ترین ۸ بیت .I sig\^ فهرست می‌شود. .sp .5 در سیستم‌هایی که از .IR sigqueue (2) پشتیبانی می‌کنند، گزینه .B \-q می‌تواند برای ارسال یک سیگنال صف‌بندی‌شده با شماره پیام .I n\^ استفاده شود. هر .I job مشخص‌شده باید یک عدد مثبت باشد. در سیستم‌هایی که از .IR sigqueue (2) پشتیبانی نمی‌کنند، سیگنال بدون شماره پیام .I n\^ ارسال می‌شود و سیگنال در صف قرار نخواهد گرفت. اگر سیگنال به دلیل بازگشت خطای EAGAIN نتواند در صف قرار گیرد، وضعیت خروج ۲ خواهد بود. .TP \f3let\fP \f2arg\^\fP .\|.\|. هر .I arg یک .I "عبارت محاسباتی" جداگانه است که باید ارزیابی شود. دستور .B let تنها زمانی ثوابت هشت‌هشتی (اکتال) شروع‌شده با .B 0 را شناسایی می‌کند که گزینه .B set با نام .B letoctal روشن و فعال باشد. برای شرح ارزیابی عبارات محاسباتی، بخش .I "ارزیابی محاسباتی (Arithmetic Evaluation)" در بالا را ببینید. .sp .5 وضعیت خروج در صورتی که مقدار آخرین عبارت غیرصفر باشد ۰ است و در غیر این صورت ۱ خواهد بود. .TP \(dg \f3newgrp\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK معادل .BI "exec /bin/newgrp" " arg\^" \&.\|.\|.\^ است. .TP \f3print\fP \*(OK \f3\-CRenprsv\^\fP \*(CK \*(OK \f3\-u\fP \f2unit\^\fP\*(CK \*(OK \f3\-f\fP \f2format\^\fP \*(CK \*(OK \f2arg\^\fP .\|.\|. \*(CK بدون هیچ گزینه‌ای یا با گزینه .B \- یا .BR \-\|\- ، هر .I arg در خروجی استاندارد چاپ می‌شود. گزینه .B \-f باعث می‌شود آرگومان‌ها طبق توصیف ارائه‌شده در .BR printf چاپ شوند. در این حالت، هر یک از گزینه‌های .BR e ، .BR n ، .BR r ، .B R نادیده گرفته می‌شوند. در غیر این صورت، مگر اینکه .BR \-C ، .BR \-R ، .BR \-r ، یا .B \-v مشخص شده باشند، قواعد گریز (escape) زیر اعمال خواهند شد: .RS .PD 0 .TP .B \ea نویسه هشدار/زنگ (اسکی .BR 07 ). .TP .B \eb نویسه پس‌بر (اسکی .BR 010 ). .TP .B \ec باعث می‌شود .B print بدون پردازش آرگومان‌های بیشتر و بدون افزودن خط جدید به پایان برسد. .TP .B \ef نویسه تغذیه فرم/صفحه بعد (اسکی .BR 014 ). .TP .B \en نویسه خط جدید (اسکی .BR 012 ). .TP .B \er نویسه بازگشت به ابتدای خط (اسکی .BR 015 ). .TP .B \et نویسه تب افقی (اسکی .BR 011 ). .TP .B \ev نویسه تب عمودی (اسکی .BR 013 ). .TP .B \eE نویسه گریز/Escape (اسکی .BR 033 ). .TP .B \e\e نویسه بک‌اسلش \e. .TP .BI \e0 x نویسه تعریف‌شده توسط رشته اکتال ۱، ۲ یا ۳ رقمی ارائه‌شده با \fIx\fP. .PD .PP گزینه .B \-R تمام آرگومان‌ها و گزینه‌های بعدی به جز .B \-n را چاپ می‌کند. گزینه .B \-e باعث اعمال قواعد گریز بالا می‌شود. این رفتار پیش‌فرض است. این گزینه اثر گزینه قبلی .B \-r را خنثی می‌کند. گزینه .B \-p باعث می‌شود آرگومان‌ها به جای خروجی استاندارد، در لوله (pipe) فرآیند ایجاد شده با .B \(bv& نوشته شوند. گزینه .B \-v با هر .I arg\^ به عنوان نام متغیر رفتار کرده و مقدار را در قالب .B %B دستور .B printf می‌نویسد. گزینه .B \-C با هر .I arg\^ به عنوان نام متغیر رفتار کرده و مقدار را در قالب .B %#B دستور .B printf می‌نویسد. گزینه .B \-s باعث می‌شود آرگومان‌ها به جای خروجی استاندارد در فایل تاریخچه نوشته شوند. گزینه .B \-u می‌تواند برای تعیین شماره واحد توصیف‌گر فایل یک‌رقمی .I unit\^ که خروجی باید روی آن قرار گیرد استفاده شود. مقدار پیش‌فرض ۱ است. اگر گزینه .B \-n استفاده شود، هیچ .B خط جدیدی\^ به خروجی اضافه نمی‌شود. .RE .TP \f3printf\fP \*(OK \f3\-v\fP \f2varname\^\fP \*(CK \f2format\^\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK آرگومان‌های .I arg\^ بر اساس قواعد قالب‌بندی ANSI-C مربوط به رشته قالب .IR format در خروجی استاندارد چاپ می‌شوند. اگر تعداد آرگومان‌ها از تعداد مشخصات قالب بیشتر باشد، رشته .B format\^ برای قالب‌بندی باقی آرگومان‌ها دوباره استفاده می‌شود. اگر گزینه \f3\-v\fP مشخص شده باشد، خروجی به متغیر \f2varname\fP اختصاص می‌یابد. افزونه‌های زیر نیز قابل استفاده هستند: .RS .PD 0 .TP .B %b قالب .B %b می‌تواند به جای .B %s استفاده شود تا توالی‌های گریز در .I arg\^ متناظر همان‌طور که در .B print توضیح داده شد بسط یابند. .TP .B %B گزینه .B %B باعث می‌شود با هر یک از آرگومان‌ها به عنوان نام متغیر رفتار شده و مقدار باینری متغیر چاپ شود. فلگ جایگزین .B # باعث می‌شود متغیر ترکیبی در یک خط خروجی داده شود. این ویژگی بیشترین کاربرد را برای متغیرهای ترکیبی و متغیرهایی با صفت .B \-b دارد. .TP .B %H قالب .B %H می‌تواند به جای .B %s استفاده شود تا نویسه‌های خاص HTML و XML در .I arg\^ به صورت نام موجودیت (entity) آن‌ها خروجی داده شوند. فلگ جایگزین .B # خروجی را برای استفاده به عنوان URI قالب‌بندی می‌کند. .TP .B %P قالب .B %P می‌تواند به جای .B %s استفاده شود تا .I arg\^ به عنوان یک عبارت باقاعده گسترده تفسیر شده و به صورت یک الگوی پوسته چاپ شود. .TP .B %R قالب .B %R می‌تواند به جای .B %s استفاده شود تا .I arg\^ به عنوان الگوی پوسته تفسیر شده و به عنوان یک عبارت باقاعده گسترده چاپ شود. .TP .B %q قالب .B %q می‌تواند به جای .B %s استفاده شود تا رشته حاصل به گونه‌ای نقل‌قول شود که مجدداً برای پوسته به عنوان ورودی قابل استفاده باشد. هنگامی که قبل از .B q مشخص‌کننده قالب جایگزین .B # بیاید، رشته به شیوه‌ای مناسب برای یک فیلد در فایل فرمت .B .csv نقل‌قول می‌شود. .TP .BI %( date-format )T قالب .BI %( date-format )T می‌تواند برای رفتار با یک آرگومان به عنوان رشته تاریخ/زمان و قالب‌بندی تاریخ/زمان مطابق با .I date-format\^ همان‌طور که برای دستور .BR date (1) تعریف شده استفاده شود. مقادیر مشخص‌شده به صورت ارقام مطابق توضیحات دستور .BR touch (1) تفسیر می‌شوند. .TP .B %Z قالب .B %Z یک بایت با مقدار 0 چاپ می‌کند. .TP .B %d فیلد دقت قالب .B %d می‌تواند با یک .B . و مبنای خروجی دنبال شود. در این حالت، نویسه فلگ .B # باعث می‌شود .IB base # به ابتدا اضافه گردد. .TP .B # فلگ .B # هنگامی که همراه با قالب .B %d بدون مبنای خروجی استفاده شود، خروجی را در توان‌های 1000 نشان می‌دهد که با یکی از پسوندهای زیر مشخص می‌شود: .BR "k M G T P E" ، و زمانی که همراه با قالب .B %i استفاده شود، خروجی را در توان‌های 1024 نشان می‌دهد که با یکی از پسوندهای زیر مشخص می‌شود: .BR "Ki Mi Gi Ti Pi Ei" . .TP .B = فلگ .B = خروجی را در عرض فیلد مشخص‌شده در وسط تراز می‌کند. .TP .B L فلگ .B L هنگامی که با قالب‌های .B %c یا .B %s استفاده شود، دقت را به جای تعداد بایت‌ها، به عنوان پهنای نویسه در نظر می‌گیرد. .TP .B , فلگ .B , هنگامی که با قالب‌های .B %d یا .B %f استفاده شود، گروه‌های ارقام را با جداکننده گروه‌بندی .RB ( , روی گروه‌های ۳تایی در لوکال C) جدا می‌کند. .PD .PP .RE .TP \f3pwd\fP \*(OK \f3\-LP\fP \*(CK \*(OK \f3\-f\fP \f2fd\^\fP \*(CK مقدار دایرکتوری کاری جاری را خروجی می‌دهد. گزینه .B \-L پیش‌فرض است؛ این گزینه نام منطقی دایرکتوری جاری را چاپ می‌کند. اگر گزینه .B \-P داده شود، تمام پیوندهای نمادین از نام حل می‌شوند. آخرین نمونه از .B \-L یا .B \-P روی خط فرمان مشخص می‌کند کدام روش استفاده شود. اگر گزینه .B \-f مشخص شود، نام دایرکتوری متناظر با توصیف‌گر فایل .IR fd خروجی داده می‌شود. .TP \f3read\fP \*(OK \f3\-AaCSprsv\^\fP \*(CK \*(OK \f3\-d\fP \f2delim\^\fP\*(CK \*(OK \f3\-n\fP \f2n\^\fP\*(CK \*(OK \f3\-N\fP \f2n\^\fP\*(CK \*(OK \f3\-m\fP \f2method\^\fP\*(CK \*(OK \f3\-t\fP \f2timeout\^\fP\*(CK \*(OK \f3\-u\fP \f2unit\^\fP\*(CK \*(OK \f2vname\f3?\f2prompt\^\f1 \*(CK \*(OK \f2vname\^\fP .\|.\|. \*(CK سازوکار ورودی پوسته. یک خط خوانده شده و با استفاده از نویسه‌های موجود در .B .SM IFS به عنوان جداکننده به فیلدها تقسیم می‌شود. نویسه گریز، .BR \e ، برای حذف هرگونه معنی خاص برای نویسه بعدی و برای ادامه خط استفاده می‌شود. گزینه .B \-d باعث می‌شود خواندن به جای خط جدید، تا اولین نویسه از .I delim\^ ادامه یابد. گزینه .B \-n باعث می‌شود حداکثر .I n\^ بایت به جای یک خط کامل خوانده شود، اما هنگام خواندن از یک دستگاه کند، به محض خوانده شدن هر نویسه‌ای بازمی‌گردد. گزینه .B \-N باعث می‌شود دقیقاً .I n\^ بایت خوانده شود مگر اینکه پایان فایل (EOF) رخ دهد یا خواندن به دلیل گزینه .B \-t منقضی (timeout) شود. در حالت خام (raw)، .BR \-r ، با نویسه .B \e به طور خاص رفتار نمی‌شود. فیلد اول به اولین .IR vname ، فیلد دوم به دومین .IR vname و غیره اختصاص می‌یابد، و فیلدهای باقی‌مانده به آخرین .IR vname اختصاص داده می‌شوند. هنگامی که .IR vname دارای صفت باینری باشد و .B \-n یا .B \-N مشخص شده باشد، بایت‌های خوانده‌شده مستقیماً در متغیر ذخیره می‌شوند. اگر .B \-v مشخص شود، مقدار اولین .I vname\^ به عنوان مقدار پیش‌فرض هنگام خواندن از یک دستگاه ترمینال استفاده خواهد شد. گزینه .B \-A باعث می‌شود مقدار متغیر .I vname\^ پاک (unset) شده و هر فیلد خوانده‌شده در عناصر متوالی آرایه شاخص‌دار .IR vname ذخیره شود. .B \-a یک نام مستعار برای .B \-A است. گزینه .B \-m یک متغیر ترکیبی را با روش خواندن تعریف‌شده توسط .IR method می‌خواند. در حال حاضر، فقط روش‌های .B json و .B ksh وجود دارند. گزینه .B \-C باعث می‌شود متغیر .I vname\^ به عنوان یک متغیر ترکیبی خوانده شود. فاصله‌های خالی هنگام یافتن پرانتز باز ابتدایی نادیده گرفته می‌شوند. این معادل .B \-m .B ksh است. گزینه .B \-S باعث می‌شود با خط مانند یک رکورد در فایل فرمت .B .csv رفتار شود تا بتوان از نقل‌قول دوتایی (double quotes) برای مجاز ساختن نویسه جداکننده و خط جدید در درون یک فیلد استفاده کرد. گزینه .B \-p باعث می‌شود خط ورودی از لوله ورودی فرآیندی که توسط پوسته با استفاده از .B \(bv& ایجاد شده گرفته شود. اگر گزینه .B \-s وجود داشته باشد، ورودی به عنوان یک دستور در فایل تاریخچه ذخیره خواهد شد. گزینه .B \-u می‌تواند برای تعیین واحد توصیف‌گر فایل یک‌رقمی .I unit\^ جهت خواندن استفاده شود. توصیف‌گر فایل می‌تواند با دستور توکار ویژه .B exec\^ باز شود. مقدار پیش‌فرض واحد .I n\^ برابر 0 است. گزینه .B \-t برای تعیین مهلت زمانی (timeout) بر حسب ثانیه هنگام خواندن از یک ترمینال یا لوله استفاده می‌شود. اگر .I vname\^ حذف شود، آنگاه .SM .B REPLY به عنوان .IR vname پیش‌فرض استفاده می‌شود. پایان فایل با گزینه .B \-p باعث پاکسازی برای این فرآیند می‌شود تا بتوان فرآیند دیگری را ایجاد کرد. اگر آرگومان اول شامل یک .B ? باشد، باقی‌مانده این کلمه به عنوان .I prompt\^ در خطای استاندارد هنگام تعاملی بودن پوسته استفاده می‌شود. وضعیت خروج 0 است مگر اینکه پایان فایل رخ دهد یا .B read منقضی شود. .TP \(dg\(dg \f3readonly\fP \*(OK \f3\-p\fP \*(CK \*(OK \f2vname\fP\*(OK\f3=\fP\f2value\^\fP\*(CK \*(CK .\|.\|. اگر .I vname\^ داده نشود، نام‌ها و مقادیر هر متغیر با صفت فقط‌خواندنی (readonly) چاپ می‌شود به طوری که مقادیر به گونه‌ای نقل‌قول شده‌اند که امکان ورود مجدد آن‌ها وجود دارد. گزینه .B \-p باعث می‌شود کلمه .B readonly قبل از هر یک درج شود. در غیر این صورت، .IR vname های داده‌شده به عنوان فقط‌خواندنی علامت‌گذاری می‌شوند و این نام‌ها با انتساب‌های بعدی قابل تغییر نیستند. هنگام تعریف یک نوع، اگر مقدار یک زیرمتغیر فقط‌خواندنی تعریف نشده باشد، هنگام ایجاد هر نمونه، تعیین مقدار الزامی است. .TP \(dg \f3return\fP \*(OK \f2n\^\fP \*(CK باعث می‌شود یک .I تابع پوسته یا اسکریپت \f3\|.\fP با وضعیت خروج مشخص‌شده توسط .IR n به اسکریپت فراخوان بازگردد. مقدار برابر با ۸ بیت کم‌ارزش وضعیت مشخص‌شده خواهد بود. اگر .I n\^ حذف شود، وضعیت بازگشت همان وضعیت آخرین دستور اجراشده خواهد بود. اگر .B return در حالی فراخوانی شود که درون یک .I تابع یا اسکریپت \f3\|.\fP نیست، همانند .B exit رفتار می‌کند. .TP \(dg \f3set\fP \*(OK \f3\(+-BCGabefhkmnoprstuvx\fP \*(CK \*(OK \f3\(+-o\fP \*(OK \f2option\^\fP \*(CK \*(CK .\|.\|. \*(OK \f3\(+-A\fP \f2vname\^\fP \*(CK \*(OK \f3\-K\fP \f2keylist\^\fP \*(CK \*(OK \f2arg\^\fP .\|.\|. \*(CK گزینه‌های این دستور دارای معانی زیر هستند: .RS .PD 0 .TP 8 .B \-A انتساب آرایه. اگر .I arg\^ مشخص شده باشد، متغیر .I vname را پاک کرده و مقادیر را به صورت متوالی از فهرست .I arg\^ اختصاص می‌دهد. اگر از .B +A استفاده شود، متغیر .I vname ابتدا پاک نمی‌شود. .TP 8 .B \-B فعال‌سازی بسط گروه آکولاد (brace group expansion). به طور پیش‌فرض فعال است. .TP 8 .B \-C از کوتاه کردن (truncate) فایل‌های موجود توسط تغییر مسیر .B > جلوگیری می‌کند. فایل‌هایی که ایجاد می‌شوند با حالت O_EXCL باز می‌شوند. هنگامی که فعال باشد، برای کوتاه کردن یک فایل به .B >\(bv نیاز است. .TP 8 .B \-G باعث می‌شود الگوی .B ** به تنهایی هنگام استفاده برای تولید نام فایل با فایل‌ها و صفر یا چند دایرکتوری و زیردایرکتوری مطابقت داشته باشد. اگر با یک .B / دنبال شود، فقط با دایرکتوری‌ها و زیردایرکتوری‌ها مطابقت می‌یابد. .TP 8 .B \-H فعال‌سازی بسط تاریخچه به سبک \f3!\fP مشابه با .IR csh (1). . .TP 8 .B \-K هنگامی که هیچ آرگومانی مشخص نشده باشد، همراه با .B \-s برای تعیین فیلدهای مرتب‌سازی و گزینه‌های مرتب‌سازی یک آرایه استفاده می‌شود. (برای توضیح گزینه .I keylist\^ بخش «مرتب‌سازی آرایه‌ها» در بالا را ببینید.) .TP 8 .B \-a تمام متغیرهای بعدی که تعریف می‌شوند به طور خودکار صادر (export) می‌شوند. .TP 8 .B \-b پیام‌های اتمام کار را به محض تغییر وضعیت یک کار پس‌زمینه چاپ می‌کند، به جای اینکه تا اعلان بعدی منتظر بماند. .TP 8 .B \-e مگر اینکه درون یک دستور .B \(bv\(bv یا .B && باشد، یا دستور پس از یک دستور .BR if ، .B while یا .B until باشد یا در خط لوله پس از .BR ! قرار داشته باشد، اگر دستوری وضعیت خروج غیرصفر داشته باشد، تله (trap) .SM .B ERR را در صورت تنظیم بودن اجرا کرده و خارج می‌شود. این حالت هنگام خواندن پروفایل‌ها غیرفعال است. .TP 8 .B \-f تولید نام فایل را غیرفعال می‌کند. .TP 8 .B \-h هر دستور در اولین مواجهه تبدیل به یک نام مستعار ردیابی‌شده (tracked alias) می‌شود. .TP 8 .B \-k (منسوخ‌شده). تمام آرگومان‌های انتساب متغیر در محیط برای یک دستور قرار می‌گیرند، نه فقط مواردی که قبل از نام دستور می‌آیند. .TP 8 .B \-m کارهای پس‌زمینه در یک گروه فرآیند جداگانه اجرا می‌شوند و پس از اتمام یک خط چاپ می‌شود. وضعیت خروج کارهای پس‌زمینه در یک پیام اتمام گزارش می‌شود. در سیستم‌های دارای کنترل کار (job control)، این گزینه برای پوسته‌های تعاملی به طور خودکار فعال است. .TP 8 .B \-n دستورات را خوانده و آن‌ها را از نظر خطاهای نحوی بررسی می‌کند، اما آن‌ها را اجرا نمی‌کند. برای پوسته‌های تعاملی نادیده گرفته می‌شود. .TP 8 .B \-o آرگومان بعدی می‌تواند یکی از نام‌های گزینه زیر باشد: .RS .TP 8 .B allexport همان .BR \-a . .TP 8 .B bgnice تمام کارهای پس‌زمینه با اولویت پایین‌تر اجرا می‌شوند. این حالت پیش‌فرض است. .TP 8 .B braceexpand همان .BR \-B . .TP 8 .B emacs شما را در یک ویرایشگر درون‌خطی به سبک .I emacs برای ورود دستور قرار می‌دهد. .TP 8 .B errexit همان .BR \-e . .TP 8 .B globstar همان .BR \-G . .TP 8 .B gmacs شما را در یک ویرایشگر درون‌خطی به سبک .I gmacs برای ورود دستور قرار می‌دهد. .TP 8 .B histexpand همان .BR \-H . .TP 8 .B ignoreeof پوسته با پایان فایل (EOF) خارج نمی‌شود. باید از دستور .B exit استفاده شود. .TP 8 .B keyword همان .BR \-k . .TP 8 .B letoctal دستور .B let ثابت‌های اکتال را که با .B 0 شروع می‌شوند مجاز می‌داند. .TP 8 .B markdirs به انتهای تمام نام‌های دایرکتوری حاصل از تولید نام فایل یک .B / اضافه می‌شود. .TP 8 .B monitor همان .BR \-m . .TP 8 .B multiline ویرایشگرهای توکار برای خطوطی که طولانی‌تر از عرض صفحه نمایش هستند از چندین خط روی صفحه استفاده می‌کنند. این ممکن است برای همه ترمینال‌ها کار نکند. .TP 8 .B noclobber همان .BR \-C . .TP 8 .B noexec همان .BR \-n . .TP 8 .B noglob همان .BR \-f . .TP 8 .B nolog تعاریف توابع را در فایل تاریخچه ذخیره نمی‌کند. .TP 8 .B notify همان .BR \-b . .TP 8 .B nounset همان .BR \-u . .TP 8 .B pipefail یک خط لوله تا زمانی که تمام اجزای خط لوله کامل نشوند تکمیل نمی‌شود، و مقدار بازگشتی برابر با مقدار آخرین دستور غیرصفر خواهد بود که شکست خورده است، یا در صورتی که هیچ دستوری شکست نخورده باشد برابر با صفر خواهد بود. .TP 8 .B privileged همان .BR \-p . .TP 8 .B showme هنگامی که فعال باشد، دستورات ساده یا خطوط لوله‌ای که قبل از آن‌ها یک نقطه‌ویرگول .RB ( ; ) آمده باشد، طوری نمایش داده می‌شوند که گویی گزینه .B xtrace فعال است اما اجرا نخواهند شد. در غیر این صورت، .B ; ابتدایی نادیده گرفته می‌شود. .TP 8 .B trackall همان .BR \-h . .TP 8 .B verbose همان .BR \-v . .TP 8 .B vi شما را در حالت درج یک ویرایشگر درون‌خطی به سبک .I vi\^ قرار می‌دهد تا زمانی که نویسه گریز .B 033 را فشار دهید. این شما را در حالت کنترل قرار می‌دهد. کلید Return خط را ارسال می‌کند. .TP 8 .B viraw هر نویسه به محض تایپ شدن در حالت .I vi\^ پردازش می‌شود. این گزینه اکنون همیشه فعال است. غیرفعال کردن آن در زمان اجرا اثری ندارد. .TP 8 .B xtrace همان .BR \-x . .PP اگر هیچ نام گزینه‌ای ارائه نشود، تنظیمات گزینه‌های جاری چاپ می‌شوند. .RE .TP 8 .B \-p پردازش فایل .B \s-1$HOME\s+1/.profile را غیرفعال کرده و از فایل .B /etc/suid_profile به جای فایل .SM .B ENV استفاده می‌کند. این حالت هر زمان که uid (یا gid) مؤثر با uid (یا gid) واقعی برابر نباشد روشن است. خاموش کردن این گزینه باعث می‌شود uid و gid مؤثر به uid و gid واقعی تنظیم شوند. .TP 8 .B \-r پوسته محدود (restricted shell) را فعال می‌کند. این گزینه پس از تنظیم قابل لغو نیست. .TP 8 .B \-s پارامترهای موضعی را به ترتیب الفبایی مرتب می‌کند. هنگامی که با .B \-A استفاده شود، عناصر آرایه را مرتب می‌کند. .TP 8 .B \-t (منسوخ‌شده). پس از خواندن و اجرای یک دستور خارج می‌شود. .TP 8 .B \-u هنگام جایگزینی، با پارامترهای تنظیم‌نشده به عنوان خطا برخورد می‌کند. .TP 8 .B \-v خطوط ورودی پوسته را هنگام خوانده شدن چاپ می‌کند. .TP 8 .B \-x دستورات و آرگومان‌های آن‌ها را هنگام اجرا چاپ می‌کند. .TP 8 .B \-\|\- هیچ‌یک از گزینه‌ها را تغییر نمی‌دهد؛ در تنظیم .B $1 به مقداری که با .B \- شروع می‌شود مفید است. اگر هیچ آرگومانی بعد از این گزینه نیاید، پارامترهای موضعی پاک (unset) می‌شوند. .PD .PP به عنوان یک ویژگی منسوخ‌شده، اگر اولین .I arg\^ برابر با .B \- باشد، آنگاه گزینه‌های .B \-x و .B \-v خاموش می‌شوند و .I arg بعدی به عنوان اولین آرگومان در نظر گرفته می‌شود. استفاده از .B \+ به جای .B \- باعث خاموش شدن این گزینه‌ها می‌شود. این گزینه‌ها همچنین می‌توانند هنگام فراخوانی پوسته استفاده شوند. مجموعه گزینه‌های جاری را می‌توان در .B $\- یافت. مگر اینکه .B \-A مشخص شده باشد، باقی آرگومان‌ها پارامترهای موضعی هستند و به ترتیب به .B $1 .B $2 \&.\|.\|.\^ اختصاص می‌یابند. اگر هیچ آرگومانی داده نشود، نام‌ها و مقادیر تمام متغیرها در خروجی استاندارد چاپ می‌شوند. .RE .TP \(dg \f3shift\fP \*(OK \f2n\^\fP \*(CK .br پارامترهای موضعی از \f3$\fP\f2n\fP\f3+1\fP \&.\|.\|. به .B $1 \&.\|.\|.\^ تغییر نام می‌یابند، مقدار پیش‌فرض .I n\^ برابر ۱ است. پارامتر .I n\^ می‌تواند هر عبارت حسابی باشد که به یک عدد نامنفی کمتر یا مساوی با .B $# ارزیابی شود. .TP \f3sleep\fP \f2seconds\^\fP اجرا را برای تعداد ثانیه‌های اعشاری یا کسری از ثانیه که توسط .I seconds مشخص شده به حالت تعلیق درمی‌آورد. می‌توان از پسوند یکی از \f3smhd\f3 به ترتیب برای مشخص کردن ثانیه، دقیقه، ساعت و روز استفاده کرد. همچنین ثانیه‌ها را می‌توان با استفاده از قالب تاریخ/زمان مشخص کرد. .TP \f3times\fP زمان CPU مصرف‌شده توسط پوسته و تمام فرآیندهای فرزند آن را نمایش می‌دهد. .TP \(dg \f3trap\fP \*(OK \f3\-alp\fP \*(CK \*(OK \f2action\^\fP \*(CK \*(OK \f2sig\^\fP \*(CK .\|.\|. گزینهٔ .B \-p باعث می‌شود عملیات تله .RI ( action ) مرتبط با هر تله مطابق با آرگومان‌های مشخص‌شده همراه با نقل‌قول‌گذاری مناسب چاپ شود. در غیر این صورت، هنگام دریافت سیگنال(های) .IR sig توسط پوسته، .I action\^ به‌گونه‌ای پردازش می‌شود که گویی آرگومانی برای دستور .B eval است. .sp .5 گزینهٔ .B \-a باعث می‌شود تنظیمات فعلی تله به انتهای .I action\^ اضافه شود. هر .I sig\^ می‌تواند به صورت عدد یا نام سیگنال مشخص شود. دستورات تله به ترتیب شماره سیگنال اجرا می‌شوند. هرگونه تلاش برای تنظیم تله روی سیگنالی که در بدو ورود به پوستهٔ جاری نادیده گرفته شده بود، بی‌اثر است. اگر .I action\^ حذف شود و نخستین .I sig\^ یک عدد باشد، یا اگر .I action\^ برابر با .B \- باشد، تله(های) مربوط به هر .I sig\^ به مقادیر اصلی خود بازنشانی می‌شوند. اگر .I action\^ رشتهٔ تهی باشد، این سیگنال توسط پوسته و دستوراتی که فراخوانی می‌کند نادیده گرفته می‌شود. .sp .5 اگر .I sig\^ برابر با .SM .B ERR باشد، .I action\^ هر زمان که دستوری با وضعیت خروج غیرصفر پایان یابد، اجرا خواهد شد. .sp .5 اگر .I sig\^ برابر با .SM .B DEBUG باشد، .I action\^ پیش از هر دستور اجرا می‌شود. متغیر .B .sh.command شامل محتویات خط فرمان جاری هنگام اجرای .I action\^ خواهد بود. اگر وضعیت خروج تله .B 2 باشد، دستور اجرا نخواهد شد. اگر وضعیت خروج تله .B 255 باشد و داخل یک تابع یا اسکریپت دات (نقطه‌ای) اجرا شود، تابع یا اسکریپت بازمی‌گردد. .sp .5 اگر .I sig\^ برابر با .B 0 یا .SM .B EXIT باشد و عبارت .B trap درون بدنهٔ تابعی که با ساختار .B function .I name\^ تعریف شده اجرا شود، دستور .I action\^ پس از اتمام تابع اجرا می‌گردد. برای .B trap تنظیم‌شده خارج از هر تابع، دستور .I action\^ هنگام خروج از پوسته اجرا می‌شود. .sp .5 اگر .I sig\^ برابر با .SM .BR KEYBD باشد، .I action\^ هر زمان که کلیدی در حالت‌های .BR emacs ، .BR gmacs یا .B vi\^ خوانده شود، اجرا خواهد شد. دستور .B trap بدون آرگومان، فهرستی از دستورات مرتبط با هر شماره سیگنال را چاپ می‌کند. .sp .5 یک دستور .B exit یا .B return بدون آرگومان درون عملیات تله، وضعیت خروج دستوری را که موجب فراخوانی تله شده حفظ می‌کند. گزینهٔ .B \-l سیگنال‌ها و شماره‌های آن‌ها را در خروجی استاندارد فهرست می‌کند. .TP \f3true\fP کاری انجام نمی‌دهد و با وضعیت ۰ خارج می‌شود. همراه با .B while برای ایجاد حلقه‌های بی‌نهایت استفاده می‌شود. .TP \(dg\(dg \f3typeset\fP \*(OK \f3\(+-ACHSfblmnprstux\^\fP \*(CK \*(OK \f3\(+-EFLRXZi\*(OK\f2n\^\fP\*(CK \*(CK \*(OK \f3\+-M \*(OK \f2mapname\fP \*(CK \*(CK \*(OK \f3\-T \*(OK \f2tname\fP=(\f2assign_list\fP) \*(CK \*(CK \*(OK \f3\-h \f2str\fP \*(CK \*(OK \f3\-a\fP \*(OK\f2type\fP\*(CK \*(CK \*(OK \f2vname\^\fP\*(OK\f3=\fP\f2value\^\fP \*(CK \^ \*(CK .\|.\|. ویژگی‌ها و مقادیر متغیرها و توابع پوسته را تنظیم می‌کند. هنگامی که درون تابعی تعریف‌شده با ساختار .B function .I name\^ فراخوانی شود، یک نمونهٔ جدید از متغیر .I vname\^ ایجاد می‌شود و مقدار و نوع متغیر پس از اتمام تابع بازیابی می‌گردد. فهرست ویژگی‌های زیر را می‌توان مشخص کرد: .RS .PD 0 .TP .B \-A متغیر .I vname\^ را به عنوان یک آرایهٔ انجمنی اعلان می‌کند. اندیس‌ها به‌جای عبارت‌های محاسباتی، رشته هستند. .TP .B \-C باعث می‌شود هر .I vname\^ یک متغیر ترکیبی باشد. اگر .I value\^ نام یک متغیر ترکیبی باشد، در .I vname\^ کپی می‌شود. در غیر این صورت، هر .I vname\^ را لغو مقدار می‌کند. .TP .B \-a متغیر .I vname\^ را به عنوان یک آرایهٔ اندیسی اعلان می‌کند. اگر .I type\^ مشخص شده باشد، باید نام یک نوع شمارشی باشد که با دستور .B enum ایجاد شده است و امکان استفاده از ثابت‌های شمارشی به عنوان اندیس را فراهم می‌سازد. .TP .B \-E متغیر .I vname\^ را به عنوان عدد ممیز شناور با دقت مضاعف (دوبل) اعلان می‌کند. اگر .I n\^ غیرصفر باشد، تعداد ارقام بااهمیت مورد استفاده هنگام بسط .I vname\^ را تعیین می‌کند؛ در غیر این صورت، ده رقم بااهمیت استفاده خواهد شد. .TP .B \-F متغیر .I vname\^ را به عنوان عدد ممیز شناور با دقت مضاعف اعلان می‌کند. اگر .I n\^ غیرصفر باشد، تعداد ارقام اعشار پس از ممیز مورد استفاده هنگام بسط .I vname\^ را تعیین می‌کند؛ در غیر این صورت ده رقم پس از ممیز استفاده خواهد شد. .TP .B \-H این گزینه نگاشت فایل یونیکس به نام میزبان را روی سیستم‌های غیریونیکس فراهم می‌کند. .TP .B \-L چپ‌چین کردن و حذف فاصله‌های ابتدایی از .IR value . اگر .I n\^ غیرصفر باشد، عرض فیلد را تعیین می‌کند، در غیر این صورت بر اساس عرض مقدار در اولین انتساب تعیین می‌شود. هنگامی که به متغیر مقداری انتساب داده شود، در سمت راست با فاصله پر شده یا در صورت نیاز کوتاه می‌شود تا در فیلد جا گیرد. گزینهٔ .B \-R غیرفعال می‌شود. .TP .B \-M استفاده از نگاشت نویسه‌ای .I mapping\^ تعریف‌شده توسط .IR wctrans (3) مانند .B tolower و .B toupper هنگام انتساب مقدار به هر یک از عملوندهای مشخص‌شده. هنگامی که .I mapping\^ مشخص شده باشد و هیچ عملوندی وجود نداشته باشد، تمام متغیرهایی که از این نگاشت استفاده می‌کنند در خروجی استاندارد نوشته می‌شوند. هنگامی که .I mapping\^ حذف شود و هیچ عملوندی نباشد، تمام متغیرهای نگاشت‌شده در خروجی استاندارد نوشته می‌شوند. .TP .B \-R راست‌چین کردن و پر کردن با فاصله‌های ابتدایی. اگر .I n\^ غیرصفر باشد، عرض فیلد را تعیین می‌کند، در غیر این صورت بر اساس عرض مقدار در اولین انتساب تعیین می‌شود. فیلد از سمت چپ با فاصله پر شده یا در صورت انتساب مجدد متغیر، از انتها بریده می‌شود. گزینهٔ .B \-L غیرفعال می‌شود. .TP .B \-S هنگامی که درون .I assign_list\^ یک تعریف نوع استفاده شود، باعث می‌شود زیرمتغیر مشخص‌شده بین تمام نمونه‌های آن نوع به اشتراک گذاشته شود. هنگامی که درون تابعی تعریف‌شده با کلمهٔ رزروشدهٔ .B function استفاده شود، متغیرهای مشخص‌شده دارای حوزهٔ .I "function static\^" خواهند بود. در غیر این صورت، متغیر پیش از پردازش فهرست انتساب لغو مقدار می‌شود. .TP .B \-T اگر به دنبال آن \fItname\^\fP بیاید، نوعی به نام \fItname\^\fP با استفاده از انتساب ترکیبی .I assign_list\^ به \f2tname\fP ایجاد می‌کند. در غیر این صورت، تمام تعاریف نوع را در خروجی استاندارد می‌نویسد. .TP .B \-X متغیر .I vname\^ را به عنوان عدد ممیز شناور با دقت مضاعف اعلان کرده و با قالب .B %a استاندارد ISO-C99 بسط می‌دهد. اگر .I n\^ غیرصفر باشد، تعداد ارقام هگزادسیمال پس از ممیز مبنا هنگام بسط .I vname\^ را مشخص می‌کند. مقدار پیش‌فرض ۱۰ است. .TP .B \-Z راست‌چین کردن و پر کردن با صفرهای ابتدایی، در صورتی که نخستین نویسهٔ غیرفاصله یک رقم باشد و گزینهٔ .B \-L تنظیم نشده باشد. اگر گزینهٔ .B \-L نیز تنظیم شده باشد، صفرهای ابتدایی حذف می‌شوند. اگر .I n\^ غیرصفر باشد، عرض فیلد را تعیین می‌کند، در غیر این صورت بر اساس عرض مقدار در اولین انتساب تعیین می‌شود. .TP .B \-f نام‌ها به‌جای نام متغیر، به نام تابع اشاره دارند. هیچ انتسابی نمی‌توان انجام داد و تنها گزینه‌های معتبر دیگر .BR \-S ، .BR \-t ، .B \-u و .B \-x هستند. گزینهٔ \-S می‌تواند همراه با توابع دیسیپلین تعریف‌شده در یک نوع استفاده شود تا نشان دهد تابع ایستا (static) است. برای یک تابع ایستا، صرف‌نظر از اینکه کدام نمونه به آن رجوع کند، همان متد توسط تمام نمونه‌های آن نوع استفاده خواهد شد. علاوه بر این، تنها می‌تواند از مقادیر متغیرهای تعریف نوع اصلی استفاده کند. این توابع دیسیپلین را نمی‌توان در هیچ نمونه‌ای از نوع بازتعریف کرد. گزینهٔ .B \-t ردیابی اجرای این تابع را فعال می‌کند. گزینهٔ .B \-u باعث می‌شود این تابع به عنوان تعریف‌نشده علامت‌گذاری شود. هنگام ارجاع به تابع، متغیر .SM .B FPATH برای یافتن تعریف تابع جستجو خواهد شد. اگر هیچ گزینه‌ای به جز .B \-f مشخص نشده باشد، تعریف تابع در خروجی استاندارد نمایش داده می‌شود. اگر .B +f مشخص شود، خطی شامل نام تابع به همراه یک کامنت پوسته حاوی شماره خط و مسیر فایلی که این تابع در آن تعریف شده است (در صورت وجود) نمایش می‌یابد. وضعیت خروج می‌تواند برای تعیین اینکه آیا تابع تعریف شده است یا خیر استفاده شود؛ به طوری که .BI "typeset \-f .sh.math." name\^ در صورت تعریف بودن تابع ریاضی .I name\^ مقدار ۰ و در غیر این صورت مقداری غیرصفر برمی‌گرداند. .TP .B \-b متغیر می‌تواند هر تعداد بایت داده را در خود نگه دارد. داده‌ها می‌توانند متنی یا باینری باشند. مقدار با کدگذاری base64 داده‌ها نشان داده می‌شود. اگر .B \-Z نیز مشخص شود، اندازهٔ بافر به بایت توسط اندازهٔ مرتبط با .B \-Z تعیین می‌شود. اگر رشتهٔ base64 انتساب‌داده‌شده دادهٔ بیشتری تولید کند، بریده خواهد شد؛ در غیر این صورت با بایت‌هایی با مقدار صفر پر می‌شود. قالب .B %B در .B printf می‌تواند برای خروجی دادن داده‌های واقعی این بافر به‌جای کدگذاری base64 استفاده شود. .TP .B \-h درون تعاریف نوع برای افزودن اطلاعات هنگام تولید اطلاعات دربارهٔ زیرمتغیر در صفحهٔ راهنما (man page) استفاده می‌شود. هنگامی که خارج از تعریف نوع استفاده شود نادیده گرفته می‌شود. هنگام استفاده با .B \-f اطلاعات به تابع دیسیپلین مربوطه مرتبط می‌شود. .TP .B \-i متغیر .I vname\^ را به عنوان نمایش داخلی عدد صحیح اعلان می‌کند. سمت راست انتساب هنگام انتساب به یک عدد صحیح، به عنوان یک عبارت محاسباتی ارزیابی می‌شود. اگر .I n\^ غیرصفر باشد، مبنای محاسباتی خروجی را تعیین می‌کند؛ در غیر این صورت مبنای خروجی ده خواهد بود. .TP .B \-l همراه با .BR \-i ، .B \-E یا .B \-F برای نشان دادن عدد صحیح بزرگ (long) یا ممیز شناور با دقت مضاعف بزرگ (long double) استفاده می‌شود. در غیر این صورت، تمام نویسه‌های بزرگ انگلیسی به نویسه‌های کوچک تبدیل می‌شوند. گزینهٔ حروف بزرگ، .BR \-u ، غیرفعال می‌شود. معادل با .B "\-M tolower" . .TP .B \-m متغیر را منتقل کرده یا تغییر نام می‌دهد. مقدار برابر با نام متغیری است که مقدار آن به .I vname\^ منتقل خواهد شد. متغیر اصلی لغو مقدار می‌شود. نمی‌تواند با هیچ گزینهٔ دیگری استفاده شود. .TP .B \-n متغیر .I vname\^ را به عنوان مرجعی به متغیری که نام آن توسط مقدار متغیر .I vname\^ تعیین شده است، اعلان می‌کند. این معمولاً برای ارجاع به متغیری درون یک تابع که نام آن به عنوان آرگومان ارسال شده استفاده می‌شود. نمی‌تواند با هیچ گزینهٔ دیگری استفاده شود. .TP .B \-p نام، ویژگی‌ها و مقادیر برای .IR vname های داده‌شده به شکلی در خروجی استاندارد نوشته می‌شوند که بتوانند به عنوان ورودی پوسته استفاده شوند. اگر .B +p مشخص شود، مقادیر نمایش داده نمی‌شوند. .TP .B \-r .IR vname های داده‌شده به عنوان فقط‌خواندنی علامت‌گذاری می‌شوند و این نام‌ها را نمی‌توان با انتساب‌های بعدی تغییر داد. .TP .B \-s همراه با .BR \-i ، .B \-E یا .B \-F برای نشان دادن عدد صحیح کوتاه (short) یا ممیز شناور با دقت یگانه (float) استفاده می‌شود. .TP .B \-t متغیرها را برچسب‌گذاری (تگ) می‌کند. برچسب‌ها توسط کاربر قابل تعریف هستند و معنای خاصی برای پوسته ندارند. .TP .B \-u هنگامی که همراه با .B \-i داده شود، عدد صحیح بدون علامت را مشخص می‌کند. در غیر این صورت، تمام نویسه‌های کوچک به حروف بزرگ تبدیل می‌شوند. گزینهٔ حروف کوچک، .BR \-l ، غیرفعال می‌شود. معادل با .B "\-M toupper" . .TP .B \-x .IR vname های داده‌شده برای صدور خودکار به محیط .RI ( environment ) دستوراتی که در ادامه اجرا می‌شوند علامت‌گذاری می‌شوند. متغیرهایی که نام آن‌ها حاوی \fB\s+2.\s-2\fP است را نمی‌توان صادر کرد. .PD .PP ویژگی .B \-i را نمی‌توان همراه با .BR \-R ، .BR \-L ، .B \-Z یا .B \-f مشخص کرد. .PP استفاده از .B \+ به‌جای .B \- باعث خاموش شدن این گزینه‌ها می‌شود. اگر هیچ آرگومان .I vname\^ داده نشود، فهرستی از .I vnameها\^ (و در صورت تمایل .IR مقادیر\^ ) .I متغیرها\^ چاپ می‌شود. (استفاده از .B \+ به‌جای .B \- مانع از چاپ مقادیر می‌شود.) گزینهٔ .B \-p باعث می‌شود .B typeset به همراه حروف گزینه‌ها قبل از هر نام چاپ شود، به‌جای نام خود گزینه‌ها. اگر گزینه‌ای به جز .B \-p داده شود، تنها آن متغیرهایی که دارای تمام گزینه‌های داده‌شده هستند چاپ می‌شوند. در غیر این صورت، .IR vname ها و .I ویژگی‌های\^ تمام .I متغیرهایی\^ که دارای ویژگی هستند چاپ می‌شوند. .RE .TP \f3ulimit\fP \*(OK \f3\-HSacdfmnpstv\fP \*(CK \*(OK \f2limit\^\fP \*(CK تنظیم یا نمایش محدودیت منابع سیستم. محدودیت‌های منابع موجود در زیر فهرست شده‌اند. بسیاری از سیستم‌ها از یک یا چند مورد از این محدودیت‌ها پشتیبانی نمی‌کنند. محدودیت برای یک منبع مشخص زمانی تنظیم می‌شود که .I limit\^ مشخص شده باشد. مقدار .I limit\^ می‌تواند عددی در واحد مشخص‌شده در زیر برای هر منبع باشد، یا مقدار .BR unlimited . گزینه‌های .B \-H و .B \-S مشخص می‌کنند که آیا محدودیت سخت .RI ( hard ) یا محدودیت نرم .RI ( soft ) برای منبع داده‌شده تنظیم شود. یک محدودیت سخت را پس از تنظیم نمی‌توان افزایش داد. یک محدودیت نرم را می‌توان تا سقف مقدار محدودیت سخت افزایش داد. اگر هیچ‌یک از گزینه‌های .B H یا .B S مشخص نشوند، محدودیت روی هر دو اعمال می‌شود. محدودیت فعلی منبع زمانی چاپ می‌شود که .I limit\^ حذف شده باشد. در این حالت، محدودیت نرم چاپ می‌شود مگر اینکه .B H مشخص شده باشد. هنگامی که بیش از یک منبع مشخص شود، نام منبع و واحد آن پیش از مقدار چاپ می‌شود. .RS .PD 0 .TP .B \-a فهرست کردن تمام محدودیت‌های فعلی منابع. .TP .B \-c تعداد بلوک‌های ۵۱۲ بایتی روی اندازهٔ core dumpها. .TP .B \-d تعداد کیلوبایت‌ها روی اندازهٔ ناحیهٔ داده (data area). .TP .B \-f تعداد بلوک‌های ۵۱۲ بایتی روی فایل‌هایی که می‌توانند توسط فرآیند جاری یا فرآیندهای فرزند نوشته شوند (فایل‌ها با هر اندازه‌ای می‌توانند خوانده شوند). .TP .B \-m تعداد کیلوبایت‌ها روی اندازهٔ حافظهٔ فیزیکی. .TP .B \-n تعداد توصیف‌کننده‌های فایل (file descriptors) به‌علاوهٔ ۱. .TP .B \-p تعداد بلوک‌های ۵۱۲ بایتی برای بافرینگ لوله (pipe). .TP .B \-s تعداد کیلوبایت‌ها روی اندازهٔ ناحیهٔ پشته (stack area). .TP .B \-t تعداد ثانیه‌های پردازنده (CPU) مورد استفاده توسط هر فرآیند. .TP .B \-v تعداد کیلوبایت‌ها برای حافظهٔ مجازی. .PD .PP اگر هیچ گزینه‌ای داده نشود، .B \-f فرض می‌شود. .RE .TP \f3umask\fP \*(OK \f3\-pS\fP \*(CK \*(OK \f2mask\^\fP \*(CK ماسک ایجاد فایل کاربر روی .I mask\^ تنظیم می‌شود (ببینید: .IR umask (2)). .I mask می‌تواند یک عدد اکتال (هشت‌هشتی) یا یک مقدار نمادین مطابق با توضیحات .IR chmod (1) باشد. اگر یک مقدار نمادین داده شود، مقدار جدید umask متمم حاصل اعمال .I mask\^ بر متمم مقدار قبلی umask است. اگر .I mask\^ حذف شود، مقدار فعلی ماسک چاپ می‌شود. گزینهٔ .B \-S باعث می‌شود حالت به عنوان یک مقدار نمادین چاپ شود؛ در غیر این صورت ماسک در مبنای هشت چاپ می‌شود. گزینهٔ \-p باعث می‌شود خروجی به شکلی باشد که بتواند برای ورود مجدد به پوسته استفاده شود. .TP \(dg \f3unalias\fP \*(OK \f3\-a\fP \*(CK \f2name\^\fP .\|.\|. نام‌های مستعار مشخص‌شده در فهرست .IR name ها از فهرست نام‌های مستعار حذف می‌شوند. گزینهٔ .B \-a باعث حذف تمام نام‌های مستعار می‌شود. .TP \(dg\f3unset\fP \*(OK \f3\-fnv\fP \*(CK \f2vname\^\fP .\|.\|. متغیرهای مشخص‌شده توسط فهرست .IR vname ها لغو انتساب می‌شوند؛ یعنی به جز زیرمتغیرهای درون یک نوع، مقادیر و ویژگی‌های آن‌ها پاک می‌شود. برای زیرمتغیرهای یک نوع، مقادیر به مقدار پیش‌فرض از تعریف نوع بازنشانی می‌شوند. متغیرهای فقط‌خواندنی را نمی‌توان لغو انتساب کرد. اگر گزینهٔ .B \-f تنظیم شده باشد، نام‌ها به نام‌های .I تابع\^ اشاره دارند. اگر گزینهٔ .B \-v تنظیم شده باشد، نام‌ها به نام‌های .I متغیر\^ اشاره دارند. گزینهٔ .B \-f بر .B \-v تقدم دارد. اگر .B \-n تنظیم شده باشد و .I name\^ یک ارجاع نام باشد، خود .I name\^ لغو مقدار می‌شود نه متغیری که به آن ارجاع دارد. حالت پیش‌فرض معادل .B \-v است. لغو انتساب متغیرهای .SM .BR LINENO ، .SM .BR MAILCHECK ، .SM .BR OPTARG ، .SM .BR OPTIND ، .SM .BR RANDOM ، .SM .BR SECONDS ، .SM .BR TMOUT و .SM .B _ معنای ویژهٔ آن‌ها را حذف می‌کند، حتی اگر بعداً به آن‌ها مقداری انتساب داده شود. .TP \f3wait\fP \*(OK \f2job\^\fP .\|.\|. \*(CK منتظر ماندن برای .I job (کار/شغل) مشخص‌شده و گزارش وضعیت خاتمهٔ آن. اگر .I job\^ داده نشود، برای تمام فرآیندهای فرزند فعال فعلی انتظار کشیده می‌شود. وضعیت خروج این دستور در صورتی که .I job\^ مشخص شده باشد، برابر با وضعیت آخرین فرآیند منتظر مانده است؛ در غیر این صورت صفر خواهد بود. برای توضیحات قالب .IR job ، بخش .I Jobs را ببینید. .TP \f3whence\fP \*(OK \f3\-afpv\fP \*(CK \f2name\^\fP .\|.\|. برای هر .IR name ، مشخص می‌کند که در صورت استفاده به عنوان نام دستور چگونه تفسیر خواهد شد. .sp .5 گزینهٔ .B \-v گزارش جامع‌تری تولید می‌کند. گزینهٔ .B \-f از جستجو برای توابع صرف‌نظر می‌کند. گزینهٔ .B \-p یک جستجوی مسیر (PATH) برای .I name\^ انجام می‌دهد، حتی اگر name یک نام مستعار، تابع یا کلمهٔ رزروشده باشد. گزینهٔ .B \-p گزینهٔ .B \-v را غیرفعال می‌کند. گزینهٔ .B \-a مشابه گزینهٔ .B \-v است اما باعث می‌شود تمام تفسیرهای ممکن برای نام داده‌شده گزارش شوند. .SS "فراخوانی (Invocation)" اگر شل توسط .IR exec (2) فراخوانی شود و اولین نویسه از آرگومان صفر .RB ( $0 ) برابر با .B \- باشد، شل به عنوان یک شل .I ورود (login) فرض می‌شود و دستورها از .B /etc/profile و سپس از .BR \s-1$HOME\s+1/.profile (در صورت وجود) خوانده می‌شوند. همچنین، گزینه .B \-l باعث می‌شود که شل به عنوان یک شل .I ورود در نظر گرفته شود. سپس، برای شل‌های تعاملی، دستورها از پرونده‌ای خوانده می‌شوند که نام آن از طریق گسترش پارامتر، جایگزینی دستور و جایگزینی محاسباتی روی مقدار متغیر محیطی .SM .B ENV (در صورت وجود پرونده) تعیین می‌شود. اگر گزینه .B \-s داده نشده باشد و آرگومان .I arg\^ ارائه شده و پرونده‌ای با نام .I arg\^ وجود داشته باشد، این اسکریپت را خوانده و اجرا می‌کند. در غیر این صورت، اگر اولین .I arg\^ حاوی .B / نباشد، یک جستجوی مسیر روی اولین .I arg\^ برای تعیین نام اسکریپت اجرایی انجام می‌شود. اسکریپت .I arg\^ باید مجوز اجرا داشته باشد و هرگونه تنظیمات .I setuid و .I setgid نادیده گرفته خواهد شد. اگر اسکریپت در مسیر پیدا نشود، با .I arg\^ به‌گونه‌ای رفتار می‌شود که گویی نام یک دستور یا تابع توکار است. سپس دستورها مطابق توضیحات زیر خوانده می‌شوند؛ گزینه‌های زیر هنگام فراخوانی توسط شل تفسیر می‌شوند: .PP .PD 0 .TP 8 .B \-D فهرستی از تمام رشته‌های داخل نقل‌قول دوگانه که قبل از آن‌ها یک .B $ آمده است در خروجی استاندارد چاپ شده و شل خارج می‌شود. این مجموعه از رشته‌ها در صورتی که محلی‌سازی (locale) چیزی غیر از C یا POSIX باشد، مشمول ترجمه زبانی خواهند شد. هیچ دستوری اجرا نخواهد شد. .PD .TP 8 .B \-E پرونده مشخص‌شده توسط متغیر .B ENV یا در صورت تعریف نشدن پس از پروفایل‌ها، پرونده .B \s-1$HOME\s+1/\f3.\fPkshrc را می‌خواند. .TP 8 .BI \-c اگر گزینه .B \-c وجود داشته باشد، دستورها از اولین .I arg\^ خوانده می‌شوند. هرگونه آرگومان باقی‌مانده به پارامترهای مکانی تبدیل می‌شود که از .B 0 شروع می‌شوند. .TP .B \-s اگر گزینه .B \-s وجود داشته باشد یا هیچ آرگومانی باقی نمانده باشد، دستورها از ورودی استاندارد خوانده می‌شوند. خروجی شل، به جز خروجی .I دستورهای ویژه (Special Commands)\^ ذکرشده در بالا، در توصیف‌کننده پرونده ۲ نوشته می‌شود. .TP .B \-i اگر گزینه .B \-i وجود داشته باشد یا اگر ورودی و خروجی خطای شل به یک ترمینال متصل باشند (همان‌طور که توسط .IR tcgetattr (2) گزارش می‌شود)، این شل .I تعاملی (interactive) خواهد بود. در این حالت \s-1TERM\s+1 نادیده گرفته می‌شود (به‌طوری که \f3kill 0\fP شل تعاملی را متوقف نمی‌کند) و \s-1INTR\s+1 دریافت و نادیده گرفته می‌شود (به‌طوری که .B wait قابل وقفه باشد). در تمام موارد، \s-1QUIT\s+1 توسط شل نادیده گرفته می‌شود. .TP .B \-r اگر گزینه .B \-r وجود داشته باشد، شل یک شل محدودشده (restricted shell) است. .TP .B \-P اگر .B \-P یا .B \-o profile وجود داشته باشد، شل یک شل پروفایل است (به .IR pfexec (1) مراجعه کنید). .TP .BI \-R " filename\^" گزینه .B \-R .I filename\^ برای تولید یک پایگاه داده ارجاع متقابل استفاده می‌شود که می‌تواند توسط یک ابزار مجزا برای یافتن تعاریف و ارجاعات متغیرها و دستورها به کار رود. آرگومان filename پایگاه داده تولیدشده را مشخص می‌کند. یک پرونده اسکریپت نیز باید در خط فرمان ارائه شود. .PP سایر گزینه‌ها و آرگومان‌ها در بخش دستور .B set در بالا توضیح داده شده‌اند. یک علامت .B \- اختیاری به عنوان اولین آرگومان نادیده گرفته می‌شود. .if \nZ=0 \{.SS "فقط Rsh (Rsh Only)" .I Rsh\} .if \nZ=1 \{.SS "فقط Rksh (Rksh Only)" .I Rksh\} .if \nZ=2 \{.SS "فقط Rksh93 (Rksh93 Only)" .I Rksh93\} برای تنظیم نام‌های ورود و محیط‌های اجرایی به کار می‌رود که قابلیت‌های آن‌ها نسبت به شل استاندارد کنترل‌شده‌تر است. عملکرد .if \nZ=0 .B rsh\^ .if \nZ=1 .B rksh\^ .if \nZ=2 .B rksh93\^ دقیقاً همانند .if \nZ=0 .BR sh\^ , .if \nZ=1 .BR ksh\^ , .if \nZ=2 .BR ksh93\^ , است، به جز اینکه موارد زیر مجاز نیستند: .RS .PD 0 .PP غیرفعال کردن گزینه restricted. .br تغییر دایرکتوری (به .IR cd (1) مراجعه کنید)، .br تنظیم یا حذف مقدار یا ویژگی‌های .SM .BR SHELL ، .SM .BR ENV ، .SM .BR FPATH یا .SM .BR PATH\*S ، .br مشخص کردن مسیر یا نام دستورات حاوی .BR / ، .br تغییر مسیر خروجی .RB ( > ، .BR >| ، .B <> و .BR >> ). .br افزودن یا حذف دستورهای توکار. .br استفاده از .B "command \-p" برای فراخوانی یک دستور. .PD .RE .PP محدودیت‌های فوق پس از تفسیر پرونده‌های \f3.profile\fP و .SM .B ENV اعمال می‌شوند. .PP هنگامی که دستوری که باید اجرا شود یک رویه شل (shell procedure) باشد، .if \nZ=0 \{.B rsh\^ دستور .I sh\^\} .if \nZ=1 \{.B rksh\^ دستور .I ksh\^\} .if \nZ=2 \{.B rksh93\^ دستور .I ksh93\^\} را برای اجرای آن فراخوانی می‌کند. بنابراین، می‌توان به کاربر نهایی رویه‌های شلی ارائه داد که به تمام توان شل استاندارد دسترسی دارند، در حالی که منوی محدودی از دستورها به او تحمیل می‌شود؛ این طرح فرض می‌کند که کاربر نهایی مجوز نوشتن و اجرا در همان دایرکتوری را ندارد. .PP اثر نهایی این قوانین این است که نویسنده .B .profile کنترل کاملی بر اقدامات کاربر دارد، چرا که تنظیمات تضمین‌شده را انجام داده و کاربر را در یک دایرکتوری مناسب (که احتمالاً دایرکتوری ورود .I نیست\^ ) قرار می‌دهد. .PP مدیر سیستم اغلب دایرکتوری‌ای از دستورها را راه‌اندازی می‌کند (مانند .BR /usr/rbin ) که می‌توانند با خیال راحت توسط .if \nZ=0 .BR rsh . .if \nZ=1 .BR rksh . .if \nZ=2 .BR rksh93 . فراخوانی شوند. .SH "وضعیت خروج (EXIT STATUS)" خطاهای شناسایی‌شده توسط شل، مانند خطاهای نحوی، باعث می‌شوند شل وضعیت خروج غیرصفر بازگرداند. اگر از شل به‌صورت غیرتعاملی استفاده شود، اجرای پرونده شل متوقف می‌شود مگر اینکه خطا در یک زیرشل (subshell) رخ دهد که در این صورت زیرشل متوقف می‌شود. در غیر این صورت، شل وضعیت خروج آخرین دستور اجرا شده را بازمی‌گرداند (به دستور .B exit در بالا نیز مراجعه کنید). خطاهای زمان اجرا که توسط شل شناسایی می‌شوند با چاپ نام دستور یا تابع و شرایط خطا گزارش می‌شوند. اگر شماره خطایی که خطا در آن رخ داده بزرگتر از یک باشد، شماره خط نیز در کروشه .RB ( "[]" ) بعد از نام دستور یا تابع چاپ می‌شود. .SH "فایل‌ها (FILES)" .TP .B /etc/profile پرونده مقداردهی اولیه سراسری سیستم، برای شل‌های ورود (login) اجرا می‌شود. .if \nZ=2 \{.br .TP .B /etc/ksh.kshrc پرونده راه‌اندازی سراسری سیستم، برای شل‌های تعاملی اجرا می‌شود. \} .TP .B \s-1$HOME\s+1/\f3.\fPprofile پرونده مقداردهی اولیه شخصی، برای شل‌های ورود پس از /etc/profile اجرا می‌شود. .TP .B \s-1$HOME\s+1/\f3.\fPkshrc پرونده مقداردهی اولیه شخصی پیش‌فرض، برای شل‌های تعاملی زمانی که .SM .B ENV تنظیم نشده باشد اجرا می‌شود. .TP .B /etc/suid_profile پرونده مقداردهی اولیه جایگزین، زمانی که شناسه‌های کاربری یا گروهی واقعی و موثر یکسان نباشند، به جای پرونده مقداردهی اولیه شخصی اجرا می‌شود. .TP .B /dev/null دستگاه NULL (پوچ) .SH "همچنین ببینید (SEE ALSO)" cat(1), cd(1), chmod(1), cut(1), date(1), egrep(1), echo(1), emacs(1), env(1), fgrep(1), gmacs(1), grep(1), newgrp(1), pfexec(1), stty(1), test(1), touch(1), umask(1), vi(1), dup(2), exec(2), fork(2), getpwnam(3), ioctl(2), lseek(2), paste(1), pathconf(2), pipe(2), sigsetinfo(2), sysconf(2), umask(2), ulimit(2), wait(2), wctrans(3), rand(3), a.out(5), profile(5), environ(7). .PP Morris I. Bolsky and David G. Korn, .IR "The New KornShell Command and Programming Language" , Prentice Hall, 1995. .PP .I "POSIX \- Part 2: Shell and Utilities," IEEE Std 1003.2-1992, ISO/IEC 9945-2, IEEE, 1993. .SH "هشدارها (CAVEATS)" .PP اگر دستوری اجرا شود و سپس دستوری با همان نام در دایرکتوری‌ای در مسیر جستجو پیش از دایرکتوری‌ای که دستور اصلی در آن پیدا شده بود نصب شود، شل همچنان به اجرای .RB ( exec\^ ) دستور اصلی ادامه خواهد داد. از گزینه .B \-t دستور .B alias\^ برای تصحیح این وضعیت استفاده کنید. .PP برخی اسکریپت‌های شل بسیار قدیمی حاوی .B ^ به عنوان مترادفی برای نویسه پایپ .BR \(bv هستند. .PP استفاده از دستور توکار .B hist\^ در یک دستور مرکب (compound command) باعث می‌شود کل دستور از پرونده تاریخچه ناپدید شود. .PP دستور توکار \f3\|.\fP \f2file\^\fP کل پرونده را قبل از اجرای هر دستوری می‌خواند. بنابراین، دستورهای .B alias و .B unalias موجود در پرونده روی دستورهای تعریف‌شده در همان پرونده اعمال نخواهند شد. .PP تله‌ها (Traps) در زمانی که یک کار (job) منتظر یک فرآیند پیش‌زمینه است، پردازش نمی‌شوند. بنابراین، یک تله روی .B CHLD تا زمانی که کار پیش‌زمینه خاتمه نیابد اجرا نخواهد شد. .PP ایده خوبی است که بعد از عملگر ویرگول در عبارات محاسباتی یک فاصله قرار دهید تا از تفسیر ویرگول به عنوان ممیز اعشاری در برخی محلی‌سازی‌ها (locales) جلوگیری شود.