.\" .\" MAN PAGE COMMENTS to .\" .\" Chet Ramey .\" Case Western Reserve University .\" chet.ramey@case.edu .\" .\" Last Change: Mon Apr 7 16:59:13 EDT 2025 .\" .\" For bash_builtins, strip all but "SHELL BUILTIN COMMANDS" section .\" For rbash, strip all but "RESTRICTED SHELL" section .\" .\" Both conditionalize text based on the base page being formatted .\" using the zZ and zY registers, respectively .\" .\" Ensure the registers are initialized to avoid groff warnings. .nr zZ +0 .nr zY +0 .\" Ensure the macros/strings are initialized to avoid groff warnings. .ds zZ \" empty .ds zY \" empty .if \n(zZ=1 .ig zZ .if \n(zY=1 .ig zY .TH BASH 1 "2025 April 7" "GNU Bash 5.3" .\" .ie \n(.g \{\ .ds ' \(aq .ds " \(dq .ds ^ \(ha .ds ~ \(ti .\} .el \{\ .ds ' ' .\" \*" is not usable in macro arguments on AT&T troff (DWB, Solaris 10) .ds " ""\" two adjacent quotes and no space before this comment .ds ^ ^ .ds ~ ~ .\} . .\" File Name macro. This used to be `.PN', for Path Name, .\" but Sun doesn't seem to like that very much. .\" \% at the beginning of the string protects the filename from hyphenation. .\" .de FN \%\fI\|\\$1\|\fP\\$2 .. .\" .\" Quotation macro: generate consistent quoted strings that don't rely .\" on the presence of the `CW' constant-width font. .\" .de Q .ie \n(.g \(lq\\$1\(rq\\$2 .el \{\ . if t ``\\$1''\\$2 . if n "\\$1"\\$2 .\} .. .\" Q but disallowing hyphenation of the string .de QN .ie \n(.g \%\(lq\\$1\(rq\\$2 .el \{\ . if t \%``\\$1''\\$2 . if n \%"\\$1"\\$2 .\} .. .SH "نام (NAME)" bash \- پوسته و مفسر زبان خط فرمان گنو (GNU Bourne-Again SHell) .SH "خلاصه دستور (SYNOPSIS)" .B bash [options] [command_string | file] .SH "حق نشر (COPYRIGHT)" .if n Bash is Copyright (C) 1989-2025 by the Free Software Foundation, Inc. .if t Bash is Copyright \(co 1989-2025 by the Free Software Foundation, Inc. .SH "توضیحات (DESCRIPTION)" .B Bash یک مفسر زبان فرمان است که دستورات خوانده‌شده از ورودی استاندارد، از یک رشته، یا از یک فایل را اجرا می‌کند. این یک پیاده‌سازی مجدد و توسعه‌یافته از پوسته Bourne است، مفسر تاریخی زبان فرمان یونیکس. .B Bash همچنین ویژگی‌های مفیدی را از پوسته‌های \fIKorn\fP و \fIC\fP (\fBksh\fP و \fBcsh\fP) در بر می‌گیرد. .PP .SM POSIX نام خانواده‌ای از استانداردهای محاسباتی مبتنی بر یونیکس است. .B Bash به گونه‌ای طراحی شده است که یک پیاده‌سازی منطبق بر بخش پوسته و ابزارهای مشخصات .SM POSIX موسسه IEEE (استاندارد IEEE 1003.1) باشد. حالت .SM POSIX در .B Bash (که از این پس به آن \fIposix mode\fP گفته می‌شود) رفتار پوسته را در جاهایی که عملکرد پیش‌فرض آن با استاندارد تفاوت دارد، تغییر می‌دهد تا دقیقاً با استاندارد مطابقت داشته باشد. برای ارجاع به سندی که جزئیات چگونگی تأثیر حالت posix بر رفتار \fBbash\fP را شرح می‌دهد، بخش .SM .B "همچنین ببینید (SEE ALSO)" در زیر را مشاهده کنید. .B Bash می‌تواند پیکربندی شود تا به صورت پیش‌فرض با .SM POSIX\c -سازگار باشد. .SH "گزینهها (OPTIONS)" تمام گزینه‌های تک‌نویسه‌ای پوسته که در توضیحات دستور توکار \fBset\fP مستند شده‌اند، از جمله \fB\-o\fP، می‌توانند در هنگام فراخوانی پوسته به عنوان گزینه استفاده شوند. علاوه بر این، \fBbash\fP گزینه‌های زیر را در هنگام فراخوانی تفسیر می‌کند: .PP .TP 10 .B \-c اگر گزینه .B \-c حضور داشته باشد، دستورات از اولین آرگومان غیرگزینه‌ای .IR command_string خوانده می‌شوند. اگر آرگومان‌هایی پس از .IR command_string وجود داشته باشند، اولین آرگومان به .B $0 اختصاص داده می‌شود و آرگومان‌های باقی‌مانده به پارامترهای مکانی تخصیص می‌یابند. انتساب به .B $0 نام پوسته را تعیین می‌کند که در پیام‌های هشدار و خطا استفاده می‌شود. .TP .B \-i اگر گزینه .B \-i حضور داشته باشد، پوسته .IR تعاملی (interactive) خواهد بود. .TP .B \-l باعث می‌شود .B bash به گونه‌ای عمل کند که گویی به عنوان یک پوسته ورود (login shell) فراخوانی شده است (بخش .SM .B "فراخوانی (INVOCATION)" در زیر را ببینید). .TP .B \-r اگر گزینه .B \-r حضور داشته باشد، پوسته .I محدود (restricted) می‌شود (بخش .SM .B "پوسته محدود (RESTRICTED SHELL)" در زیر را ببینید). .TP .B \-s اگر گزینه .B \-s حضور داشته باشد، یا اگر پس از پردازش گزینه‌ها هیچ آرگومانی باقی نماند، پوسته دستورات را از ورودی استاندارد می‌خواند. این گزینه اجازه می‌دهد تا پارامترهای مکانی در هنگام فراخوانی یک پوسته تعاملی یا هنگام خواندن ورودی از طریق پایپ تنظیم شوند. .TP .B \-D فهرستی از تمام رشته‌های داخل جفت‌گیومه (double-quoted) را که قبل از آن‌ها \fB$\fP آمده است، در خروجی استاندارد چاپ می‌کند. این‌ها رشته‌هایی هستند که وقتی لوکال (locale) فعلی \fBC\fP یا \fBPOSIX\fP نباشد، مشمول ترجمه زبانی می‌شوند. این گزینه متضمن گزینه \fB\-n\fP است؛ هیچ دستوری اجرا نخواهد شد. .TP .B [\-+]O [\fIshopt_option\fP] \fIshopt_option\fP یکی از گزینه‌های پوسته است که توسط دستور توکار \fBshopt\fP پذیرفته می‌شود (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر را ببینید). اگر \fIshopt_option\fP مشخص شده باشد، \fB\-O\fP مقدار آن گزینه را تنظیم (فعال) می‌کند؛ و \fB+O\fP آن را لغو تنظیم (غیرفعال) می‌کند. اگر \fIshopt_option\fP داده نشود، \fBbash\fP نام‌ها و مقادیر گزینه‌های پوسته‌ای را که توسط \fBshopt\fP پذیرفته می‌شوند در خروجی استاندارد چاپ می‌کند. اگر گزینه فراخوانی \fB+O\fP باشد، خروجی در قالبی نمایش داده می‌شود که بتوان دوباره از آن به عنوان ورودی استفاده کرد. .TP .B \-\- یک .B \-\- پایان گزینه‌ها را نشان می‌دهد و پردازش گزینه‌های بیشتر را غیرفعال می‌کند. هر شناسه یا آرگومانی بعد از .B \-\- به عنوان نام فایل اسکریپت پوسته (زیر را ببینید) و آرگومان‌های ارسالی به آن اسکریپت در نظر گرفته می‌شود. یک آرگومانِ .B \- معادل \fB\-\-\fP است. .PP .B Bash همچنین تعدادی گزینه چندنویسه‌ای (چندکاراکتری) را تفسیر می‌کند. این گزینه‌ها برای این که شناسایی شوند باید روی خط فرمان قبل از گزینه‌های تک‌نویسه‌ای ظاهر شوند. .PP .TP .B \-\-debugger ترتیبی می‌دهد که نمایه (پروفایل) اشکال‌زدا (debugger) قبل از شروع پوسته اجرا شود. حالت اشکال‌زدایی گسترش‌یافته را فعال می‌کند (توضیحات مربوط به گزینه .B extdebug برای دستور توکار .B shopt در زیر را ببینید). .TP .B \-\-dump\-po\-strings معادل \fB\-D\fP است، اما خروجی در قالب فایل .Q po (شیء قابل حمل یا portable object) گنو \fIgettext\fP است. .TP .B \-\-dump\-strings معادل \fB\-D\fP است. .TP .B \-\-help یک پیام راهنمای نحوه استفاده را در خروجی استاندارد نمایش می‌دهد و با موفقیت خارج می‌شود. .TP .PD 0 \fB\-\-init\-file\fP \fIfile\fP .TP \fB\-\-rcfile\fP \fIfile\fP .PD دستورات را از .I file به جای فایل راه‌اندازی شخصی استاندارد .FN \*~/.bashrc اجرا می‌کند، در صورتی که پوسته تعاملی باشد (بخش .SM .B "فراخوانی (INVOCATION)" در زیر را ببینید). .TP .B \-\-login معادل \fB\-l\fP است. .TP .B \-\-noediting هنگامی که پوسته تعاملی است، از کتابخانه .B readline گنو برای خواندن خطوط فرمان استفاده نمی‌کند. .TP .B \-\-noprofile نه فایل راه‌اندازی سرتاسری سیستم .FN /etc/profile و نه هیچ‌یک از فایل‌های راه‌اندازی شخصی .FN \*~/.bash_profile ، .FN \*~/.bash_login ، یا .FN \*~/.profile را نمی‌خواند. به طور پیشفرض، .B bash وقتی به عنوان یک پوسته ورود (login shell) فراخوانی می‌شود، این فایل‌ها را می‌خواند (بخش .SM .B "فراخوانی (INVOCATION)" در زیر را ببینید). .TP .B \-\-norc در صورتی که پوسته تعاملی باشد، فایل راه‌اندازی شخصی .FN \*~/.bashrc را نخوانده و اجرا نمی‌کند. این گزینه در صورتی که پوسته به عنوان .BR sh فراخوانی شود، به طور پیش‌فرض فعال است. .TP .B \-\-posix حالت posix را فعال می‌کند؛ رفتار \fBbash\fP را در مواردی که عملکرد پیش‌فرض با استاندارد .SM POSIX تفاوت دارد، تغییر می‌دهد تا با این استاندارد مطابقت یابد. .TP .B \-\-restricted پوسته محدود می‌شود (بخش .SM .B "پوسته محدود (RESTRICTED SHELL)" در زیر را ببینید). .TP .B \-\-verbose معادل \fB\-v\fP است. .TP .B \-\-version اطلاعات نسخه این نمونه از .B bash را در خروجی استاندارد نمایش داده و با موفقیت خارج می‌شود. .SH "شناسه‌ها (ARGUMENTS)" اگر پس از پردازش گزینه‌ها، شناسه‌هایی باقی بمانند و هیچ‌یک از گزینه‌های .B \-c یا .B \-s مشخص نشده باشند، نخستین شناسه به عنوان نام یک فایل حاوی دستورات پوسته (یک \fIاسکریپت پوسته\fP یا \fIshell script\fP) در نظر گرفته می‌شود. هنگامی که .B bash به این روش فراخوانی می‌شود، .B $0 برابر با نام فایل تنظیم شده، و پارامترهای مکانی برابر با شناسه‌های باقی‌مانده قرار می‌گیرند. .B Bash دستورات را از این فایل خوانده و اجرا می‌کند، سپس خارج می‌شود. وضعیت خروج \fBBash\fP همان وضعیت خروج آخرین دستور اجرا شده در اسکریپت است. اگر هیچ دستوری اجرا نشود، وضعیت خروج 0 است. .B Bash ابتدا تلاش می‌کند فایل را در دایرکتوری جاری باز کند، و در صورتی که فایلی یافت نشود، دایرکتوری‌های موجود در .SM .B PATH را برای یافتن اسکریپت جستجو می‌کند. .SH "فراخوانی (INVOCATION)" یک \fIپوسته ورود\fP (\fIlogin shell\fP) پوسته‌ای است که نخستین نویسه از آرگومان صفرم آن یک .BR \- باشد، یا با گزینه .B \-\-login شروع شده باشد. .PP یک \fIپوسته تعاملی\fP (\fIinteractive shell\fP) پوسته‌ای است که بدون شناسه‌های غیرگزینه‌ای شروع شده باشد (مگر اینکه \fB\-s\fP مشخص شده باشد) و بدون گزینه .B \-c باشد، و ورودی استاندارد و خطای استاندارد آن هر دو به ترمینال‌ها متصل باشند (همان‌طور که توسط .IR isatty (3) تعیین می‌شود)، یا پوسته‌ای که با گزینه .B \-i شروع شده باشد. .B Bash متغیر .SM .B PS1 را مقداردهی کرده و .B $\- شامل .B i خواهد بود اگر پوسته تعاملی باشد، تا یک اسکریپت پوسته یا یک فایل راه‌اندازی بتواند این وضعیت را بررسی کند. .PP پاراگراف‌های زیر توضیح می‌دهند که چگونه .B bash فایل‌های راه‌اندازی خود را اجرا می‌کند. اگر هر یک از فایل‌ها وجود داشته باشند اما قابل خواندن نباشند، .B bash یک خطا گزارش می‌کند. علامت تیلدا (Tilde) در نام‌ فایل‌ها همان‌طور که در زیر در بخش .B "بسط تیلدا (Tilde Expansion)" در بخش .SM .B "بسط (EXPANSION)" شرح داده شده است، بسط می‌یابد. .PP هنگامی که .B bash به‌عنوان یک پوستهٔ تعاملی لاگین (login shell) یا به‌عنوان یک پوستهٔ غیرتعاملی با گزینهٔ \fB\-\-login\fP فراخوانی می‌شود، ابتدا دستورات را از فایل .FN /etc/profile ، در صورت وجود، خوانده و اجرا می‌کند. پس از خواندن آن فایل، به ترتیب به دنبال .FN \*~/.bash_profile ، .FN \*~/.bash_login و .FN \*~/.profile می‌گردد و دستورات را از اولین فایلی که موجود و قابل خواندن باشد خوانده و اجرا می‌کند. گزینهٔ .B \-\-noprofile می‌تواند هنگام راه‌اندازی پوسته برای جلوگیری از این رفتار استفاده شود. .PP هنگامی که یک پوستهٔ تعاملی لاگین خارج می‌شود، یا یک پوستهٔ لاگین غیرتعاملی دستور توکار \fBexit\fP را اجرا می‌کند، .B bash دستورات را از فایل .FN \*~/.bash_logout ، در صورت وجود، خوانده و اجرا می‌کند. .PP هنگامی که یک پوستهٔ تعاملی که پوستهٔ لاگین نیست راه‌اندازی می‌شود، .B bash دستورات را از .FN \*~/.bashrc ، در صورت وجود، خوانده و اجرا می‌کند. گزینهٔ .B \-\-norc مانع از این رفتار می‌شود. گزینهٔ \fB\-\-rcfile\fP \fIfile\fP باعث می‌شود .B bash به جای .FN \*~/.bashrc از \fIfile\fP استفاده کند. .PP هنگامی که .B bash به‌صورت غیرتعاملی راه‌اندازی می‌شود، برای مثال برای اجرای یک اسکریپت پوسته، به دنبال متغیر .SM .B BASH_ENV در محیط می‌گردد، مقدار آن را در صورت وجود بسط می‌دهد و از مقدار بسط‌یافته به‌عنوان نام فایلی برای خواندن و اجرا کردن استفاده می‌کند. .B Bash به‌گونه‌ای رفتار می‌کند که گویی دستور زیر اجرا شده است: .PP .RS .EX if [ \-n \*"$BASH_ENV\*" ]; then . \*"$BASH_ENV\*"; fi .EE .RE .PP اما از مقدار متغیر .SM .B PATH برای جستجوی نام فایل استفاده نمی‌کند. .PP اگر .B bash با نام .BR sh فراخوانی شود، تلاش می‌کند تا رفتار راه‌اندازی نسخه‌های تاریخی .B sh را تا جای ممکن با دقت تقلید کند، در حالی که با استاندارد .SM POSIX نیز مطابقت دارد. هنگامی که به‌عنوان یک پوستهٔ تعاملی لاگین، یا یک پوستهٔ غیرتعاملی با گزینهٔ \fB\-\-login\fP فراخوانی می‌شود، ابتدا تلاش می‌کند دستورات را به ترتیب از .FN /etc/profile و .FN \*~/.profile خوانده و اجرا کند. گزینهٔ .B \-\-noprofile مانع از این رفتار می‌شود. هنگامی که به‌عنوان یک پوستهٔ تعاملی با نام .BR sh فراخوانی می‌شود، .B bash به دنبال متغیر .SM .BR ENV می‌گردد، در صورت تعریف بودن مقدار آن را بسط می‌دهد و از مقدار بسط‌یافته به‌عنوان نام فایلی برای خواندن و اجرا کردن استفاده می‌کند. از آنجا که پوسته‌ای که با نام .B sh فراخوانی شده تلاش نمی‌کند تا دستورات را از هیچ فایل راه‌اندازی دیگری بخواند و اجرا کند، گزینهٔ .B \-\-rcfile هیچ اثری ندارد. یک پوستهٔ غیرتعاملی که با نام .B sh فراخوانی می‌شود تلاش نمی‌کند تا هیچ فایل راه‌اندازی دیگری را بخواند. .PP هنگامی که به عنوان .BR sh فراخوانی می‌شود، .B bash پس از خواندن فایل‌های راه‌اندازی، وارد حالت posix می‌گردد. .PP هنگامی که .B bash در حالت posix آغاز به کار می‌کند، مانند زمانی که با گزینه خط فرمان .B \-\-posix اجرا می‌شود، از استاندارد .SM POSIX برای فایل‌های راه‌اندازی پیروی می‌کند. در این حالت، پوسته‌های تعاملی متغیر .SM .B ENV را بسط داده و دستورات را از فایلی که نام آن همان مقدار بسط‌یافته است، خوانده و اجرا می‌کنند. هیچ فایل راه‌اندازی دیگری خوانده نمی‌شود. .PP .B Bash تلاش می‌کند تشخیص دهد که چه زمانی ورودی استاندارد آن به یک اتصال شبکه‌ای متصل است، مانند زمانی که توسط دیمن قدیمی و به ندرت دیده‌شده‌ی پوسته از راه دور، معمولاً \fIrshd\fP، یا دیمن پوسته امن \fIsshd\fP اجرا شده باشد. اگر .B bash تشخیص دهد که به این شیوه و به صورت غیرتعاملی اجرا می‌شود، در صورت وجود داشتن و قابل خواندن بودن فایل .FN \*~/.bashrc ، دستورات را از آن خوانده و اجرا می‌کند. .B Bash در صورتی که به عنوان \fBsh\fP فراخوانی شده باشد این فایل را نمی‌خواند. گزینه .B \-\-norc از این رفتار جلوگیری می‌کند، و گزینه .B \-\-rcfile باعث می‌شود که \fBbash\fP به جای .FN \*~/.bashrc از فایل دیگری استفاده کند، اما معمولاً نه \fIrshd\fP و نه \fIsshd\fP پوسته را با این گزینه‌ها فراخوانی نمی‌کنند و اجازه مشخص کردن آن‌ها را نیز نمی‌دهند. .PP اگر پوسته در حالتی آغاز به کار کند که شناسه کاربری (گروهی) موثر آن برابر با شناسه کاربری (گروهی) واقعی نباشد، و گزینه \fB\-p\fP ارائه نشده باشد، هیچ فایل راه‌اندازی خوانده نمی‌شود، توابع پوسته از محیط به ارث برده نمی‌شوند، متغیرهای .SM .BR SHELLOPTS ، .SM .BR BASHOPTS ، .SM .BR CDPATH و .SM .B GLOBIGNORE در صورت وجود در محیط نادیده گرفته می‌شوند، و شناسه کاربری موثر به شناسه کاربری واقعی تنظیم می‌شود. اگر گزینه \fB\-p\fP هنگام فراخوانی ارائه شده باشد، رفتار راه‌اندازی یکسان خواهد بود، اما شناسه کاربری موثر بازنشانی نمی‌گردد. .SH "تعاریف (DEFINITIONS)" تعاریف زیر در سراسر این سند مورد استفاده قرار می‌گیرند. .PD 0 .TP .B blank یک نویسه فاصله (space) یا تب (tab). .TP .B whitespace نویسه‌ای که در لوکال فعلی متعلق به کلاس نویسه‌ای \fBspace\fP باشد، یا تابعی مانند \fIisspace\fP(3) برای آن مقدار درستی برگرداند. .TP .B word دنباله‌ای از نویسه‌ها که توسط پوسته به عنوان یک واحد مجزا در نظر گرفته می‌شود. همچنین با عنوان .BR token (نشانه) نیز شناخته می‌شود. .TP .B name یک .I word که تنها شامل نویسه‌های الفبایی-عددی و زیرخط (underscore) بوده، و با یک نویسه الفبایی یا زیرخط آغاز می‌شود. همچنین به عنوان .BR identifier (شناسه) نیز از آن یاد می‌شود. .TP .B metacharacter نویسه‌ای که در صورت عدم قرارگیری در نقل‌قول، کلمات را از یکدیگر جدا می‌کند. یکی از موارد زیر: .br .RS .PP .if t \fB| & ; ( ) < > space tab newline\fP .if n \fB| & ; ( ) < > space tab newline\fP .RE .TP .B "عملگر کنترلی (control operator)" یک \fIنشانه (token)\fP که یک تابع کنترلی را انجام می‌دهد. این عملگر یکی از نمادهای زیر است: .RS .PP .if t \fB|| & && ; ;; ;& ;;& ( ) | |& \fP .if n \fB|| & && ; ;; ;& ;;& ( ) | |& \fP .RE .PD .SH "کلمات رزرو شده (RESERVED WORDS)" \fIکلمات رزرو شده\fP کلماتی هستند که برای پوسته معنای ویژه‌ای دارند. کلمات زیر در صورتی که نقل‌قول نشده باشند و کلمه اول یک دستور باشند (به .SM .B "گرامر پوسته (SHELL GRAMMAR)" در زیر مراجعه کنید)، کلمه سوم یک دستور .B case یا .B select باشند (تنها \fBin\fP معتبر است)، یا کلمه سوم یک دستور .B for باشند (تنها \fBin\fP و \fBdo\fP معتبر هستند) به عنوان کلمات رزرو شده شناخته می‌شوند: .if t .RS .PP .B .if n ! case coproc do done elif else esac fi for function if in select \ then until while { } time [[ ]] .if t ! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]] .if t .RE .SH "گرامر پوسته (SHELL GRAMMAR)" این بخش نحو شکل‌های مختلف دستورات پوسته را شرح می‌دهد. .SS دستورات ساده (Simple Commands) یک \fIdestور ساده (simple command)\fP دنباله‌ای از انتساب‌های اختیاری متغیر است که با کلمات جدا شده با \fBنویسه خالی (blank)\fP و تغییر مسیرها دنبال می‌شود، و با یک \fIعملگر کنترلی\fP خاتمه می‌یابد. کلمه اول دستوری را که باید اجرا شود مشخص می‌کند و به عنوان آرگومان صفر ارسال می‌شود. کلمات باقی‌مانده به عنوان آرگومان به دستور فراخوانی‌شده ارسال می‌شوند. .PP مقدار بازگشتی یک \fIدستور ساده\fP، وضعیت خروج آن است، یا 128+\fIn\^\fP در صورتی که دستور با سیگنال .IR n خاتمه یافته باشد. .SS خطوط لوله (Pipelines) یک \fIخط لوله (pipeline)\fP دنباله‌ای از یک یا چند دستور است که توسط یکی از عملگرهای کنترلی .B | یا \fB|&\fP جدا شده‌اند. قالب یک خط لوله به صورت زیر است: .RS .PP [\fBtime\fP [\fB\-p\fP]] [ ! ] \fIcommand1\fP [ [\fB|\fP\(bv\fB|&\fP] \fIcommand2\fP .\|.\|.\& ] .RE .PP خروجی استاندارد .I command1 از طریق یک لوله (pipe) به ورودی استاندارد .IR command2 متصل می‌شود. این اتصال پیش از هرگونه تغییر مسیر مشخص‌شده توسط .IR command1 انجام می‌شود (به .SM .B "تغییر مسیر (REDIRECTION)" در زیر مراجعه کنید). اگر \fB|&\fP عملگر خط لوله باشد، علاوه بر خروجی استاندارد، خطای استاندارد \fIcommand1\fP نیز از طریق لوله به ورودی استاندارد \fIcommand2\fP متصل می‌شود؛ این یک شیوه خلاصه‌نویسی برای \fB2>&1 |\fP است. این تغییر مسیر ضمنی خطای استاندارد به خروجی استاندارد، پس از هرگونه تغییر مسیر مشخص‌شده توسط \fIcommand1\fP انجام می‌شود. .PP وضعیت بازگشتی یک خط لوله برابر با وضعیت خروج آخرین دستور است، مگر اینکه گزینه \fBpipefail\fP فعال باشد. اگر \fBpipefail\fP فعال باشد، وضعیت بازگشتی خط لوله برابر با مقدار آخرین (راست‌ترین) دستوری است که با وضعیت غیرصفر خارج شده است، یا صفر خواهد بود اگر تمام دستورات با موفقیت خارج شوند. اگر کلمه رزرو شده .B ! پیش از یک خط لوله قرار گیرد، وضعیت خروج آن خط لوله نقیض منطقی وضعیت خروج توصیف‌شده در بالا خواهد بود. اگر یک خط لوله به صورت همگام اجرا شود، پوسته پیش از بازگرداندن یک مقدار، منتظر می‌ماند تا تمام دستورات موجود در خط لوله خاتمه یابند. .PP اگر کلمه رزرو شده .B time پیش از یک خط لوله قرار گیرد، پوسته در هنگام خاتمه خط لوله، زمان سپری‌شده و همچنین زمان مصرف‌شده کاربری و سیستمی اجرای آن را گزارش می‌دهد. گزینه \fB\-p\fP قالب خروجی را به قالبی که توسط .SM POSIX\c \& مشخص شده تغییر می‌دهد. هنگامی که پوسته در حالت posix قرار دارد، در صورتی که نشانه بعدی با یک .Q \- آغاز شود، \fBtime\fP را به عنوان کلمه رزرو شده نمی‌شناسد. مقدار متغیر .SM .B TIMEFORMAT یک رشته قالبی است که نحوه نمایش اطلاعات زمان‌بندی را مشخص می‌کند؛ شرح .SM .B TIMEFORMAT را در زیر تحت عنوان .BR "متغیرهای پوسته (Shell Variables)" ببینید. .PP هنگامی که پوسته در حالت posix باشد، \fBtime\fP ممکن است به تنهایی به عنوان تنها کلمه در یک دستور ساده ظاهر شود. در این حالت، پوسته مجموع زمان کاربر و سیستم مصرف شده توسط پوسته و فرزندان آن را نمایش می‌دهد. متغیر .SM .B TIMEFORMAT قالب اطلاعات زمان را مشخص می‌کند. .PP هر دستور در یک خط لوله چند دستوره، جایی که لوله‌ها ایجاد می‌شوند، در یک \fIsubshell\fP (زیرپوسته) اجرا می‌شود که یک فرایند مجزا است. بخش .SM .B "محیط اجرای دستور (COMMAND EXECUTION ENVIRONMENT)" را برای شرح زیرپوسته‌ها و محیط زیرپوسته ببینید. اگر گزینه \fBlastpipe\fP با استفاده از دستور توکار \fBshopt\fP فعال شده باشد (شرح \fBshopt\fP را در زیر ببینید)، و مدیریت کارها فعال نباشد، آخرین عنصر یک خط لوله ممکن است توسط فرایند پوسته اجرا شود. .SS لیست‌ها (Lists) یک \fIlist\fP (لیست) دنباله‌ای از یک یا چند خط لوله است که با یکی از عملگرهای .BR ; ، .BR & ، .BR && ، یا .BR || جدا شده‌اند، و به صورت اختیاری با یکی از .BR ; ، .BR & ، یا .BR خاتمه می‌یابند. .PP از بین این عملگرهای لیست، .B && و .B || تقدم یکسانی دارند، و پس از آن‌ها .B ; و .BR & قرار دارند که آن‌ها نیز تقدم برابری دارند. .PP دنباله‌ای از یک یا چند خط جدید ممکن است در یک \fIlist\fP به جای یک نقطه‌ویرگول (semicolon) برای جداسازی دستورات ظاهر شود. .PP اگر دستوری با عملگر کنترلی .BR & پایان یابد، پوسته دستور را در \fIپس‌زمینه\fP در یک زیرپوسته اجرا می‌کند. پوسته منتظر پایان دستور نمی‌ماند، و وضعیت بازگشتی 0 است. به این‌ها دستورات \fIناهمگام\fP (asynchronous) گفته می‌شود. دستوراتی که با یک .B ; از هم جدا شده‌اند به صورت متوالی اجرا می‌شوند؛ پوسته به نوبت منتظر پایان هر دستور می‌ماند. وضعیت بازگشتی برابر با وضعیت خروج آخرین دستور اجرا شده است. .PP لیست‌های AND و OR دنباله‌هایی از یک یا چند خط لوله هستند که به ترتیب با عملگرهای کنترلی \fB&&\fP و \fB||\fP جدا شده‌اند. لیست‌های AND و OR با خاصیت شرکت‌پذیری از چپ اجرا می‌شوند. یک لیست AND به شکل زیر است: .RS .PP \fIcommand1\fP \fB&&\fP \fIcommand2\fP .RE .PP .I command2 اجرا می‌شود اگر، و تنها اگر، .I command1 وضعیت خروج صفر (موفقیت‌آمیز) را برگرداند. .PP یک لیست OR به شکل زیر است: .RS .PP \fIcommand1\fP \fB||\fP \fIcommand2\fP .RE .PP .I command2 اجرا می‌شود اگر، و تنها اگر، .I command1 وضعیت خروج غیرصفر را برگرداند. وضعیت بازگشتی لیست‌های AND و OR برابر با وضعیت خروج آخرین دستور اجرا شده در لیست است. .SS دستورات مرکب (Compound Commands) یک \fIcompound command\fP (دستور مرکب) یکی از موارد زیر است. در اغلب موارد یک \fIlist\fP در توضیحات دستور ممکن است با یک یا چند خط جدید از بقیه دستور جدا شود، و ممکن است به جای یک نقطه‌ویرگول با یک خط جدید دنبال شود. .TP (\fIlist\fP) \fIlist\fP در یک زیرپوسته (subshell) اجرا می‌شود (برای شرح محیط زیرپوسته، .SM .B "محیط اجرای دستور (COMMAND EXECUTION ENVIRONMENT)" در زیر را ببینید). انتساب‌های متغیر و دستورات توکاری که بر محیط پوسته تأثیر می‌گذارند پس از تکمیل دستور پابرجا نمی‌مانند. وضعیت بازگشتی، همان وضعیت خروج \fIlist\fP است. .TP { \fIlist\fP; } \fIlist\fP در محیط فعلی پوسته اجرا می‌شود. \fIlist\fP باید با یک خط جدید یا یک نقطه‌ویرگول خاتمه یابد. این ساختار به عنوان یک \fIgroup command\fP (دستور گروهی) شناخته می‌شود. وضعیت بازگشتی، همان وضعیت خروج \fIlist\fP است. .IP توجه داشته باشید که برخلاف نویسه‌های کنترلی (metacharacters) \fB(\fP و \fB)\fP، \fB{\fP و \fB}\fP جزو \fIکلمات رزرو شده (reserved words)\fP هستند و باید در جایی قرار گیرند که شناسایی یک کلمه رزرو شده مجاز باشد. از آنجا که این نویسه‌ها باعث شکستن کلمه (word break) نمی‌شوند، باید با فاصله خالی یا یک نویسه کنترلی دیگرِ پوسته از \fIlist\fP جدا شوند. .TP ((\fIexpression\fP)) عبارت حسابی \fIexpression\fP طبق قوانینی که در بخش .SM .BR "ارزیابی حسابی (ARITHMETIC EVALUATION)" در زیر شرح داده شده ارزیابی می‌شود. اگر مقدار عبارت غیرصفر باشد، وضعیت بازگشتی 0 است؛ در غیر این صورت وضعیت بازگشتی 1 خواهد بود. عبارت \fIexpression\fP دقیقاً متحمل همان بسط‌هایی می‌شود که گویی درون علامت‌های نقل‌قول دوتایی قرار دارد، اما نویسه‌های نقل‌قول دوتاییِ اسکیپ‌نشده در \fIexpression\fP به‌طور ویژه پردازش نمی‌شوند و حذف می‌گردند. از آنجا که این امر می‌تواند منجر به رشته‌های خالی شود، این دستور با آن‌ها مانند عباراتی که به 0 ارزیابی می‌شوند رفتار می‌کند. .TP \fB[[\fP \fIexpression\fP \fB]]\fP .PD عبارت شرطی \fIexpression\fP را ارزیابی کرده و وضعیت صفر (true) یا غیرصفر (false) را بازمی‌گرداند. عبارت‌ها از موارد پایه‌ای (primaries) که در زیر تحت بخش .SM .BR "عبارات شرطی (CONDITIONAL EXPRESSIONS)" شرح داده شده‌اند، تشکیل می‌شوند. کلمات بین \fB[[\fP و \fB]]\fP دستخوش تفکیک کلمات (word splitting) و بسط نام مسیر (pathname expansion) نمی‌شوند. پوسته بسط تیلدا، بسط پارامتر و متغیر، بسط حسابی، جایگزینی دستور، جایگزینی فرآیند و حذف نقل‌قول را روی آن کلمات انجام می‌دهد. عملگرهای شرطی مانند \fB\-f\fP نباید نقل‌قول شده باشند تا به‌عنوان عملگرهای پایه شناسایی شوند. .IP هنگام استفاده با \fB[[\fP، عملگرهای \fB<\fP و \fB>\fP با استفاده از لوکال فعلی (current locale) به‌صورت الفبایی مرتب‌سازی می‌کنند. .IP هنگامی که عملگرهای \fB==\fP و \fB!=\fP استفاده می‌شوند، رشته سمت راست عملگر به‌عنوان یک الگو در نظر گرفته شده و طبق قوانین شرح داده شده در بخش \fBتطبیق الگو (Pattern Matching)\fP مطابقت داده می‌شود، گویی گزینه پوسته‌ای \fBextglob\fP فعال است. عملگر \fB=\fP معادل \fB==\fP است. اگر گزینه پوسته‌ای .B nocasematch فعال باشد، تطبیق بدون در نظر گرفتن بزرگی و کوچکی حروف الفبایی انجام می‌شود. مقدار بازگشتی در صورتی که رشته با الگو مطابقت داشته باشد (\fB==\fP) یا نداشته باشد (\fB!=\fP)، 0 و در غیر این صورت 1 است. اگر هر بخشی از الگو نقل‌قول شده باشد، بخش نقل‌قول شده به‌عنوان یک رشته تطبیق داده می‌شود: هر نویسه در بخش نقل‌قول‌شده تنها با خودش تطبیق می‌یابد، به جای اینکه معنای ویژه تطبیق الگو داشته باشد. .IP عملگر دودویی دیگری نیز به نام \fB=\*~\fP در دسترس است که اولویتی یکسان با \fB==\fP و \fB!=\fP دارد. هنگامی که استفاده می‌شود، رشته سمت راست عملگر به‌عنوان یک .SM POSIX عبارت باقاعده گسترش‌یافته (extended regular expression) در نظر گرفته شده و بر این اساس مطابقت می‌یابد (با استفاده از رابط‌های .SM POSIX \fIregcomp\fP و \fIregexec\fP که معمولاً در .IR regex (3) شرح داده شده‌اند). مقدار بازگشتی در صورتی که رشته با الگو مطابقت کند 0 و در غیر این صورت 1 است. اگر عبارت باقاعده از نظر نحوی نادرست باشد، مقدار بازگشتی عبارت شرطی 2 خواهد بود. اگر گزینه پوسته‌ای .B nocasematch فعال باشد، تطبیق بدون در نظر گرفتن بزرگی و کوچکی حروف الفبایی انجام می‌شود. .IP اگر هر بخشی از الگو نقل‌قول شده باشد، بخش نقل‌قول‌شده عیناً (literally) تطبیق داده می‌شود، همان‌طور که در بالا ذکر شد. اگر الگو در یک متغیر پوسته ذخیره شده باشد، نقل‌قول کردن بسط متغیر باعث می‌شود که کل الگو به‌صورت لفظی و عینی تطبیق داده شود. با عبارات براکتی (bracket expressions) در عبارات باقاعده با احتیاط رفتار کنید، زیرا نویسه‌های نقل‌قول معمولی و الگو معنای خود را در میان براکت‌ها از دست می‌دهند. .IP اگر الگو با هر بخشی از رشته مطابقت کند، تطبیق موفقیت‌آمیز است. برای وادار کردن آن به تطبیق با کل رشته، الگو را با استفاده از عملگرهای عبارت باقاعده \fB\*^\fP و \fB$\fP مهار (anchor) کنید. .IP متغیر آرایه‌ای .SM .B BASH_REMATCH ثبت می‌کند که کدام بخش‌های رشته با الگو تطبیق یافته‌اند. عنصر .SM .B BASH_REMATCH با اندیس 0 شامل بخشی از رشته است که با کل عبارت باقاعده مطابقت یافته است. زیررشته‌های تطبیق‌یافته توسط زیرعبارت‌های درون پرانتز در عبارت باقاعده، در اندیس‌های باقی‌مانده .SM .B BASH_REMATCH ذخیره می‌شوند. عنصر .SM .B BASH_REMATCH با اندیس \fIn\fP بخشی از رشته است که با \fIn\fPـمین زیرعبارت پرانتزدار مطابقت یافته است. \fBBash\fP متغیر .SM .B BASH_REMATCH را در دامنه سراسری (global scope) تنظیم می‌کند؛ اعلان آن به‌عنوان یک متغیر محلی (local) منجر به نتایج غیرمنتظره خواهد شد. .IP عبارت‌ها را می‌توان با استفاده از عملگرهای زیر با یکدیگر ترکیب کرد که به ترتیب کاهش اولویت فهرست شده‌اند: .IP .RS .PD 0 .TP .B ( \fIexpression\fP ) مقدار \fIexpression\fP را برمی‌گرداند. از این ساختار می‌توان برای لغو و تغییر اولویت معمول عملگرها استفاده کرد. .TP .B ! \fIexpression\fP درست است اگر .I expression نادرست باشد. .TP \fIexpression1\fP \fB&&\fP \fIexpression2\fP درست است اگر هم .I expression1 و هم .I expression2 درست باشند. .TP \fIexpression1\fP \fB||\fP \fIexpression2\fP درست است اگر حداقل یکی از .I expression1 یا .I expression2 درست باشد. .PD .LP عملگرهای \fB&&\fP و \fB||\fP در صورتی که مقدار \fIexpression1\fP برای تعیین مقدار بازگشتی کل عبارت شرطی کافی باشد، \fIexpression2\fP را ارزیابی نمی‌کنند. .RE .TP \fBfor\fP \fIname\fP [ [ \fBin\fP \fIword .\|.\|.\&\fP ] ; ] \fBdo\fP \fIlist\fP ; \fBdone\fP ابتدا، فهرست کلمات پس از \fBin\fP بسط داده می‌شود و فهرستی از آیتم‌ها ایجاد می‌گردد. سپس، متغیر \fIname\fP به نوبت برابر با هر یک از اعضای این فهرست قرار می‌گیرد و \fIlist\fP در هر بار اجرا می‌شود. اگر \fBin\fP \fIword\fP حذف شود، دستور \fBfor\fP فهرست \fIlist\fP را یک بار به ازای هر پارامتر مکانیِ تنظیم‌شده اجرا می‌کند (بخش .SM .B "پارامترها (PARAMETERS)" در زیر را ببینید). وضعیت بازگشتی برابر با وضعیت خروج آخرین دستور اجراشده است. اگر بسط آیتم‌های پس از \fBin\fP منجر به یک فهرست خالی شود، هیچ دستوری اجرا نمی‌شود و وضعیت بازگشتی 0 خواهد بود. .TP \fBfor\fP (( \fIexpr1\fP ; \fIexpr2\fP ; \fIexpr3\fP )) [;] \fBdo\fP \fIlist\fP ; \fBdone\fP ابتدا، عبارت حسابی \fIexpr1\fP مطابق با قواعد شرح‌داده‌شده در زیر تحت .SM .BR "ارزیابی حسابی (ARITHMETIC EVALUATION)" ارزیابی می‌شود. سپس، عبارت حسابی \fIexpr2\fP به طور مکرر ارزیابی می‌گردد تا زمانی که مقدار آن برابر با صفر شود. هر بار که \fIexpr2\fP به یک مقدار غیر صفر ارزیابی شود، \fIlist\fP اجرا شده و عبارت حسابی \fIexpr3\fP ارزیابی می‌شود. اگر هر یک از عبارت‌ها حذف شود، رفتاری مشابه ارزیابی شدن به ۱ خواهد داشت. مقدار بازگشتی برابر با وضعیت خروج آخرین دستور اجراشده در \fIlist\fP است، یا در صورتی که هر یک از عبارت‌ها نامعتبر باشد، یک مقدار غیر صفر خواهد بود. .IP از دستورات توکار \fBbreak\fP و \fPcontinue\fP (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر را ببینید) برای کنترل اجرای حلقه استفاده کنید. .TP \fBselect\fP \fIname\fP [ \fBin\fP \fIword\fP ] ; \fBdo\fP \fIlist\fP ; \fBdone\fP ابتدا، فهرست کلمات پس از \fBin\fP بسط داده می‌شود، فهرستی از آیتم‌ها تولید می‌گردد، و مجموعه کلمات بسط‌یافته روی خطای استاندارد چاپ می‌شود، در حالی که پیش از هر کدام یک عدد قرار می‌گیرد. اگر \fBin\fP \fIword\fP حذف شود، پارامترهای مکانی چاپ می‌شوند (بخش .SM .B "پارامترها (PARAMETERS)" در زیر را ببینید). سپس \fBselect\fP اعلانِ .SM .B PS3 را نمایش داده و یک خط از ورودی استاندارد می‌خواند. اگر خط شامل عددی منطبق بر یکی از کلمات نمایش‌داده‌شده باشد، آنگاه \fBselect\fP مقدار .I name را برابر با آن کلمه قرار می‌دهد. اگر خط خالی باشد، \fBselect\fP کلمات و اعلان را دوباره نمایش می‌دهد. اگر EOF خوانده شود، \fBselect\fP خاتمه یافته و 1 را برمی‌گرداند. هر مقدار دیگری، مقدار .I name را به تهی (null) تنظیم می‌کند. خط خوانده‌شده در متغیر .SM .BR REPLY ذخیره می‌شود. فهرست .I list پس از هر انتخاب اجرا می‌شود تا زمانی که یک دستور .B break اجرا شود. وضعیت خروج .B select برابر با وضعیت خروج آخرین دستور اجراشده در .IR list است، یا اگر هیچ دستوری اجرا نشده باشد، صفر خواهد بود. .TP \fBcase\fP \fIword\fP \fBin\fP [ [(] \fIpattern\fP [ \fB|\fP \fIpattern\fP ] \ .\|.\|.\& ) \fIlist\fP ;; ] .\|.\|.\& \ \fBesac\fP دستور \fBcase\fP ابتدا \fIword\fP را بسط می‌دهد و تلاش می‌کند آن را به نوبت با هر \fIpattern\fP تطبیق دهد، حرکت از اولین تا آخرین الگو انجام می‌شود، با استفاده از قواعد تطبیق شرح داده شده ذیل .B "Pattern Matching" در زیر. یک لیست الگو مجموعه‌ای از یک یا چند الگو است که با \| جدا شده‌اند، و عملگر ) به لیست الگو خاتمه می‌دهد. کلمه \fIword\fP با استفاده از بسط تیلدا، بسط پارامتر و متغیر، بسط حسابی، جایگزینی دستور، جایگزینی فرآیند و حذف نقل‌قول بسط داده می‌شود. هر \fIpattern\fP بررسی شده با استفاده از بسط تیلدا، بسط پارامتر و متغیر، بسط حسابی، جایگزینی دستور، جایگزینی فرآیند و حذف نقل‌قول بسط داده می‌شود. اگر گزینه پوسته .B nocasematch فعال باشد، تطبیق بدون در نظر گرفتن بزرگی و کوچکی حروف الفبایی انجام می‌شود. یک \fIclause\fP یک لیست الگو و یک \fIlist\fP مرتبط است. .IP هنگامی که یک تطبیق یافت شد، \fBcase\fP دستور \fIlist\fP متناظر را اجرا می‌کند. اگر عملگر \fB;;\fP به عبارت case خاتمه دهد، دستور \fBcase\fP پس از اولین تطبیق به پایان می‌رسد. استفاده از \fB;&\fP به جای \fB;;\fP باعث می‌شود اجرای دستورات با \fIlist\fP مرتبط با لیست الگوی بعدی ادامه یابد. استفاده از \fB;;&\fP به جای \fB;;\fP باعث می‌شود پوسته لیست الگوی بعدی در دستور را (در صورت وجود) آزمایش کند و در صورت موفقیت‌آمیز بودن تطبیق، هر \fIlist\fP مرتبط را اجرا کند، و اجرای دستور case را به گونه‌ای ادامه دهد که گویی لیست الگو تطبیق نیافته است. اگر هیچ الگویی تطبیق پیدا نکند، وضعیت خروج صفر است. .IP در غیر این صورت، وضعیت خروج برابر با وضعیت خروج آخرین دستور اجرا شده در آخرین \fIlist\fP اجرا شده است. .TP \fBif\fP \fIlist\fP; \fBthen\fP \fIlist\fP; \ [ \fBelif\fP \fIlist\fP; \fBthen\fP \fIlist\fP; ] .\|.\|.\& \ [ \fBelse\fP \fIlist\fP; ] \fBfi\fP ابتدا .B if .I list اجرا می‌شود. اگر وضعیت خروج آن صفر باشد، \fBthen\fP \fIlist\fP اجرا می‌شود. در غیر این صورت، هر \fBelif\fP \fIlist\fP به نوبت اجرا می‌شود، و اگر وضعیت خروج آن صفر باشد، \fBthen\fP \fIlist\fP متناظر اجرا شده و دستور خاتمه می‌یابد. در غیر این صورت، \fBelse\fP \fIlist\fP (در صورت وجود) اجرا می‌شود. وضعیت خروج برابر با وضعیت خروج آخرین دستور اجرا شده است، یا صفر اگر هیچ شرطی درست ارزیابی نشود. .TP \fBwhile\fP \fIlist-1\fP; \fBdo\fP \fIlist-2\fP; \fBdone\fP .PD 0 .TP \fBuntil\fP \fIlist-1\fP; \fBdo\fP \fIlist-2\fP; \fBdone\fP .PD دستور \fBwhile\fP تا زمانی که آخرین دستور در لیست \fIlist-1\fP وضعیت خروج صفر را برگرداند، به طور مداوم لیست \fIlist-2\fP را اجرا می‌کند. دستور \fBuntil\fP کاملاً مشابه دستور \fBwhile\fP است، با این تفاوت که آزمایش نقیض شده است: .I list-2 تا زمانی که آخرین دستور در .I list-1 وضعیت خروج غیر صفر برگرداند اجرا می‌شود. وضعیت خروج دستورات \fBwhile\fP و \fBuntil\fP برابر با وضعیت خروج آخرین دستور اجرا شده در \fIlist-2\fP است، یا در صورتی که هیچ دستوری اجرا نشده باشد صفر خواهد بود. .SS هم‌روندها (Coprocesses) یک \fIهم‌روند (coprocess)\fP یک دستور پوسته است که کلمه رزرو شده \fBcoproc\fP پیش از آن قرار می‌گیرد. یک هم‌روند به صورت ناهمگام در یک زیرپوسته (subshell) اجرا می‌شود، گویی که دستور با عملگر کنترلی \fB&\fP پایان یافته است، همراه با یک لوله دوطرفه که بین پوسته در حال اجرا و هم‌روند برقرار شده است. .PP نحو یک هم‌روند به صورت زیر است: .RS .PP \fBcoproc\fP [\fINAME\fP] \fIcommand\fP [\fIredirections\fP] .RE .PP این دستور یک هم‌روند با نام \fINAME\fP ایجاد می‌کند. \fIcommand\fP می‌تواند یک دستور ساده یا یک دستور مرکب باشد (به بخش بالا مراجعه کنید). \fINAME\fP نام یک متغیر پوسته است. اگر \fINAME\fP ارائه نشود، نام پیش‌فرض \fBCOPROC\fP است. .PP شکل توصیه‌شده برای استفاده از یک هم‌روند (coprocess) عبارت است از .RS .PP \fBcoproc\fP \fINAME\fP { \fIcommand\fP [\fIredirections\fP]; } .RE .PP این شکل ترجیح داده می‌شود زیرا در دستورات ساده نام هم‌روند همواره \fBCOPROC\fP خواهد بود، و استفاده از آن ساده‌تر و نسبت به سایر دستورات مرکب کامل‌تر است. .PP اگر \fIcommand\fP یک دستور مرکب باشد، تعیین \fINAME\fP اختیاری است. کلمه‌ای که پس از \fBcoproc\fP می‌آید تعیین می‌کند که آیا آن کلمه به عنوان یک نام متغیر تفسیر شود یا خیر: در صورتی که یک کلمه رزرو شده که آغازگر یک دستور مرکب است نباشد، به عنوان \fINAME\fP تفسیر می‌شود. اگر \fIcommand\fP یک دستور ساده باشد، استفاده از \fINAME\fP مجاز نیست؛ این امر برای جلوگیری از اشتباه گرفتن \fINAME\fP با نخستین کلمه دستور ساده است. .PP هنگامی که هم‌روند اجرا می‌شود، پوسته یک متغیر آرایه‌ای (به .B آرایه‌ها (Arrays) در زیر مراجعه کنید) به نام \fINAME\fP در بستر پوسته در حال اجرا ایجاد می‌کند. خروجی استاندارد .I command از طریق یک لوله (pipe) به یک توصیف‌کننده فایل در پوسته در حال اجرا متصل می‌شود، و آن توصیف‌کننده فایل به \fINAME\fP[0] اختصاص می‌یابد. ورودی استاندارد .I command از طریق یک لوله به یک توصیف‌کننده فایل در پوسته در حال اجرا متصل می‌شود، و آن توصیف‌کننده فایل به \fINAME\fP[1] اختصاص می‌یابد. این لوله پیش از هرگونه تغییر مسیری که توسط دستور مشخص شده برقرار می‌شود (به .SM .B تغییر مسیر (REDIRECTION) در زیر مراجعه کنید). توصیف‌کننده‌های فایل را می‌توان با استفاده از بسط‌های استاندارد کلمه، به عنوان آرگومان‌های دستورات پوسته و تغییر مسیرها به کار برد. به غیر از مواردی که برای اجرای جایگزینی دستور و فرایند ایجاد می‌شوند، این توصیف‌کننده‌های فایل در زیرپوسته‌ها (subshells) در دسترس نیستند. .PP شناسه فرایند (PID) پوسته‌ای که برای اجرای هم‌روند ایجاد شده است، به عنوان مقدار متغیر \fINAME\fP_PID در دسترس است. از دستور توکار \fBwait\fP می‌توان برای انتظار جهت خاتمه هم‌روند استفاده کرد. .PP از آنجا که هم‌روند به عنوان یک دستور ناهمگام (asynchronous) ایجاد می‌شود، دستور \fBcoproc\fP همیشه وضعیت موفقیت را برمی‌گرداند. وضعیت خروج یک هم‌روند، همان وضعیت خروج \fIcommand\fP است. .SS تعریف توابع پوسته (Shell Function Definitions) یک تابع پوسته شیئی است که مانند یک دستور ساده فراخوانی می‌شود و یک دستور مرکب را با مجموعه‌ای جدید از پارامترهای مکانی اجرا می‌کند. توابع پوسته به صورت زیر اعلان می‌شوند: .TP \fIfname\fP () \fIcompound\-command\fP [\fIredirection\fP] .PD 0 .TP \fBfunction\fP \fIfname\fP [()] \fIcompound\-command\fP [\fIredirection\fP] .PD این عبارت تابعی به نام \fIfname\fP را تعریف می‌کند. کلمه رزرو شده \fBfunction\fP اختیاری است. اگر کلمه رزرو شده \fBfunction\fP آورده شود، پرانتزها اختیاری هستند. \fIبدنه\fP تابع همان دستور مرکب .I compound\-command است (به \fBدستورات مرکب (Compound Commands)\fP در بالا مراجعه کنید). این دستور معمولاً یک \fIفهرست\fP از دستورات بین { و } است، اما می‌تواند هر دستوری باشد که در بخش \fBدستورات مرکب\fP در بالا ذکر شده است. اگر کلمه رزرو شده \fBfunction\fP استفاده شود ولی پرانتزها آورده نشوند، استفاده از آکولادها توصیه می‌شود. \fIcompound\-command\fP هر زمان که \fIfname\fP به عنوان نام یک دستور ساده مشخص شود اجرا می‌گردد. در حالت posix، نام \fIfname\fP باید یک \fIname\fP معتبر برای پوسته باشد و نباید نام یکی از .SM POSIX \fIدستورات توکار ویژه\fP باشد. در حالت پیش‌فرض، نام تابع می‌تواند هر کلمه نقل‌قول‌نشده در پوسته باشد که حاوی \fB$\fP نباشد. .PP هرگونه تغییر مسیر (به .SM .B تغییر مسیر (REDIRECTION) در زیر مراجعه کنید) که هنگام تعریف یک تابع تعیین شود، هنگام اجرای تابع انجام می‌گیرد. .PP وضعیت خروج تعریف یک تابع صفر است، مگر اینکه خطای نگارشی (syntax error) رخ دهد یا تابعی فقط‌خواندنی با همان نام از قبل موجود باشد. هنگام اجرا، وضعیت خروج یک تابع برابر با وضعیت خروج آخرین دستور اجرا شده در بدنه آن است. (به .SM .B توابع (FUNCTIONS) در زیر مراجعه کنید.) .SH "توضیحات (COMMENTS)" در یک پوسته غیرتعاملی، یا پوسته تعاملی که در آن گزینه .B interactive_comments برای دستور توکار .B shopt فعال است (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر را ببینید)، کلمهای که با .B # شروع شود، یک کامنت (توضیح) را آغاز میکند. یک کلمه در ابتدای خط، پس از فضای خالی بدون نقلقول، یا پس از یک عملگر شروع میشود. کامنت باعث میشود آن کلمه و تمام نویسههای باقیمانده در آن خط نادیده گرفته شوند. یک پوسته تعاملی بدون فعال بودن گزینه .B interactive_comments اجازه درج کامنت را نمیدهد. گزینه .B interactive_comments بهطور پیشفرض در پوستههای تعاملی فعال است. .SH "نقلقول (QUOTING)" \fIنقلقول (Quoting)\fP برای حذف معنای ویژه برخی نویسهها یا کلمات برای پوسته استفاده میشود. از نقلقول میتوان برای غیرفعال کردن رفتار ویژه نویسههای خاص، جلوگیری از شناسایی کلمات رزرو شده به عنوان کلمه رزرو، و جلوگیری از بسط پارامتر استفاده کرد. .PP هر یک از \fIنویسههای متغیر (metacharacters)\fP فهرستشده در بالا زیر عنوان .SM .B "تعاریف (DEFINITIONS)" معنای خاصی برای پوسته دارند و اگر قرار است نشاندهنده خود آن نویسه باشند، باید در نقلقول قرار گیرند. .PP هنگامی که امکانات بسط تاریخچه دستورات در حال استفاده است (بخش .SM .B "بسط تاریخچه (HISTORY EXPANSION)" در زیر را ببینید)، نویسه \fIبسط تاریخچه\fP، که معمولاً \fB!\fP است، باید برای جلوگیری از بسط تاریخچه در نقلقول قرار گیرد. .PP چهار سازوکار نقلقول وجود دارد: .IR "نویسه گریز (escape character)" ، نقلقول تکی (single quotes)، نقلقول دوگانه (double quotes)، و نقلقول دلار-تکی (dollar-single quotes). .PP یک بکاسلش بدون نقلقول (\fB\e\fP) همان .IR "نویسه گریز" است. این نویسه ارزش تحتاللفظی نویسه بعدی را حفظ کرده و هرگونه معنای ویژه آن را سلب میکند، به استثنای . اگر یک جفت \fB\e\fP ظاهر شود و خود بکاسلش در نقلقول نباشد، با \fB\e\fP به عنوان ادامه خط رفتار میشود (یعنی از جریان ورودی حذف شده و عملاً نادیده گرفته میشود). .PP قرار دادن نویسهها در نقلقول تکی ارزش تحتاللفظی تک تک نویسههای درون نقلقول را حفظ میکند. یک نقلقول تکی نمیتواند بین نقلقولهای تکی قرار گیرد، حتی اگر پیش از آن بکاسلش آمده باشد. .PP قرار دادن نویسهها در نقلقول دوگانه ارزش تحتاللفظی تمام نویسههای درون نقلقول را حفظ میکند، به استثنای .BR $ ، .BR \` ، .BR \e ، و در صورت فعال بودن بسط تاریخچه، .BR ! . هنگامی که پوسته در حالت posix است، \fB!\fP هیچ معنای ویژهای در نقلقول دوگانه ندارد، حتی زمانی که بسط تاریخچه فعال باشد. نویسههای .B $ و .B \` معنای ویژه خود را در نقلقول دوگانه حفظ میکنند. بکاسلش تنها در صورتی معنای ویژه خود را حفظ میکند که پس از آن یکی از نویسههای زیر آمده باشد: .BR $ ، .BR \` ، \^\fB\*"\fP\^، .BR \e ، یا .BR . بکاسلشهایی که پیش از نویسههای بدون معنای ویژه قرار دارند، دستنخورده باقی میمانند. .PP یک نقلقول دوگانه را میتوان با قرار دادن یک بکاسلش قبل از آن، در داخل نقلقول دوگانه نقل کرد. در صورت فعال بودن، بسط تاریخچه انجام خواهد شد مگر اینکه یک \fB!\fP که در نقلقول دوگانه ظاهر میشود با استفاده از بکاسلش گریز داده شود. بکاسلش قبل از .B ! حذف نمیشود. .PP پارامترهای ویژهٔ .B * و .B @ هنگامی که درون نقل‌قول دوتایی (double quotes) قرار گیرند معنای ویژه‌ای دارند (بخش .SM .B "پارامترها (PARAMETERS)" در زیر را ببینید). .PP توالی‌های نویسه‌ای به شکل \fB$\fP\*'\fIstring\fP\*' به عنوان گونهٔ ویژه‌ای از نقل‌قول تکی (single quotes) در نظر گرفته می‌شوند. این توالی به \fIstring\fP بسط می‌یابد، به طوری که نویسه‌های گریز با بک‌اسلش (backslash-escaped) در \fIstring\fP طبق استاندارد ANSI C جایگزین می‌شوند. توالی‌های گریز بک‌اسلش، در صورت وجود، به شرح زیر رمزگشایی می‌شوند: .RS .PD 0 .TP .B \ea هشدار یا زنگ (alert/bell) .TP .B \eb پس‌بر یا پس‌فاصله (backspace) .TP .B \ee .TP .B \eE یک نویسهٔ گریز (escape character) .TP .B \ef برگه‌خور (form feed) .TP .B \en خط جدید (new line) .TP .B \er بازگشت به ابتدای خط (carriage return) .TP .B \et تب افقی (horizontal tab) .TP .B \ev تب عمودی (vertical tab) .TP .B \e\e بک‌اسلش (backslash) .TP .B \e\*' نقل‌قول تکی (single quote) .TP .B \e\*" نقل‌قول دوتایی (double quote) .TP .B \e? علامت سؤال (question mark) .TP .B \e\fInnn\fP نویسهٔ هشت بیتی که مقدار آن مقدار اکتال \fInnn\fP است (یک تا سه رقم اکتال یا هشت‌هشتی). .TP .B \ex\fIHH\fP نویسهٔ هشت بیتی که مقدار آن مقدار هگزادسیمال \fIHH\fP است (یک یا دو رقم هگزادسیمال یا شانزده‌شانزدهی). .TP .B \eu\fIHHHH\fP نویسهٔ یونی‌کد (ISO/IEC 10646) که مقدار آن مقدار هگزادسیمال \fIHHHH\fP است (یک تا چهار رقم هگزادسیمال). .TP .B \eU\fIHHHHHHHH\fP نویسهٔ یونی‌کد (ISO/IEC 10646) که مقدار آن مقدار هگزادسیمال \fIHHHHHHHH\fP است (یک تا هشت رقم هگزادسیمال). .TP .B \ec\fIx\fP یک نویسهٔ کنترل\-\fIx\fP. .PD .RE .LP نتیجهٔ بسط‌یافته در نقل‌قول تکی قرار می‌گیرد، درست مانند این که علامت دلار وجود نداشته است. .SS "ترجمهٔ رشته‌ها" یک رشتهٔ درون نقل‌قول دوتایی که پیش از آن علامت دلار قرار دارد (\fB$\fP\*"\fIstring\fP\*") باعث می‌شود که رشته مطابق با محلی‌سازی (locale) فعلی ترجمه شود. زیرساخت \fIgettext\fP عمل جستجو و ترجمه را با استفاده از متغیرهای پوستهٔ \fBLC_MESSAGES\fP، \fBTEXTDOMAINDIR\fP و \fBTEXTDOMAIN\fP انجام می‌دهد. اگر محلی‌سازی فعلی \fBC\fP یا \fBPOSIX\fP باشد، اگر هیچ ترجمه‌ای در دسترس نباشد، یا اگر رشته ترجمه نشود، علامت دلار نادیده گرفته می‌شود و با رشته مانند حالت نقل‌قول دوتایی به شکلی که در بالا توصیف شد رفتار می‌شود. این نوعی از نقل‌قول دوتایی است، بنابراین رشته به طور پیش‌فرض چه ترجمه و جایگزین شود و چه نشود، درون نقل‌قول دوتایی باقی می‌ماند. اگر گزینهٔ \fBnoexpand_translation\fP با استفاده از دستور توکار \fBshopt\fP فعال شده باشد، رشته‌های ترجمه‌شده به جای نقل‌قول دوتایی در نقل‌قول تکی قرار می‌گیرند. توضیحات مربوط به .B shopt را در زیر بخش .SM .BR "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" ببینید. .SH "پارامترها (PARAMETERS)" یک .I parameter (پارامتر) موجودیتی است که مقادیر را ذخیره می‌کند. این موجودیت می‌تواند یک .IR name ، یک عدد، یا یکی از نویسه‌های ویژه فهرست‌شده در بخش .BR "پارامترهای ویژه (Special Parameters)" در زیر باشد. یک .I variable (متغیر) پارامتری است که با یک .IR name مشخص می‌شود. یک متغیر دارای یک \fIvalue\fP (مقدار) و صفر یا چند \fIattribute\fP (ویژگی) است. ویژگی‌ها با استفاده از دستور توکار .B declare تخصیص داده می‌شوند (به .B declare در زیر، در بخش .SM .BR "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" مراجعه کنید). دستورات توکار \fBexport\fP و \fBreadonly\fP ویژگی‌های خاصی را تخصیص می‌دهند. .PP یک پارامتر در صورتی مقداردهی‌شده (set) محسوب می‌شود که مقداری به آن تخصیص یافته باشد. رشته تهی (null string) یک مقدار معتبر است. هنگامی که متغیری مقداردهی شد، تنها با استفاده از دستور توکار .B unset می‌توان آن را لغو مقداردهی (unset) کرد (به بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر مراجعه کنید). .PP تخصیص مقدار به یک .I variable با استفاده از عبارتی به شکل زیر انجام می‌شود: .RS .PP \fIname\fP=[\fIvalue\fP] .RE .PP اگر .I value داده نشود، رشته تهی به متغیر تخصیص می‌یابد. همه .IR value ها تحت بسط تیلده (tilde expansion)، بسط پارامتر و متغیر، جایگزینی دستور، بسط حسابی، و حذف نقل‌قول قرار می‌گیرند (به بخش .SM .B "بسط (EXPANSION)" در زیر مراجعه کنید). اگر ویژگی .B integer متغیر تنظیم شده باشد، آنگاه .I value به عنوان یک عبارت حسابی ارزیابی می‌شود حتی اگر بسط .BR $(( .\|.\|.\& )) استفاده نشده باشد (به .B "بسط حسابی (Arithmetic Expansion)" در زیر مراجعه کنید). تفکیک کلمات و بسط مسیر (pathname expansion) انجام نمی‌شوند. عبارات انتساب همچنین می‌توانند به عنوان آرگومان‌های دستورات توکار .BR alias ، .BR declare ، .BR typeset ، .BR \%export ، .BR readonly ، و .B local ظاهر شوند (دستورات \fIdeclaration\fP یا اعلانی). در حالت posix، این دستورات توکار می‌توانند در یک دستور پس از یک یا چند نمونه از دستور توکار \fBcommand\fP ظاهر شده و این ویژگی‌های عبارت انتساب را حفظ کنند. .PP در زمینه‌ای که یک عبارت انتساب در حال تخصیص مقدار به یک متغیر پوسته یا اندیس آرایه است، عملگر .Q += به مقدار قبلی متغیر الحاق می‌کند یا به آن می‌افزاید. این شامل آرگومان‌های دستورات \fIdeclaration\fP مانند .B \%declare که عبارات انتساب را می‌پذیرند نیز می‌شود. هنگامی که .Q += روی متغیری اعمال می‌شود که ویژگی .B \%integer آن تنظیم شده است، مقدار فعلی متغیر و \fIvalue\fP هر کدام به عنوان عبارات حسابی ارزیابی می‌شوند، و مجموع نتایج به عنوان مقدار متغیر تخصیص می‌یابد. مقدار فعلی معمولاً یک عدد صحیح ثابت است، اما می‌تواند یک عبارت باشد. هنگامی که .Q += با استفاده از انتساب مرکب روی یک متغیر آرایه اعمال می‌شود (به .B "آرایه‌ها (Arrays)" در زیر مراجعه کنید)، مقدار متغیر لغو (unset) نمی‌شود (برخلاف زمانی که از .Q = استفاده می‌شود)، و مقادیر جدید به آرایه الحاق می‌شوند، که از یک واحد بیشتر از حداکثر اندیس آرایه (برای آرایه‌های اندیسی) آغاز می‌شود یا به عنوان جفت‌های کلید\-مقدار اضافی در یک آرایه انجمنی (associative) افزوده می‌شود. هنگامی که روی یک متغیر با مقدار رشته‌ای اعمال می‌شود، \fIvalue\fP بسط یافته و به مقدار متغیر الحاق می‌شود. .PP یک متغیر می‌تواند با استفاده از گزینهٔ \fB\-n\fP در دستورات توکار \fBdeclare\fP یا \fBlocal\fP صفت \fInameref\fP را دریافت کند (توضیحات مربوط به \fBdeclare\fP و \fBlocal\fP را در زیر ببینید) تا یک \fInameref\fP یا مرجعی به متغیر دیگر ایجاد شود. این ویژگی اجازه می‌دهد متغیرها به صورت غیرمستقیم دستکاری شوند. هر زمان که به متغیر nameref ارجاع داده شود، مقداری به آن انتساب یابد، حذف (unset) شود، یا صفات آن تغییر یابد (به جز استفاده یا تغییر خود صفت \fInameref\fP)، این عملیات در واقع روی متغیری انجام می‌شود که با مقدار متغیر nameref مشخص شده است. یک nameref معمولاً در توابع پوسته برای ارجاع به متغیری استفاده می‌شود که نام آن به عنوان آرگومان به تابع منتقل شده است. به عنوان مثال، اگر نام یک متغیر به عنوان اولین آرگومان به یک تابع پوسته ارسال شود، اجرای .PP .RS .EX declare \-n ref=$1 .EE .RE .PP در داخل تابع، یک متغیر محلی nameref به نام \fBref\fP ایجاد می‌کند که مقدار آن نام متغیری است که به عنوان اولین آرگومان ارسال شده است. ارجاعات و انتساب‌ها به \fBref\fP، و تغییرات در صفات آن، به عنوان ارجاع، انتساب و تغییر صفات به متغیری که نام آن به عنوان \fB$1\fP ارسال شده بود در نظر گرفته می‌شوند. اگر متغیر کنترلی در یک حلقهٔ \fBfor\fP صفت nameref را داشته باشد، لیست کلمات می‌تواند لیستی از متغیرهای پوسته باشد، و هنگام اجرای حلقه، به نوبت برای هر کلمه در لیست یک مرجع نامی برقرار می‌شود. به متغیرهای آرایه نمی‌توان صفت \fBnameref\fP داد. با این حال، متغیرهای nameref می‌توانند به متغیرهای آرایه و متغیرهای آرایه با اندیس ارجاع دهند. متغیرهای nameref را می‌توان با استفاده از گزینهٔ \fB\-n\fP در دستور توکار \fBunset\fP حذف کرد. در غیر این صورت، اگر \fBunset\fP با نام یک متغیر nameref به عنوان آرگومان اجرا شود، متغیری که توسط متغیر nameref به آن ارجاع داده شده است حذف خواهد شد. .PP هنگامی که پوسته شروع به کار می‌کند، محیط خود را می‌خواند و همان‌طور که در زیر شرح داده شده است، از هر متغیر محیطی که نام معتبری دارد یک متغیر پوسته ایجاد می‌کند (ببینید .SM .BR ENVIRONMENT ). .SS پارامترهای مکانی (Positional Parameters) یک .I پارامتر مکانی پارامتری است که با یک یا چند رقم، غیر از تک‌رقم 0، مشخص می‌شود. پارامترهای مکانی هنگام فراخوانی پوسته از آرگومان‌های آن مقداردهی می‌شوند، و ممکن است با استفاده از دستور توکار .B set مجدداً مقداردهی شوند. نمی‌توان با استفاده از عبارات انتساب به پارامترهای مکانی مقدار تخصیص داد. هنگامی که یک تابع پوسته اجرا می‌شود، پارامترهای مکانی موقتاً جایگزین می‌شوند (ببینید .SM .B FUNCTIONS در زیر). .PP هنگامی که یک پارامتر مکانی شامل بیش از یک رقم بسط داده می‌شود، باید درون آکولاد قرار گیرد (ببینید .SM .B EXPANSION در زیر). بدون آکولاد، یک رقم پس از $ تنها می‌تواند به یکی از نه پارامتر مکانی اول (\fB$1\-$9\fP) یا پارامتر ویژهٔ \fB$0\fP اشاره کند (بخش بعدی را ببینید). .SS پارامترهای ویژه (Special Parameters) پوسته با چند پارامتر به طور ویژه رفتار می‌کند. به این پارامترها تنها می‌توان ارجاع داد؛ انتساب مقدار به آن‌ها مجاز نیست. پارامترهای ویژه با یکی از نویسه‌های زیر مشخص می‌شوند. .TP .PD 0 .B * (\fB$*\fP) به پارامترهای مکانی بسط می‌یابد، که از یک شروع می‌شود. هنگامی که بسط درون نقل‌قول دوتایی (دابل کوتیشن) نباشد، هر پارامتر مکانی به یک کلمهٔ جداگانه بسط می‌یابد. در زمینه‌هایی که بسط کلمات انجام می‌شود، این کلمات مشمول تفکیک کلمات و بسط مسیر می‌شوند. هنگامی که بسط درون نقل‌قول دوتایی رخ می‌دهد، به یک کلمهٔ واحد بسط می‌یابد که در آن مقدار هر پارامتر با نویسهٔ اول متغیر .SM .B IFS جدا می‌شود. به عبارت دیگر، .B \*"$*\*" معادل است با .BR \*"$1\fIc\fP$2\fIc\fP.\|.\|.\*" ، که در آن .I c اولین نویسه از مقدار متغیر .SM .B IFS است. اگر .SM .B IFS تنظیم نشده باشد (unset)، پارامترها با فاصله (space) از هم جدا می‌شوند. اگر .SM .B IFS تهی (null) باشد، پارامترها بدون جداکننده به هم متصل می‌شوند. .TP .B @ (\fB$@\fP) به پارامترهای موقعیتی (positional parameters)، با شروع از یک، بسط می‌یابد. در زمینه‌هایی که تفکیک کلمات (word splitting) انجام می‌شود، این پارامتر هر پارامتر موقعیتی را به یک کلمه جداگانه بسط می‌دهد؛ اگر درون نقل‌قول دوتایی (double quotes) نباشد، این کلمات مشمول تفکیک کلمات خواهند شد. در زمینه‌هایی که تفکیک کلمات انجام نمی‌شود، مانند بخش مقدار در یک دستور انتساب (assignment statement)، به یک کلمه واحد بسط می‌یابد که در آن هر پارامتر موقعیتی با یک فاصله (space) جدا شده است. هنگامی که بسط درون نقل‌قول دوتایی رخ می‌دهد، و تفکیک کلمات انجام می‌شود، هر پارامتر به یک کلمه جداگانه بسط می‌یابد. یعنی، .B \&\*"$@\*" معادل است با .B \&\*"\&$1\&\*"\ \*"$2\*"\ .\|.\|. اگر بسط نقل‌قول دوتایی درون یک کلمه رخ دهد، بسطِ اولین پارامتر با بسطِ بخش آغازین کلمه اصلی پیوند می‌خورد، و بسطِ آخرین پارامتر با بسطِ بخش پایانی کلمه اصلی پیوند می‌یابد. هنگامی که هیچ پارامتر موقعیتی وجود ندارد، .B \&\*"$@\*" و .B $@ به هیچ چیز بسط نمی‌یابند (یعنی حذف می‌شوند). .TP .B # (\fB$#\fP) به تعداد پارامترهای موقعیتی در مبنای ده (decimal) بسط می‌یابد. .TP .B ? (\fB$?\fP) به وضعیت خروج (exit status) آخرین دستور اجرا شده بسط می‌یابد. .TP .B \- (\fB$\-\fP) به فلگ‌های گزینه فعلی، آن‌گونه که هنگام فراخوانی، توسط دستور توکار .B set یا مواردی که توسط خود پوسته تعیین شده‌اند (مانند گزینه .BR \-i ) مشخص شده است، بسط می‌یابد. .TP .B $ (\fB$$\fP) به شناسه فرآیند (process ID) پوسته بسط می‌یابد. در یک زیرپوسته (subshell)، به شناسه فرآیند پوسته والد بسط می‌یابد، نه زیرپوسته. .TP .B ! (\fB$!\fP) به شناسه فرآیند کاری که اخیراً به پس‌زمینه فرستاده شده است بسط می‌یابد، خواه به عنوان یک دستور ناهمگام (asynchronous) اجرا شده باشد یا با استفاده از دستور توکار \fBbg\fP (به بخش .SM .B "مدیریت کارها (JOB CONTROL)" در زیر مراجعه کنید). .TP .B 0 (\fB$0\fP) به نام پوسته یا اسکریپت پوسته بسط می‌یابد. این مقدار هنگام راه‌اندازی اولیه پوسته مقداردهی می‌شود. اگر \fBbash\fP با یک فایل حاوی دستورات فراخوانی شود، .B $0 روی نام آن فایل تنظیم می‌شود. اگر \fBbash\fP با گزینه .B \-c شروع شود، آنگاه .B $0 روی اولین آرگومان پس از رشته‌ای که قرار است اجرا شود، در صورت وجود، تنظیم می‌شود. در غیر این صورت، به نام فایلی که برای فراخوانی .BR bash استفاده شده است، مطابق آنچه توسط آرگومان صفر ارائه شده، تنظیم می‌شود. .PD .SS "متغیرهای پوسته" پوسته متغیرهای زیر را مقداردهی می‌کند: .PP .PD 0 .TP .B _ (\fB$_\fP، یک خط زیرین یا underscore) این متغیر بسته به زمینه، چندین معنا دارد. هنگام راه‌اندازی اولیه پوسته، \fB_\fP به نام مسیر استفاده‌شده برای فراخوانی پوسته یا اسکریپت پوسته در حال اجرا، طبق آنچه در محیط یا فهرست آرگومان‌ها منتقل شده، مقداردهی می‌شود. سپس، به آخرین آرگومان دستور ساده قبلی اجرا شده در پیش‌زمینه، پس از بسط، بسط می‌یابد. همچنین روی نام مسیر کامل استفاده‌شده برای فراخوانی هر دستور اجرا شده تنظیم می‌شود و در محیط صادرشده (exported environment) به آن دستور قرار می‌گیرد. هنگام بررسی ایمیل، \fB$_\fP به نام فایل ایمیلی که در حال حاضر بررسی می‌شود بسط می‌یابد. .TP .B BASH به نام فایل کاملِ استفاده‌شده برای فراخوانی این نمونه از .BR bash بسط می‌یابد. .TP .B BASHOPTS فهرستی جداشده با دونقطه از گزینه‌های فعال پوسته است. هر کلمه در این فهرست یک آرگومان معتبر برای گزینهٔ .B \-s در دستور توکار .B shopt است (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر را ببینید). گزینه‌هایی که در .SM .B BASHOPTS ظاهر می‌شوند همان مواردی هستند که توسط \fBshopt\fP با وضعیت .I on گزارش می‌شوند. اگر این متغیر هنگام بالا آمدن .B bash در محیط موجود باشد، پوسته پیش از خواندن هر فایل راه‌اندازی، هر یک از گزینه‌های موجود در فهرست را فعال می‌کند. اگر این متغیر صادر (export) شود، پوسته‌های فرزند هر گزینه در فهرست را فعال خواهند کرد. این متغیر فقط‌خواندنی است. .TP .B BASHPID به شناسهٔ فرایند (PID) فرایند جاری \fBbash\fP بسط می‌یابد. این در شرایط خاصی با \fB$$\fP متفاوت است، مانند زیرپوسته‌هایی که نیازی به مقداردهی اولیهٔ مجدد \fBbash\fP ندارند. مقداردهی به .SM .B BASHPID هیچ تأثیری ندارد. اگر .SM .B BASHPID از حالت مقداردهی خارج (unset) شود، ویژگی‌های خاص خود را از دست می‌دهد، حتی اگر پس از آن مجدداً مقداردهی شود. .TP .B BASH_ALIASES یک متغیر آرایهٔ انجمنی است که اعضای آن با فهرست داخلی نام‌های مستعار که توسط دستور توکار \fBalias\fP نگهداری می‌شود، تطابق دارد. عناصری که به این آرایه افزوده می‌شوند در فهرست نام‌های مستعار ظاهر خواهند شد؛ با این حال، خارج کردن عناصر آرایه از حالت مقداردهی در حال حاضر نام‌های مستعار را از فهرست نام‌های مستعار حذف نمی‌کند. اگر .SM .B BASH_ALIASES از حالت مقداردهی خارج شود، ویژگی‌های خاص خود را از دست می‌دهد، حتی اگر پس از آن مجدداً مقداردهی شود. .TP .B BASH_ARGC یک متغیر آرایه‌ای است که مقادیر آن تعداد پارامترها در هر فریم از پشتهٔ فراخوانی اجرای جاری \fBbash\fP است. تعداد پارامترهای زیرروال جاری (تابع پوسته یا اسکریپت اجراشده با \fB.\fP یا \fBsource\fP) در بالای پشته قرار دارد. هنگامی که یک زیرروال اجرا می‌شود، تعداد پارامترهای ارسالی به روی .SM .BR BASH_ARGC رانده (push) می‌شود. پوسته .SM .B BASH_ARGC را تنها در حالت اشکال‌زدایی گسترده مقداردهی می‌کند (توضیحات مربوط به گزینهٔ .B extdebug از دستور توکار .B shopt در زیر را ببینید). تنظیم \fBextdebug\fP پس از اینکه پوسته اجرای اسکریپت را آغاز کرده است، یا ارجاع به این متغیر در زمانی که \fBextdebug\fP تنظیم نشده است، ممکن است منجر به مقادیر ناهمخوان شود. مقداردهی به .SM .B BASH_ARGC هیچ تأثیری ندارد، و نمی‌توان آن را از حالت تنظیم خارج (unset) کرد. .TP .B BASH_ARGV یک متغیر آرایه‌ای حاوی تمام پارامترها در پشتهٔ فراخوانی اجرای جاری \fBbash\fP است. آخرین پارامترِ آخرین فراخوانی زیرروال در بالای پشته قرار دارد؛ اولین پارامترِ فراخوانی اولیه در پایین پشته است. هنگامی که یک زیرروال اجرا می‌شود، پوسته پارامترهای ارائه‌شده را به روی .SM .BR BASH_ARGV می‌راند (push می‌کند). پوسته .SM .B BASH_ARGV را تنها در حالت اشکال‌زدایی گسترده مقداردهی می‌کند (توضیحات مربوط به گزینهٔ .B extdebug از دستور توکار .B shopt در زیر را ببینید). تنظیم \fBextdebug\fP پس از اینکه پوسته اجرای اسکریپت را آغاز کرده است، یا ارجاع به این متغیر هنگامی که \fBextdebug\fP تنظیم نشده است، ممکن است منجر به مقادیر ناهمخوان شود. مقداردهی به .SM .B BASH_ARGV هیچ تأثیری ندارد، و نمی‌توان آن را از حالت تنظیم خارج (unset) کرد. .TP .B BASH_ARGV0 هنگام ارجاع به این متغیر، به نام پوسته یا اسکریپت پوسته بسط می‌یابد (همانند .BR $0 ؛ توضیحات پارامتر ویژه 0 در بالا را ببینید). مقداردهی به .SM .B BASH_ARGV0 مقدار \fB$0\fP را برابر با همان مقدار قرار می‌دهد. اگر .SM .B BASH_ARGV0 حذف (unset) شود، ویژگی‌های خاص خود را از دست می‌دهد، حتی اگر پس از آن مجدداً مقداردهی شود. .TP .B BASH_CMDS یک متغیر آرایه انجمنی که اعضای آن متناظر با جدول درهم‌سازی (hash table) داخلی دستورات است، به همان صورت که توسط دستور توکار \fBhash\fP نگهداری می‌شود. افزودن عناصر به این آرایه موجب ظاهر شدن آنها در جدول درهم‌سازی می‌شود؛ با این حال، حذف عناصر این آرایه در حال حاضر نام دستورات را از جدول درهم‌سازی پاک نمی‌کند. اگر .SM .B BASH_CMDS حذف (unset) شود، ویژگی‌های خاص خود را از دست می‌دهد، حتی اگر پس از آن مجدداً مقداردهی شود. .TP .B BASH_COMMAND به دستوری بسط می‌یابد که در حال حاضر در حال اجرا است یا در شرف اجرا می‌باشد، مگر اینکه پوسته در نتیجه یک تله (trap) دستوری را اجرا کند، که در این صورت دستوری است که در زمان اجرای تله در حال اجرا بوده است. اگر .SM .B BASH_COMMAND حذف (unset) شود، ویژگی‌های خاص خود را از دست می‌دهد، حتی اگر پس از آن مجدداً مقداردهی شود. .TP .B BASH_EXECUTION_STRING آرگومان دستور برای گزینه فراخوانی \fB\-c\fP. .TP .B BASH_LINENO یک متغیر آرایه‌ای که اعضای آن شماره خطوط در فایل‌های مبدأ هستند، جایی که هر یک از اعضای متناظر در .SM .B FUNCNAME فراخوانی شده‌اند. \fB${BASH_LINENO[\fP\fI$i\fP\fB]}\fP شماره خط در فایل مبدأ (\fB${BASH_SOURCE[\fP\fI$i+1\fP\fB]}\fP) است که در آن \fB${FUNCNAME[\fP\fI$i\fP\fB]}\fP صدا زده شده است (یا اگر درون یک تابع پوسته دیگر به آن ارجاع داده شود، \fB${BASH_LINENO[\fP\fI$i\-1\fP\fB]}\fP). از .SM .B LINENO برای دریافت شماره خط فعلی استفاده کنید. مقداردهی به .SM .B BASH_LINENO هیچ تأثیری ندارد و نمی‌توان آن را حذف (unset) کرد. .TP .B BASH_LOADABLES_PATH فهرستی از دایرکتوری‌ها با جداکننده دو نقطه (colon-separated) که دستور .B enable در آنها به دنبال دستورات توکار قابل بارگذاری پویا می‌گردد. .TP .B BASH_MONOSECONDS هر بار که به این متغیر ارجاع داده شود، در صورت در دسترس بودن، به مقدار بازگردانده شده توسط ساعت یکنواخت (monotonic clock) سیستم بسط می‌یابد. اگر ساعت یکنواختی وجود نداشته باشد، این معادل با \fBEPOCHSECONDS\fP خواهد بود. اگر .SM .B BASH_MONOSECONDS حذف (unset) شود، ویژگی‌های خاص خود را از دست می‌دهد، حتی اگر پس از آن مجدداً مقداردهی شود. .TP .B BASH_REMATCH یک متغیر آرایه‌ای که اعضای آن توسط عملگر دوتایی \fB=\*~\fP در دستور شرطی \fB[[\fP مقداردهی می‌شوند. عنصر با نمایه 0 بخشی از رشته است که با کل عبارت باقاعده (regular expression) مطابقت دارد. عنصر با نمایه \fIn\fP بخشی از رشته است که با \fIn\fPامین زیرعبارت داخل پرانتز تطبیق دارد. .TP .B BASH_SOURCE یک متغیر آرایه‌ای که اعضای آن نام فایل‌های مبدأ هستند، جایی که نام توابع متناظر پوسته در متغیر آرایه‌ای .SM .B FUNCNAME تعریف شده‌اند. تابع پوسته \fB${FUNCNAME[\fP\fI$i\fP\fB]}\fP در فایل \fB${BASH_SOURCE[\fP\fI$i\fP\fB]}\fP تعریف شده و از \fB${BASH_SOURCE[\fP\fI$i+1\fP\fB]}\fP فراخوانی شده است. مقداردهی به .SM .B BASH_SOURCE هیچ تأثیری ندارد و نمی‌توان آن را حذف (unset) کرد. .TP .B BASH_SUBSHELL هنگامی که پوسته شروع به اجرا در هر زیرپوسته (subshell) یا محیط زیرپوسته می‌کند، مقدار این متغیر یک واحد افزایش می‌یابد. مقدار اولیه آن 0 است. اگر .SM .B BASH_SUBSHELL نامقدار (unset) شود، ویژگی‌های خاص خود را از دست می‌دهد، حتی اگر متعاقباً مقداردهی مجدد شود. .TP .B BASH_TRAPSIG در حین اجرای یک اقدام trap، برابر با شماره سیگنال مربوط به آن قرار می‌گیرد. برای اطلاعات بیشتر درباره شماره‌های سیگنال و اجرای trap، شرح دستور \fBtrap\fP را در بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در ادامه ببینید. .TP .B BASH_VERSINFO یک متغیر آرایه‌ای فقط‌خواندنی که اعضای آن حاوی اطلاعات نگارش این نمونه از .BR bash می‌باشند. مقادیر تخصیص‌یافته به اعضای این آرایه به شرح زیر است: .PP .RS .TP 24 .B BASH_VERSINFO[\fR0\fP] شماره نگارش اصلی (نگارش انتشار یا \fIrelease\fP). .TP .B BASH_VERSINFO[\fR1\fP] شماره نگارش فرعی (\fIversion\fP). .TP .B BASH_VERSINFO[\fR2\fP] سطح وصله (patch level). .TP .B BASH_VERSINFO[\fR3\fP] نگارش ساخت (build version). .TP .B BASH_VERSINFO[\fR4\fP] وضعیت انتشار (مانند \fIbeta\fP). .TP .B BASH_VERSINFO[\fR5\fP] مقدار .SM .BR MACHTYPE . .RE .TP .B BASH_VERSION به یک رشته توصیف‌کننده نگارش این نمونه از .B bash بسط می‌یابد (مانند 5.2.37(3)-release). .TP .B COMP_CWORD یک اندیس به \fB${COMP_WORDS}\fP برای کلمه‌ای که موقعیت فعلی مکان‌نما را دربردارد. این متغیر فقط در توابع پوسته‌ای که توسط امکانات تکمیل خودکار قابل برنامه‌ریزی فراخوانی می‌شوند در دسترس است (به \fBتکمیل خودکار قابل برنامه‌ریزی (Programmable Completion)\fP در ادامه مراجعه کنید). .TP .B COMP_KEY کلید (یا آخرین کلید از یک دنباله کلید) که برای فراخوانی تابع تکمیل خودکار فعلی استفاده شده است. این متغیر فقط در توابع پوسته و دستورات خارجی فراخوانی‌شده توسط امکانات تکمیل خودکار قابل برنامه‌ریزی در دسترس است (به \fBتکمیل خودکار قابل برنامه‌ریزی (Programmable Completion)\fP در ادامه مراجعه کنید). .TP .B COMP_LINE خط فرمان فعلی. این متغیر فقط در توابع پوسته و دستورات خارجی فراخوانی‌شده توسط امکانات تکمیل خودکار قابل برنامه‌ریزی در دسترس است (به \fBتکمیل خودکار قابل برنامه‌ریزی (Programmable Completion)\fP در ادامه مراجعه کنید). .TP .B COMP_POINT اندیس موقعیت فعلی مکان‌نما نسبت به ابتدای فرمان جاری. اگر مکان‌نما در انتهای فرمان فعلی باشد، مقدار این متغیر برابر با \fB${#COMP_LINE}\fP خواهد بود. این متغیر فقط در توابع پوسته و دستورات خارجی فراخوانی‌شده توسط امکانات تکمیل خودکار قابل برنامه‌ریزی در دسترس است (به \fBتکمیل خودکار قابل برنامه‌ریزی (Programmable Completion)\fP در ادامه مراجعه کنید). .TP .B COMP_TYPE برابر با یک مقدار عدد صحیح مربوط به نوع تکمیل درخواستی که باعث فراخوانی تابع تکمیل شده است، تنظیم می‌شود: \fITAB\fP برای تکمیل عادی، \fI?\fP برای فهرست کردن تکمیل‌ها پس از فشردن متوالی Tab، \fI!\fP برای فهرست کردن گزینه‌های جایگزین در صورت تکمیل جزئی کلمه، \fI@\fP برای فهرست کردن گزینه‌ها در صورتی که کلمه بدون تغییر نمانده باشد، یا \fI%\fP برای تکمیل به صورت منو. این متغیر فقط در توابع پوسته و دستورات خارجی فراخوانی‌شده توسط امکانات تکمیل خودکار قابل برنامه‌ریزی در دسترس است (به \fBتکمیل خودکار قابل برنامه‌ریزی (Programmable Completion)\fP در ادامه مراجعه کنید). .TP .B COMP_WORDBREAKS مجموعه‌ای از نویسه‌ها که کتابخانهٔ \fBreadline\fP هنگام انجام تکمیل کلمات، آن‌ها را به عنوان جداکننده‌های کلمه در نظر می‌گیرد. اگر .SM .B COMP_WORDBREAKS از حالت مقداردهی خارج شود (unset شود)، ویژگی‌های خاص خود را از دست می‌دهد، حتی اگر بعداً دوباره مقداردهی شود. .TP .B COMP_WORDS یک متغیر آرایه‌ای (به بخش \fBآرایه‌ها (Arrays)\fP در زیر مراجعه کنید) شامل کلمات مجزای خط فرمان فعلی. این خط دقیقاً همان‌گونه که \fBreadline\fP آن را با استفاده از .SM .B COMP_WORDBREAKS (همان‌طور که در بالا توضیح داده شد) تقسیم می‌کند، به کلمات مجزا شکسته می‌شود. این متغیر تنها در توابع پوسته‌ای که توسط سازوکارهای تکمیل قابل برنامه‌ریزی فراخوانی می‌شوند، در دسترس است (به بخش \fBتکمیل برنامه‌پذیر (Programmable Completion)\fP در زیر مراجعه کنید). .TP .B COPROC یک متغیر آرایه‌ای (به بخش \fBآرایه‌ها (Arrays)\fP در زیر مراجعه کنید) که برای نگه‌داری توصیف‌کننده‌های فایل جهت خروجی از و ورودی به یک هم‌روند (coprocess) بدون نام ایجاد شده است (به بخش \fBهم‌روندها (Coprocesses)\fP در بالا مراجعه کنید). .TP .B DIRSTACK یک متغیر آرایه‌ای (به بخش .B آرایه‌ها (Arrays) در زیر مراجعه کنید) شامل محتویات فعلی پشتهٔ دایرکتوری‌ها. دایرکتوری‌ها به همان ترتیبی در پشته ظاهر می‌شوند که توسط دستور توکار .B dirs نمایش داده می‌شوند. انتساب مقدار به عناصر این متغیر آرایه‌ای می‌تواند برای اصلاح دایرکتوری‌هایی که از قبل در پشته هستند استفاده شود، اما برای افزودن و حذف دایرکتوری‌ها باید از دستورات توکار .B pushd و .B popd استفاده کرد. انتساب مقدار به این متغیر، دایرکتوری جاری را تغییر نمی‌دهد. اگر .SM .B DIRSTACK از حالت مقداردهی خارج شود (unset شود)، ویژگی‌های خاص خود را از دست می‌دهد، حتی اگر بعداً دوباره مقداردهی شود. .TP .B EPOCHREALTIME هر بار که به این پارامتر ارجاع داده شود، به تعداد ثانیه‌های سپری‌شده از مبدأ یونیکس (Unix Epoch) (به .IR time (3) مراجعه کنید) به عنوان یک مقدار ممیز شناور با دقت میکروثانیه بسط می‌یابد. انتساب مقدار به .SM .B EPOCHREALTIME نادیده گرفته می‌شود. اگر .SM .B EPOCHREALTIME از حالت مقداردهی خارج شود (unset شود)، ویژگی‌های خاص خود را از دست می‌دهد، حتی اگر بعداً دوباره مقداردهی شود. .TP .B EPOCHSECONDS هر بار که به این پارامتر ارجاع داده شود، به تعداد ثانیه‌های سپری‌شده از مبدأ یونیکس (Unix Epoch) (به .IR time (3) مراجعه کنید) بسط می‌یابد. انتساب مقدار به .SM .B EPOCHSECONDS نادیده گرفته می‌شود. اگر .SM .B EPOCHSECONDS از حالت مقداردهی خارج شود (unset شود)، ویژگی‌های خاص خود را از دست می‌دهد، حتی اگر بعداً دوباره مقداردهی شود. .TP .B EUID به شناسهٔ کاربری مؤثر (effective user ID) کاربر جاری بسط می‌یابد که در هنگام راه‌اندازی پوسته مقداردهی اولیه می‌شود. این متغیر فقط‌خواندنی است. .TP .B FUNCNAME .PD یک متغیر آرایه‌ای شامل نام تمام توابع پوسته‌ای که در حال حاضر در پشتهٔ فراخوانی اجرا قرار دارند. عنصر با اندیس 0، نام هر تابع پوسته‌ای است که در حال حاضر در حال اجرا است. پایین‌ترین عنصر (عنصری که بالاترین اندیس را دارد) .Q main است. این متغیر فقط زمانی وجود دارد که یک تابع پوسته در حال اجرا باشد. انتساب مقدار به .SM .B FUNCNAME هیچ تأثیری ندارد. اگر .SM .B FUNCNAME از حالت مقداردهی خارج شود (unset شود)، ویژگی‌های خاص خود را از دست می‌دهد، حتی اگر بعداً دوباره مقداردهی شود. .IP این متغیر را می‌توان به همراه .SM .B BASH_LINENO و .SM .BR BASH_SOURCE به کار برد. هر عنصر از .SM .B \%FUNCNAME دارای عناصر متناظری در .SM .B BASH_LINENO و .SM .B BASH_SOURCE برای توصیف پشتهٔ فراخوانی است. برای نمونه، \fB\%${FUNCNAME[\fP\fI$i\fP\fB]}\fP از فایل \fB${BASH_SOURCE[\fP\fI$i+1\fP\fB]}\fP در شماره خط \fB${BASH_LINENO[\fP\fI$i\fP\fB]}\fP فراخوانی شده است. دستور توکار \fBcaller\fP با استفاده از این اطلاعات، پشتهٔ فراخوانی فعلی را نمایش می‌دهد. .PD 0 .TP .B GROUPS یک متغیر آرایه‌ای حاوی فهرستی از گروه‌هایی که کاربر جاری عضو آن‌ها است. مقداردهی به .SM .B GROUPS هیچ تاثیری ندارد. اگر .SM .B GROUPS حذف شود (unset)، ویژگی‌های خاص خود را از دست می‌دهد، حتی اگر متعاقباً دوباره مقداردهی شود. .TP .B HISTCMD شماره تاریخچه، یا اندیس در فهرست تاریخچه، مربوط به دستور جاری. مقداردهی به .SM .B HISTCMD هیچ تاثیری ندارد. اگر .SM .B HISTCMD حذف شود (unset)، ویژگی‌های خاص خود را از دست می‌دهد، حتی اگر متعاقباً دوباره مقداردهی شود. .TP .B HOSTNAME به‌طور خودکار با نام میزبان جاری تنظیم می‌شود. .TP .B HOSTTYPE به‌طور خودکار با رشته‌ای تنظیم می‌شود که نوع ماشینی را که .B bash روی آن اجرا می‌شود، به‌طور یکتا توصیف می‌کند. مقدار پیش‌فرض وابسته به سیستم است. .TP .B LINENO هر بار که به این پارامتر ارجاع داده می‌شود، پوسته یک عدد دهدهی را جایگزین می‌کند که بیانگر شماره خط ترتیبی جاری (شروع از ۱) در یک اسکریپت یا تابع است. در صورتی که درون یک اسکریپت یا تابع نباشد، مقداری که جایگزین می‌شود تضمین نمی‌شود که معنادار باشد. اگر .SM .B LINENO حذف شود (unset)، ویژگی‌های خاص خود را از دست می‌دهد، حتی اگر متعاقباً دوباره مقداردهی شود. .TP .B MACHTYPE به‌طور خودکار با رشته‌ای تنظیم می‌شود که نوع سیستمی را که .B bash روی آن اجرا می‌شود، در قالب استاندارد گنو به‌صورت \fIcpu-company-system\fP به‌طور کامل توصیف می‌کند. مقدار پیش‌فرض وابسته به سیستم است. .TP .B MAPFILE یک متغیر آرایه‌ای (بخش \fBآرایه‌ها (Arrays)\fP در زیر را ببینید) که ایجاد می‌شود تا متنی را که توسط دستور توکار \fBmapfile\fP خوانده شده است، در صورت عدم ارائه نام متغیر، نگهداری کند. .TP .B OLDPWD دایرکتوری کاری قبلی، آن‌گونه که توسط دستور .B cd تنظیم شده است. .TP .B OPTARG مقدار آخرین آرگومان گزینه‌ای که توسط دستور توکار .B getopts پردازش شده است (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر را ببینید). .TP .B OPTIND اندیس آرگومان بعدی که قرار است توسط دستور توکار .B getopts پردازش شود (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر را ببینید). .TP .B OSTYPE به‌طور خودکار با رشته‌ای تنظیم می‌شود که سیستم‌عاملی را که .B bash روی آن اجرا می‌شود، توصیف می‌کند. مقدار پیش‌فرض وابسته به سیستم است. .TP .B PIPESTATUS یک متغیر آرایه‌ای (بخش .B آرایه‌ها (Arrays) در زیر را ببینید) حاوی فهرستی از مقادیر وضعیت خروج دستورات در جدیدترین خط‌لوله (pipeline) اجراشده در پیش‌زمینه، که ممکن است تنها از یک دستور ساده تشکیل شده باشد (بخش .SM .B "گرامر پوسته (SHELL GRAMMAR)" در بالا را ببینید). \fBBash\fP متغیر .SM .B PIPESTATUS را پس از اجرای خط‌لوله‌های چندعنصری، خط‌لوله‌های زمان‌بندی‌شده و نفی‌شده، دستورات ساده، زیرپوسته‌های ایجادشده با عملگر (، دستورات مرکب .B [[ و .B (( و پس از شرایط خطایی که منجر به لغو اجرای دستور توسط پوسته می‌شوند، تنظیم می‌کند. .TP .B PPID شناسه فرایند (PID) والد پوسته. این متغیر فقط‌خواندنی است. .TP .B PWD دایرکتوری کاری فعلی که توسط دستور .B cd تنظیم شده است. .TP .B RANDOM هر بار که به این پارامتر ارجاع داده شود، به یک عدد صحیح تصادفی بین 0 و 32767 بسط می‌یابد. انتساب مقدار به .SM .B RANDOM توالی اعداد تصادفی را مقداردهی اولیه (بذردهی) می‌کند. بذردهی مولد اعداد تصادفی با مقدار ثابت یکسان، همان توالی مقادیر را تولید می‌کند. اگر .SM .B RANDOM حذف (unset) شود، ویژگی‌های خاص خود را از دست می‌دهد، حتی اگر متعاقباً مجدداً مقداردهی شود. .TP .B READLINE_ARGUMENT هر آرگومان عددی داده‌شده به یک دستور .B \%readline که با استفاده از .Q "bind \-x" تعریف شده است (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر را ببینید) هنگام فراخوانی آن. .TP .B READLINE_LINE محتویات بافر خط .B readline برای استفاده به همراه .Q "bind \-x" (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر را ببینید). .TP .B READLINE_MARK موقعیت نشانه (نقطه درج ذخیره‌شده) در بافر خط .B readline برای استفاده به همراه .Q "bind \-x" (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر را ببینید). نویسه‌های بین نقطه درج و نشانه اغلب \fIناحیه (region)\fP نامیده می‌شوند. .TP .B READLINE_POINT موقعیت نقطه درج در بافر خط .B readline برای استفاده به همراه .Q "bind \-x" (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر را ببینید). .TP .B REPLY روی خط ورودی خوانده‌شده توسط دستور توکار .B read تنظیم می‌شود وقتی هیچ آرگومانی ارائه نشده باشد. .TP .B SECONDS هر بار که به این پارامتر ارجاع داده شود، به تعداد ثانیه‌های سپری‌شده از زمان فراخوانی پوسته بسط می‌یابد. اگر مقداری به .SM .BR SECONDS اختصاص داده شود، مقدار بازگردانده‌شده در مراجعات بعدی برابر با تعداد ثانیه‌های سپری‌شده از زمان انتساب به علاوه مقدار اختصاص‌داده‌شده خواهد بود. تعداد ثانیه‌ها در زمان فراخوانی پوسته و زمان فعلی همواره با استعلام از ساعت سیستم با تفکیک‌پذیری یک ثانیه‌ای تعیین می‌شوند. اگر .SM .B SECONDS حذف (unset) شود، ویژگی‌های خاص خود را از دست می‌دهد، حتی اگر متعاقباً دوباره مقداردهی شود. .TP .B SHELLOPTS فهرستی جداشده با دونقطه (:) از گزینه‌های فعال پوسته. هر کلمه در فهرست، یک آرگومان معتبر برای گزینه .B \-o دستور توکار .B set است (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر را ببینید). گزینه‌هایی که در .SM .B SHELLOPTS ظاهر می‌شوند همان‌هایی هستند که توسط \fBset \-o\fP به صورت .I on گزارش شده‌اند. اگر این متغیر هنگام شروع به کار .B bash در محیط وجود داشته باشد، پوسته هر گزینه موجود در فهرست را قبل از خواندن هر فایل راه‌اندازی فعال می‌کند. اگر این متغیر صادر (export) شود، پوسته‌های فرزند هر گزینه موجود در فهرست را فعال خواهند کرد. این متغیر فقط‌خواندنی است. .TP .B SHLVL هر بار که نمونهای از .B bash آغاز به کار میکند، یک واحد به مقدار آن افزوده میشود. .TP .B SRANDOM هر بار که به این متغیر ارجاع داده شود، به یک عدد تصادفی کاذب ۳۲ بیتی بسط مییابد. تولیدکنندهٔ اعداد تصادفی در سیستمهایی که از .FN /dev/urandom یا .IR arc4random (3) پشتیبانی میکنند خطی نیست، بنابراین هیچ رابطهای بین هر عدد بازگردانده شده با اعداد پیش از آن وجود ندارد. تولیدکنندهٔ اعداد تصادفی نمیتواند مقداردهی اولیه (seed) شود، بنابراین مقداردهی به این متغیر هیچ اثری ندارد. اگر .SM .B SRANDOM حذف (unset) شود، ویژگیهای خاص خود را از دست میدهد، حتی اگر متعاقباً مجدداً تنظیم شود. .TP .B UID به شناسهٔ کاربری کاربر فعلی بسط مییابد، که در هنگام راهاندازی پوسته مقداردهی اولیه میشود. این متغیر فقط‌خواندنی است. .PD .PP پوسته از متغیرهای زیر استفاده میکند. در برخی موارد، .B bash یک مقدار پیشفرض به متغیر اختصاص میدهد؛ این موارد در ادامه ذکر شدهاند. .PP .PD 0 .TP .B BASH_COMPAT این مقدار برای تنظیم سطح سازگاری پوسته استفاده میشود. برای شرحی از سطوح مختلف سازگاری و اثرات آنها، بخش .SM .B "حالت سازگاری پوسته (SHELL COMPATIBILITY MODE)" در زیر را ببینید. این مقدار ممکن است یک عدد اعشاری (مثلاً 4.2) یا یک عدد صحیح (مثلاً 42) متناظر با سطح سازگاری مورد نظر باشد. اگر .SM .B BASH_COMPAT تنظیم نشده باشد (unset) یا روی رشتهٔ خالی تنظیم شود، سطح سازگاری روی مقدار پیشفرض نسخهٔ فعلی تنظیم میگردد. اگر .SM .B BASH_COMPAT روی مقداری تنظیم شود که جزو سطوح سازگاری معتبر نباشد، پوسته یک پیام خطا چاپ کرده و سطح سازگاری را روی مقدار پیشفرض نسخهٔ فعلی تنظیم میکند. زیرمجموعهای از مقادیر معتبر متناظر با سطوح سازگاری توصیف‌شده در زیر در بخش .SM .BR "حالت سازگاری پوسته (SHELL COMPATIBILITY MODE)" هستند. برای مثال، 4.2 و 42 مقادیر معتبری هستند که متناظر با گزینهٔ \fBcompat42\fP در دستور \fBshopt\fP بوده و سطح سازگاری را روی 42 تنظیم میکنند. نسخهٔ فعلی نیز یک مقدار معتبر است. .TP .B BASH_ENV اگر این پارامتر هنگام اجرای یک اسکریپت پوسته توسط \fBbash\fP تنظیم شده باشد، مقدار بسط‌یافتهٔ آن بهعنوان یک نام فایل حاوی دستوراتی تفسیر میشود که قبل از خواندن و اجرای دستورات اسکریپت، پوسته را مقداردهی اولیه میکنند. مقدار .SM .B BASH_ENV پیش از آنکه بهعنوان نام فایل تفسیر شود، تحت بسط پارامتر، جایگزینی دستور، و بسط حسابی قرار میگیرد. از .SM .B PATH برای جستجوی نام فایل حاصله استفاده نمیشود. .TP .B BASH_XTRACEFD اگر روی یک عدد صحیح متناظر با یک توصیفگر فایل معتبر تنظیم شود، \fBbash\fP خروجی ردگیری (trace) تولید شده در هنگام فعال بودن .Q "set \-x" را بهجای خطای استاندارد، درون آن توصیفگر فایل مینویسد. هنگامی که .SM .B BASH_XTRACEFD حذف (unset) شود یا مقدار جدیدی به آن اختصاص یابد، توصیفگر فایل بسته میشود. حذف کردن .SM .B BASH_XTRACEFD یا اختصاص رشتهٔ خالی به آن موجب میشود که خروجی ردگیری به خطای استاندارد ارسال شود. توجه داشته باشید که تنظیم .SM .B BASH_XTRACEFD روی 2 (توصیفگر فایل خطای استاندارد) و سپس حذف آن (unset) منجر به بسته شدن خطای استاندارد خواهد شد. .TP .B CDPATH مسیر جستجو برای دستور .BR cd . این متغیر فهرستی جداشده با دونقطه از دایرکتوریهایی است که پوسته در آنها به دنبال دایرکتوریهای مشخص‌شده بهعنوان آرگومان برای دستور .B cd میگردد. یک مقدار نمونه عبارت است از .Q .:\*~:/usr . .TP .B CHILD_MAX تعداد مقادیر وضعیت خروج فرزندان را تعیین میکند تا پوسته آنها را به خاطر بسپارد. \fBBash\fP اجازه نخواهد داد این مقدار از حداقل تعیین‌شده توسط .SM POSIX\c کاهش یابد، و یک مقدار حداکثر نیز وجود دارد (در حال حاضر ۸۱۹۲) که این متغیر نمیتواند از آن فراتر رود. مقدار حداقل وابسته به سیستم است. .TP .B COLUMNS توسط دستور مرکب \fBselect\fP برای تعیین عرض ترمینال هنگام چاپ فهرستهای گزینش استفاده میشود. در صورت فعال بودن گزینه .B checkwinsize یا در یک پوسته تعاملی پس از دریافت .SM .BR SIGWINCH ، بهطور خودکار تنظیم میشود. .TP .B COMPREPLY یک متغیر آرایهای که \fBbash\fP از آن تکمیل‌های احتمالی تولیدشده توسط یک تابع پوسته را که توسط امکان تکمیل برنامه‌پذیر فراخوانی شده است میخواند (بخش \fBتکمیل برنامه‌پذیر (Programmable Completion)\fP در زیر را ببینید). هر عنصر آرایه شامل یک تکمیل احتمالی است. .TP .B EMACS اگر هنگام شروع به کار پوسته، \fBbash\fP این متغیر را در محیط با مقدار .Q t بیابد، فرض میکند که پوسته در یک بافر پوسته Emacs اجرا میشود و ویرایش خط را غیرفعال میکند. .TP .B ENV هنگامی که یک پوسته تعاملی در حالت posix فراخوانی میشود، مشابه .SM .B BASH_ENV (بخش .SM .B فراخوانی (INVOCATION) در بالا را ببینید) بسط داده شده و اجرا میشود. .TP .B EXECIGNORE فهرستی جداشده با دونقطه از الگوهای پوسته (بخش \fBتطبیق الگو (Pattern Matching)\fP را ببینید) که مجموعهای از نام پروندهها را تعریف میکند تا در جستجوی دستور با استفاده از .SM .BR PATH نادیده گرفته شوند. پروندههایی که نام مسیر کامل آنها با یکی از این الگوها مطابقت داشته باشد، برای اهداف تکمیل و اجرای دستور از طریق جستجوی .SM .B PATH بهعنوان پروندههای قابل اجرا در نظر گرفته نمیشوند. این متغیر بر رفتار دستورات \fB[\fP، \fBtest\fP و \fB[[\fP تأثیری ندارد. نام مسیرهای کامل در جدول هش دستورات مشمول .SM .BR EXECIGNORE نمیشوند. از این متغیر برای نادیده گرفتن پروندههای کتابخانه مشترک که بیت اجرایی آنها تنظیم شده اما پروندههای اجرایی نیستند، استفاده کنید. تطبیق الگو از تنظیمات گزینه پوسته \fBextglob\fP پیروی میکند. .TP .B FCEDIT ویرایشگر پیشفرض برای دستور توکار .BR fc . .TP .B FIGNORE فهرستی جداشده با دونقطه از پسوندها برای نادیده گرفتن هنگام انجام تکمیل نام پرونده (بخش .SM .B خط خوان (READLINE) در زیر را ببینید). پروندهای که پسوند آن با یکی از مدخلهای موجود در .SM .B FIGNORE مطابقت داشته باشد، از فهرست نام پروندههای مطابقت‌یافته کنار گذاشته میشود. یک مقدار نمونه عبارت است از .Q .o:\*~ . .TP .B FUNCNEST اگر روی یک مقدار عددی بزرگتر از ۰ تنظیم شود، حداکثر سطح تو در تویی تابع را تعریف میکند. فراخوانیهای تابعی که از این سطح تو در تویی فراتر روند، باعث لغو دستور جاری میشوند. .TP .B GLOBIGNORE فهرستی از الگوها که با دونقطه (:) از هم جدا شده‌اند و مجموعه‌ای از نام‌های فایلی را مشخص می‌کنند که باید در بسط مسیر نادیده گرفته شوند. اگر یک نام فایل که با یک الگوی بسط مسیر مطابقت دارد، با یکی از الگوهای موجود در .SM .B GLOBIGNORE نیز مطابقت داشته باشد، از فهرست موارد منطبق حذف می‌شود. تطبیق الگو از تنظیمات گزینه پوسته \fBextglob\fP پیروی می‌کند. .TP .B GLOBSORT .PD نحوه مرتب‌سازی نتایج بسط نام مسیر را کنترل می‌کند. مقدار این متغیر معیار مرتب‌سازی و ترتیب مرتب‌سازی را برای نتایج بسط نام مسیر مشخص می‌کند. اگر این متغیر تنظیم نشده باشد یا روی یک رشته خالی (null) تنظیم شده باشد، بسط نام مسیر از رفتار تاریخی مرتب‌سازی بر اساس نام استفاده می‌کند، به ترتیب واژه‌نگاشتی صعودی همان‌طور که توسط متغیر پوسته .SM .B \%LC_COLLATE تعیین می‌شود. .IP در صورت تنظیم، یک مقدار معتبر با یک \fI+\fP اختیاری که نادیده گرفته می‌شود، یا \fI\-\fP که ترتیب مرتب‌سازی را از صعودی به نزولی معکوس می‌کند شروع می‌شود، و به دنبال آن یک مشخص‌کننده مرتب‌سازی قرار می‌گیرد. مشخص‌کننده‌های معتبر مرتب‌سازی عبارتند از .IR name ، .IR \%numeric ، .IR size ، .IR mtime ، .IR atime ، .IR ctime ، و .IR blocks ، که به ترتیب فایل‌ها را بر اساس نام، نام‌ها بر اساس ترتیب عددی به جای ترتیب واژه‌نگاشتی، اندازه فایل، زمان آخرین تغییر، زمان آخرین دسترسی، زمان تغییر inode، و تعداد بلوک‌ها مرتب می‌کنند. اگر هر یک از کلیدهای غیرنام برابر مقایسه شوند (به عنوان مثال، اگر اندازه دو فایل یکسان باشد)، مرتب‌سازی از نام به عنوان کلید مرتب‌سازی ثانویه استفاده می‌کند. .IP به عنوان مثال، مقدار \fI\-mtime\fP نتایج را به ترتیب نزولی بر اساس زمان تغییر مرتب می‌کند (جدیدترین در ابتدا). .IP مشخص‌کننده \fInumeric\fP با نام‌هایی که صرفاً از ارقام تشکیل شده‌اند مانند اعداد رفتار می‌کند و آن‌ها را با استفاده از مقدار عددی‌شان مرتب می‌کند (بنابراین، به عنوان مثال، .Q 2 قبل از .Q 10 مرتب می‌شود). هنگام استفاده از \fInumeric\fP، نام‌های حاوی نویسه‌های غیررقمی پس از تمام نام‌های کاملاً رقمی قرار می‌گیرند و با استفاده از رفتار سنتی بر اساس نام مرتب می‌شوند. .IP مشخص‌کننده مرتب‌سازی \fInosort\fP مرتب‌سازی را به طور کامل غیرفعال می‌کند؛ .B bash نتایج را به همان ترتیبی که از سیستم فایل خوانده می‌شوند برمی‌گرداند، و هرگونه \fI\-\fP ابتدایی را نادیده می‌گیرد. .IP اگر مشخص‌کننده مرتب‌سازی وجود نداشته باشد، به طور پیش‌فرض روی \fIname\fP قرار می‌گیرد، بنابراین مقدار \fI+\fP معادل رشته خالی است، و مقدار \fI-\fP بر اساس نام به ترتیب نزولی مرتب می‌کند. هر مقدار نامعتبر، رفتار مرتب‌سازی تاریخی را بازمی‌گرداند. .PD 0 .TP .B HISTCONTROL فهرستی از مقادیر که با دونقطه (:) از هم جدا شده‌اند و نحوه ذخیره دستورات در فهرست تاریخچه را کنترل می‌کنند. اگر فهرست مقادیر شامل .I ignorespace باشد، خطوطی که با یک نویسه .B فاصله (space) شروع می‌شوند در فهرست تاریخچه ذخیره نمی‌شوند. مقدار .I ignoredups باعث می‌شود خطوطی که با ورودی قبلی تاریخچه مطابقت دارند ذخیره نشوند. مقدار .I ignoreboth کوتاه‌نوشتی برای \fIignorespace\fP و \fIignoredups\fP است. مقدار .I erasedups باعث می‌شود تمام خطوط قبلی که با خط جاری مطابقت دارند، قبل از ذخیره شدن آن خط، از فهرست تاریخچه حذف شوند. هر مقداری که در فهرست بالا نباشد نادیده گرفته می‌شود. اگر .SM .B HISTCONTROL تنظیم نشده باشد، یا حاوی مقدار معتبری نباشد، \fBbash\fP تمام خطوط خوانده شده توسط مفسر پوسته را با توجه به مقدار .SM .BR HISTIGNORE ، در فهرست تاریخچه ذخیره می‌کند. اگر خط اول یک دستور مرکب چندخطی ذخیره شده باشد، خطوط دوم و بعدی بررسی نمی‌شوند، و بدون در نظر گرفتن مقدار .SM .BR HISTCONTROL به تاریخچه افزوده می‌شوند. اگر خط اول ذخیره نشده باشد، خطوط دوم و بعدی دستور نیز ذخیره نمی‌شوند. .TP .B HISTFILE نام فایلی که تاریخچه دستورات در آن ذخیره می‌شود (به .SM .B HISTORY در زیر مراجعه کنید). \fBBash\fP مقدار پیش‌فرضی برابر با .FN \*~/.bash_history به آن اختصاص می‌دهد. اگر .SM .B HISTFILE تنظیم‌نشده (unset) یا تهی (null) باشد، پوسته هنگام خروج، تاریخچه دستورات را ذخیره نمی‌کند. .TP .B HISTFILESIZE حداکثر تعداد خطوط موجود در فایل تاریخچه. هنگامی که مقداری به این متغیر اختصاص داده می‌شود، در صورت نیاز، فایل تاریخچه با حذف قدیمی‌ترین مدخل‌ها کوتاه (truncate) می‌شود تا تعداد مدخل‌های تاریخچه‌ای که در مجموع بیش از آن تعداد خط نمی‌شوند را در خود جای دهد. اگر فهرست تاریخچه شامل مدخل‌های چندخطی باشد، ممکن است فایل تاریخچه برای جلوگیری از باقی گذاشتن مدخل‌های تاریخچه ناقص، خطوط بیشتری نسبت به این حداکثر داشته باشد. فایل تاریخچه همچنین پس از نوشتن در آن هنگام خروج پوسته یا توسط دستور توکار .B \%history به این اندازه بریده و کوتاه می‌شود. اگر مقدار 0 باشد، فایل تاریخچه به اندازه صفر بریده و خالی می‌شود. مقادیر غیرعددی و مقادیر عددی کمتر از صفر، مانع از کوتاه شدن فایل می‌شوند. پوسته مقدار پیش‌فرض را پس از خواندن فایل‌های راه‌اندازی، به مقدار .SM .B HISTSIZE تنظیم می‌کند. .TP .B HISTIGNORE فهرستی از الگوهای جداشده با دونقطه (:) که برای تصمیم‌گیری درباره اینکه کدام خطوط فرمان باید در فهرست تاریخچه ذخیره شوند، استفاده می‌شود. اگر یک خط فرمان با یکی از الگوهای موجود در مقدار .SM .BR HISTIGNORE مطابقت داشته باشد، در فهرست تاریخچه ذخیره نمی‌شود. هر الگو به ابتدای خط مهار شده است (anchored) و باید با کل خط مطابقت داشته باشد (\fBbash\fP به‌طور ضمنی یک .Q \fB*\fP به آن اضافه نمی‌کند). هر الگو پس از اعمال بررسی‌های مشخص‌شده توسط .SM .B HISTCONTROL روی خط آزمایش می‌شود. علاوه بر نویسه‌های معمول تطبیق الگوی پوسته، .Q \fB&\fP با خط تاریخچه قبلی مطابقت دارد. یک نویسه اسلش وارو (backslash) نویسه .Q \fB&\fP را گریزدهی (escape) می‌کند؛ اسلش وارو قبل از تلاش برای تطبیق حذف می‌شود. اگر خط اول یک دستور مرکب چندخطی ذخیره شده باشد، خط دوم و خطوط بعدی آزمایش نمی‌شوند، و بدون در نظر گرفتن مقدار .SM .BR HISTIGNORE به تاریخچه اضافه می‌شوند. اگر خط اول ذخیره نشده باشد، خط دوم و خطوط بعدی دستور نیز ذخیره نخواهند شد. تطبیق الگو از تنظیمات گزینه پوسته‌ای .B \%extglob پیروی می‌کند. .IP .SM .B HISTIGNORE برخی از عملکردهای .SM .BR HISTCONTROL را نیز در بر می‌گیرد. الگوی .Q & همانند .Q \%ignoredups است، و الگوی .Q "[ ]*" همانند .Q \%ignorespace است. ترکیب این دو الگو با جدا کردن آنها توسط دونقطه (:)، قابلیت .Q \%ignoreboth را فراهم می‌کند. .TP .B HISTSIZE تعداد دستوراتی که باید در تاریخچه دستورات به خاطر سپرده شوند (به .SM .B HISTORY در زیر مراجعه کنید). اگر مقدار 0 باشد، دستورات در فهرست تاریخچه ذخیره نمی‌شوند. مقادیر عددی کمتر از صفر باعث می‌شوند که تمام دستورات در فهرست تاریخچه ذخیره شوند (هیچ محدودیتی وجود نخواهد داشت). پوسته پس از خواندن فایل‌های راه‌اندازی، مقدار پیش‌فرض را روی 500 تنظیم می‌کند. .TP .B HISTTIMEFORMAT اگر این متغیر مقداردهی شده و تهی نباشد، مقدار آن به عنوان یک رشته قالب‌بندی برای .IR strftime (3) جهت چاپ برچسب زمان مرتبط با هر مدخل تاریخچه که توسط دستور توکار \fBhistory\fP نمایش داده می‌شود، استفاده می‌گردد. اگر این متغیر مقداردهی شده باشد، پوسته برچسب‌های زمانی را در فایل تاریخچه می‌نویسد تا در نشست‌های مختلف پوسته حفظ شوند. این سازوکار از نویسه توضیح تاریخچه برای تشخیص برچسب‌های زمانی از سایر خطوط تاریخچه استفاده می‌کند. .TP .B HOME دایرکتوری خانگی کاربر فعلی؛ آرگومان پیشفرض برای دستور توکار \fBcd\fP. مقدار این متغیر همچنین هنگام انجام بسط مدک (تغییرمسیر تیلده) استفاده می‌شود. .TP .B HOSTFILE شامل نام فایلی با همان قالب .FN /etc/hosts است که باید هنگامی که پوسته نیاز به تکمیل نام میزبان دارد خوانده شود. فهرست تکمیل‌های ممکن نام میزبان ممکن است در حین اجرای پوسته تغییر کند؛ دفعه بعد که پس از تغییر مقدار، تکمیل نام میزبان تلاش شود، .B bash محتویات فایل جدید را به فهرست موجود اضافه می‌کند. اگر .SM .B HOSTFILE تنظیم شده باشد ولی مقداری نداشته باشد، یا نام فایلی قابل‌خواندن را مشخص نکند، \fBbash\fP تلاش می‌کند تا .FN /etc/hosts را برای دریافت فهرست تکمیل‌های ممکن نام میزبان بخواند. هنگامی که .SM .B HOSTFILE تنظیم‌نشده (unset) باشد، \fBbash\fP فهرست نام میزبان را پاک می‌کند. .TP .B IFS به معنی .I جداکننده فیلد داخلی (Internal Field Separator) است که برای تفکیک کلمات پس از بسط و همچنین تقسیم خطوط به کلمات با استفاده از دستور توکار .B read به کار می‌رود. تفکیک کلمات در زیر در بخش .SM .BR "بسط (EXPANSION)" شرح داده شده است. مقدار پیشفرض .Q است. .TP .B IGNOREEOF رفتار یک پوسته محاوره‌ای را هنگام دریافت نویسه .SM .B EOF به عنوان تنها ورودی کنترل می‌کند. اگر تنظیم شود، مقدار آن تعداد متوالی نویسه‌های .SM .B EOF است که باید قبل از خروج .B bash به عنوان نخستین نویسه‌ها در یک خط ورودی تایپ شوند. اگر متغیر تنظیم شده باشد ولی مقدار عددی نداشته باشد، یا مقدار آن تهی باشد، مقدار پیشفرض ۱۰ است. اگر تنظیم نشده باشد، .SM .B EOF بیانگر پایان ورودی به پوسته است. .TP .B INPUTRC نام فایل برای فایل راه‌اندازی .B readline است، که جایگزین مقدار پیشفرض .FN \*~/.inputrc می‌شود (به .SM .B "خط خوان (READLINE)" در زیر مراجعه کنید). .TP .B INSIDE_EMACS اگر این متغیر هنگام شروع به کار پوسته در محیط ظاهر شود، \fBbash\fP فرض می‌کند که درون یک بافر پوسته Emacs در حال اجراست و ممکن است بسته به مقدار .SM .BR TERM ، ویرایش خط را غیرفعال کند. .TP .B LANG برای تعیین ردهٔ محلی (locale) برای هر ردهای که صریحاً با متغیری که با \fBLC_\fP آغاز میشود مشخص نشده باشد، استفاده میگردد. .TP .B LC_ALL این متغیر مقدار .SM .B LANG و هر متغیر دیگری که با \fBLC_\fP شروع شده و یک ردهٔ محلی را تعیین میکند، بازنویسی (باطل) مینماید. .TP .B LC_COLLATE این متغیر ترتیب تطبیق و مقایسه (collation order) را هنگام مرتبسازی نتایج بسط نام مسیر (pathname expansion) تعیین کرده، و رفتار عبارات بازهای، کلاسهای همارزی و توالیهای تطبیقی را در داخل بسط نام مسیر و تطبیق الگو کنترل میکند. .TP .B LC_CTYPE این متغیر تفسیر کاراکترها و رفتار کلاسهای کاراکتری را در درون بسط نام مسیر و تطبیق الگو تعیین میکند. .TP .B LC_MESSAGES این متغیر محلی (locale) مورد استفاده برای ترجمهٔ رشتههای نقل‌قول دوتایی (double-quoted) را که قبل از آنها یک \fB$\fP آمده است، تعیین مینماید. .TP .B LC_NUMERIC این متغیر ردهٔ محلی مورد استفاده برای قالببندی اعداد را تعیین میکند. .TP .B LC_TIME این متغیر ردهٔ محلی مورد استفاده برای قالببندی تاریخ و زمان را تعیین میکند. .TP .B LINES توسط دستور مرکب \fBselect\fP برای تعیین طول ستون جهت چاپ لیستهای انتخابی استفاده میشود. در صورت فعال بودن گزینهٔ .B checkwinsize یا در یک پوستهٔ تعاملی هنگام دریافت سیگنال .SM .BR SIGWINCH به طور خودکار تنظیم میگردد. .TP .B MAIL اگر مقدار آن روی نام یک فایل یا دایرکتوری تنظیم شده باشد و متغیر .SM .B MAILPATH تنظیم نشده باشد، .B bash کاربر را از رسیدن ایمیل به فایل مشخص‌شده یا دایرکتوری با قالب Maildir باخبر میسازد. .TP .B MAILCHECK مشخص میکند که هر چند وقت یک‌بار (بر حسب ثانیه) .B bash ایمیل را بررسی کند. مقدار پیشفرض ۶۰ ثانیه است. هنگامی که زمان بررسی ایمیل فرا برسد، پوسته این کار را قبل از نمایش اعلان اولیه (primary prompt) انجام میدهد. اگر این متغیر مقداردهی نشده باشد، یا مقداری غیرعددی یا عددی کوچکتر از صفر داشته باشد، پوسته بررسی ایمیل را غیرفعال میکند. .TP .B MAILPATH فهرستی از نامهای فایل جداشده با دونقطه (colon) برای بررسی ایمیل. پیامی که باید هنگام رسیدن ایمیل به یک فایل خاص چاپ شود را میتوان با جدا کردن نام فایل از پیام به وسیلهٔ یک .Q ? مشخص کرد. هنگامی که در متن پیام استفاده شود، \fB$_\fP به نام فایل ایمیل فعلی بسط مییابد. به عنوان مثال: .RS .PP .EX \fBMAILPATH\fP=\*'/var/mail/bfox?\*"You have mail\*":\*~/shell\-mail?\*"$_ has mail!\*"\*' .EE .PP .B Bash میتواند طوری پیکربندی شود که یک مقدار پیشفرض برای این متغیر فراهم کند (به طور پیشفرض هیچ مقداری وجود ندارد)، اما محل فایلهای ایمیل کاربر که از آن استفاده میکند وابسته به سیستم است (مثلاً /var/mail/\fB$USER\fP). .RE .TP .B OPTERR اگر روی مقدار ۱ تنظیم شده باشد، .B bash پیامهای خطای ایجاد شده توسط دستور توکار .B getopts را نمایش میدهد (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر را ببینید). .SM .B OPTERR هر بار که پوسته فراخوانی میشود یا یک اسکریپت پوسته اجرا میگردد، با مقدار ۱ مقداردهی اولیه میشود. .TP .B PATH مسیر جستجو برای دستورات. این یک فهرست جداشده با دونقطه (:) از دایرکتوری‌هایی است که در آن‌ها پوسته به دنبال دستورات می‌گردد (بخش .SM .B "اجرای دستور (COMMAND EXECUTION)" در زیر را ببینید). یک نام دایرکتوری با طول صفر (تهی/null) در مقدار .SM .B PATH نشان‌دهنده دایرکتوری جاری است. یک نام دایرکتوری تهی ممکن است به صورت دو دونقطه متوالی، یا به صورت یک دونقطه در ابتدا یا انتهای مقدار ظاهر شود. مسیر پیش‌فرض وابسته به سیستم است، و توسط مدیری که .B bash را نصب می‌کند تنظیم می‌شود. یک مقدار رایج به شرح زیر است: .RS .RS 5n .EX /usr/local/bin:/usr/local/sbin:\c .if \n(LL<78n .br /usr/bin:/usr/sbin:/bin:/sbin .EE .RE .RE .TP .B POSIXLY_CORRECT اگر این متغیر هنگام شروع \fBbash\fP در محیط وجود داشته باشد، پوسته قبل از خواندن فایل‌های راه‌اندازی وارد حالت posix می‌شود، درست مانند اینکه گزینه فراخوانی .B \-\-posix ارائه شده باشد. اگر این متغیر در حین اجرای پوسته تنظیم شود، \fBbash\fP حالت posix را فعال می‌کند، گویی دستور .Q "set \-o posix" اجرا شده است. هنگامی که پوسته وارد حالت posix می‌شود، در صورتی که این متغیر قبلاً تنظیم نشده باشد، آن را تنظیم می‌کند. .TP .B PROMPT_COMMAND اگر این متغیر تنظیم شده باشد و یک آرایه باشد، مقدار هر عنصر مقداردهی‌شده قبل از صدور هر خط اعلان اصلی به عنوان یک دستور اجرا می‌شود. اگر تنظیم شده باشد اما متغیر آرایه‌ای نباشد، مقدار آن به عنوان دستوری برای اجرا در نظر گرفته می‌شود. .TP .B PROMPT_DIRTRIM اگر روی عددی بزرگ‌تر از صفر تنظیم شود، این مقدار به عنوان تعداد بخش‌های انتهایی دایرکتوری برای نگه‌داشتن هنگام بسط کدهای گریز رشته خط اعلان \fB\ew\fP و \fB\eW\fP استفاده می‌شود (بخش .SM .B "خط اعلان (PROMPTING)" در زیر را ببینید). نویسه‌های حذف‌شده با سه نقطه (...) جایگزین می‌شوند. .TP .B PS0 مقدار این پارامتر بسط داده می‌شود (بخش .SM .B "خط اعلان (PROMPTING)" در زیر را ببینید) و توسط پوسته‌های تعاملی پس از خواندن یک دستور و قبل از اجرای آن نمایش داده می‌شود. .TP .B PS1 مقدار این پارامتر بسط داده می‌شود (بخش .SM .B "خط اعلان (PROMPTING)" در زیر را ببینید) و به عنوان رشته خط اعلان اصلی استفاده می‌شود. مقدار پیش‌فرض آن .Q \es\-\ev\e$\ . است. .TP .B PS2 مقدار این پارامتر همانند .SM .B PS1 بسط داده می‌شود و به عنوان رشته خط اعلان ثانویه استفاده می‌شود. پیش‌فرض آن .Q >\ . است. .TP .B PS3 مقدار این پارامتر به عنوان خط اعلان برای دستور .B select استفاده می‌شود (بخش .SM .B "گرامر پوسته (SHELL GRAMMAR)" در بالا را ببینید). .TP .B PS4 مقدار این پارامتر همانند .SM .B PS1 بسط داده می‌شود و مقدار آن قبل از هر دستوری که .B bash در طول ردیابی اجرا (execution trace) نمایش می‌دهد، چاپ می‌شود. نخستین نویسه از مقدار بسط‌یافته .SM .B PS4 در صورت لزوم، برای نشان دادن چندین سطح از ارجاع غیرمستقیم، چندین بار تکرار می‌شود. پیش‌فرض آن .Q +\ . است. .TP .B SHELL این متغیر به نام مسیر کامل پوسته بسط می‌یابد. اگر هنگام شروع به کار پوسته مقداردهی نشده باشد، .B bash نام مسیر کامل پوسته ورود به سیستم کاربر فعلی را به آن اختصاص می‌دهد. .TP .B TIMEFORMAT مقدار این پارامتر به‌عنوان یک رشته قالب‌بندی استفاده می‌شود که نحوه نمایش اطلاعات زمان‌بندی برای خطوط لوله‌ای که با کلمه رزرو شده .B time شروع می‌شوند را مشخص می‌کند. نویسه \fB%\fP معرف یک دنباله گریز است که به یک مقدار زمانی یا سایر اطلاعات بسط داده می‌شود. دنباله‌های گریز و معانی آنها به شرح زیر هستند؛ قلاب‌ها بخش‌های اختیاری را نشان می‌دهند. .PP .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 %P درصد استفاده از CPU، محاسبه‌شده به‌صورت (%U + %S) / %R. .PD .RE .IP شناسه اختیاری \fIp\fP رقمی است که \fIدقت\fP (precision) را مشخص می‌کند، یعنی تعداد ارقام اعشاری پس از ممیز. مقدار 0 باعث می‌شود ممیز یا رقم اعشاری در خروجی نمایش داده نشود. \fBtime\fP حداکثر شش رقم بعد از ممیز را چاپ می‌کند؛ مقادیر \fIp\fP بزرگ‌تر از 6 به 6 تبدیل می‌شوند. اگر \fIp\fP مشخص نشده باشد، \fBtime\fP سه رقم بعد از ممیز را چاپ می‌کند. .IP گزینه اختیاری \fBl\fP قالبی طولانی‌تر شامل دقیقه‌ها را به شکل \fIMM\fPm\fISS\fP.\fIFF\fPs مشخص می‌کند. مقدار \fIp\fP تعیین می‌کند که آیا بخش اعشاری گنجانده شود یا خیر. .IP اگر این متغیر مقداردهی نشده باشد، \fBbash\fP طوری رفتار می‌کند که گویی دارای مقدار \fB$\*'\enreal\et%3lR\enuser\et%3lU\ensys\et%3lS\*'\fP است. اگر مقدار آن تهی (null) باشد، \fBbash\fP هیچ‌گونه اطلاعات زمان‌بندی را نمایش نمی‌دهد. هنگام نمایش رشته قالب‌بندی، یک خط جدید در انتهای آن افزوده می‌شود. .PD 0 .TP .B TMOUT اگر به مقداری بزرگ‌تر از صفر تنظیم شود، دستور توکار \fBread\fP از این مقدار به‌عنوان مهلت زمانی (timeout) پیش‌فرض خود استفاده می‌کند. دستور \fBselect\fP در صورتی که ورودی از یک ترمینال باشد و پس از .SM .B TMOUT ثانیه ورودی دریافت نشود، خاتمه می‌یابد. در یک پوسته تعاملی، این مقدار به‌عنوان تعداد ثانیه‌هایی تفسیر می‌شود که باید پس از نمایش اعلان اصلی برای دریافت یک سطر ورودی منتظر ماند. اگر یک سطر کامل از ورودی دریافت نشود، .B Bash پس از انتظار برای آن تعداد ثانیه خاتمه می‌یابد. .TP .B TMPDIR در صورت تنظیم، \fBbash\fP از مقدار آن به‌عنوان نام دایرکتوری‌ای استفاده می‌کند که \fBbash\fP فایل‌های موقت را برای استفاده پوسته در آن ایجاد می‌نماید. .TP .B auto_resume این متغیر نحوه تعامل پوسته با کاربر و مدیریت کارها (job control) را کنترل می‌کند. اگر این متغیر تنظیم شود، دستورات ساده‌ای که تنها از یک کلمه تشکیل شده‌اند، بدون تغییر مسیرها، به‌عنوان کاندیداهایی برای ازسرگیری یک کار متوقف‌شده موجود در نظر گرفته می‌شوند. هیچ ابهامی مجاز نیست؛ اگر بیش از یک کار وجود داشته باشد که با آن کلمه شروع شود یا حاوی آن کلمه باشد، کاری که اخیراً دسترسی بیشتری داشته است انتخاب می‌شود. .I نام یک کار متوقف‌شده، در این زمینه، همان خط فرمانی است که برای شروع آن به کار رفته، همان‌طور که توسط \fBjobs\fP نمایش داده می‌شود. اگر به مقدار .IR exact تنظیم شود، کلمه باید دقیقاً با نام کار متوقف‌شده مطابقت داشته باشد؛ اگر به .IR substring تنظیم شود، کلمه باید با یک زیررشته از نام کار متوقف‌شده مطابقت کند. مقدار .I substring عملکردی مشابه با شناسه کار .B %? ارائه می‌دهد (بخش .SM .B "مدیریت کارها (JOB CONTROL)" را در زیر ببینید). اگر به هر مقدار دیگری تنظیم شود (برای مثال، .IR prefix )، کلمه باید پیشوندی از نام کار متوقف‌شده باشد؛ این حالت عملکردی مشابه شناسه کار \fB%\fP\fIstring\fP را ارائه می‌دهد. .TP .B histchars دو یا سه نویسه‌ای که بسط تاریخچه، جایگزینی سریع و نشانه‌گذاری (توکن‌بندی) را کنترل می‌کنند (بخش .SM .B "بسط تاریخچه (HISTORY EXPANSION)" در زیر را ببینید). نویسه اول، نویسه \fIبسط تاریخچه\fP است؛ نویسه‌ای که یک بسط تاریخچه را آغاز می‌کند، که معمولاً .Q \fB!\fP است. نویسه دوم، نویسه \fIجایگزینی سریع\fP است، که معمولاً .Q \fB\*^\fP است. هنگامی که به عنوان اولین نویسه در خط ظاهر می‌شود، جایگزینی تاریخچه، دستور قبلی را با جایگزین کردن یک رشته به جای رشته دیگر، تکرار می‌کند. نویسه اختیاری سوم، نویسه \fIتوضیحات تاریخچه\fP است، که معمولاً .Q \fB#\fP است، و نشان می‌دهد که بقیه خط یک توضیح (کامنت) است هنگامی که به عنوان اولین نویسه یک کلمه ظاهر شود. نویسه توضیحات تاریخچه، جایگزینی تاریخچه را برای کلمات باقی‌مانده در خط غیرفعال می‌کند. این امر لزوماً باعث نمی‌شود که تجزیه‌کننده پوسته بقیه خط را به عنوان یک توضیح در نظر بگیرد. .PD .SS آرایه‌ها (Arrays) .B Bash متغیرهای آرایه یک‌بعدی اندیس‌دار و متناظر (انجمنی) را فراهم می‌کند. هر متغیری می‌تواند به عنوان یک آرایه اندیس‌دار استفاده شود؛ دستور توکار .B declare به طور صریح یک آرایه را اعلان می‌کند. هیچ محدودیت حداکثری برای اندازه یک آرایه وجود ندارد، و هیچ الزامی هم نیست که اعضا به طور پیوسته اندیس‌گذاری یا مقداردهی شوند. آرایه‌های اندیس‌دار با استفاده از عبارات حسابی ارجاع داده می‌شوند که باید به یک عدد صحیح بسط یابند (بخش .SM .B ارزیابی حسابی (ARITHMETIC EVALUATION) در زیر را ببینید) و مبتنی بر صفر هستند؛ آرایه‌های متناظر با استفاده از رشته‌های دلخواه ارجاع داده می‌شوند. مگر در مواردی که خلاف آن ذکر شده باشد، اندیس‌های آرایه اندیس‌دار باید اعداد صحیح غیرمنفی باشند. .PP پوسته بسط پارامتر و متغیر، بسط حسابی، جایگزینی دستور، و حذف نقل‌قول را روی زیرنویس‌های (اندیس‌های) آرایه اندیس‌دار انجام می‌دهد. از آنجا که این کار می‌تواند به طور بالقوه منجر به رشته‌های خالی شود، اندیس‌گذاری زیرنویس با آنها به عنوان عباراتی رفتار می‌کند که به 0 ارزیابی می‌شوند. .PP پوسته بسط تیلدا، بسط پارامتر و متغیر، بسط حسابی، جایگزینی دستور، و حذف نقل‌قول را روی زیرنویس‌های (کلیدهای) آرایه متناظر انجام می‌دهد. رشته‌های خالی نمی‌توانند به عنوان کلیدهای آرایه متناظر استفاده شوند. .PP \fBBash\fP در صورتی که هر متغیری با استفاده از ساختار زیر مقداردهی شود، به طور خودکار یک آرایه اندیس‌دار ایجاد می‌کند: .RS \fIname\fP[\fIsubscript\fP]=\fIvalue\fP \&. .RE با .I subscript به عنوان یک عبارت حسابی رفتار می‌شود که باید به عددی بزرگ‌تر یا مساوی با صفر ارزیابی شود. برای اعلان صریح یک آرایه اندیس‌دار، از دستور زیر استفاده کنید: .RS .BI "declare \-a\ " name .RE (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر را ببینید). .RS \fBdeclare \-a\fP \fIname\fP[\fIsubscript\fP] .RE نیز پذیرفته می‌شود؛ \fIsubscript\fP نادیده گرفته می‌شود. .PP آرایه‌های متناظر با استفاده از دستور زیر ایجاد می‌شوند: .RS .BI "declare \-A\ " name .RE \&. .PP ویژگی‌ها (سمت‌ها) را می‌توان برای یک متغیر آرایه با استفاده از دستورات توکار .B \%declare و .B \%readonly مشخص کرد. هر ویژگی برای تمام اعضای یک آرایه اعمال می‌شود. .PP مقداردهی آرایه‌ها با استفاده از انتساب‌های مرکب به فرم \fIname\fP=\fB(\fPvalue\fI1\fP .\|.\|.\& value\fIn\fP\fB)\fP انجام می‌شود، که در آن هر \fIvalue\fP می‌تواند به فرم [\fIsubscript\fP]=\fIstring\fP باشد. انتساب‌های آرایه نمایه‌دار به چیزی جز \fIstring\fP نیاز ندارند. هر \fIvalue\fP در این فهرست با استفاده از بسط‌های پوسته که در ادامه ذیل .SM .BR EXPANSION توضیح داده شده است بسط می‌یابد، اما \fIvalue\fPهایی که انتساب‌های معتبر متغیر شامل کروشه‌ها و زیرنویس هستند، مانند انتساب‌های متغیر تکی، تحت بسط آک BeautifulSoup (بسط قلاب) و تفکیک کلمات قرار نمی‌گیرند. .PP هنگام انتساب به آرایه‌های نمایه‌دار، اگر کروشه‌ها و زیرنویس اختیاری ارائه شوند، به آن نمایه انتساب داده می‌شود؛ در غیر این صورت، نمایه عنصری که به آن مقدار اختصاص داده می‌شود، آخرین نمایه اختصاص‌یافته توسط عبارت به‌علاوه یک است. نمایه‌گذاری از صفر آغاز می‌شود. .PP هنگام انتساب به یک آرایه انجمنی، کلمات موجود در یک انتساب مرکب می‌توانند عبارات انتساب باشند که برای آن‌ها زیرنویس الزامی است، یا فهرستی از کلمات باشند که به عنوان توالی متناوب کلیدها و مقادیر تفسیر می‌شوند: \fIname\fP=\fB( \fP\fIkey1 value1 key2 value2\fP .\|.\|.\&\fB)\fP. این‌ها رفتاری کاملاً یکسان با \fIname\fP=\fB(\fP [\fIkey1\fP]=\fIvalue1\fP [\fIkey2\fP]=\fIvalue2\fP \&.\|.\|.\&\fB)\fP دارند. اولین کلمه در فهرست مشخص می‌کند که کلمات باقی‌مانده چگونه تفسیر شوند؛ تمام انتساب‌ها در یک فهرست باید از یک نوع باشند. هنگام استفاده از جفت‌های کلید/مقدار، کلیدها نباید وجود نداشته یا خالی باشند؛ نبود مقدار نهایی مانند رشته خالی در نظر گرفته می‌شود. .PP این نحو همچنین توسط دستور توکار .B declare پذیرفته می‌شود. عناصر مجزای آرایه را می‌توان با استفاده از نحو \fIname\fP[\fIsubscript\fP]=\fIvalue\fP که در بالا معرفی شد، مقداردهی کرد. .PP هنگام انتساب به یک آرایه نمایه‌دار، اگر .I name با یک عدد منفی زیرنویس‌گذاری شده باشد، آن عدد به‌صورت نسبی نسبت به یکی بزرگتر از حداکثر نمایه \fIname\fP تفسیر می‌شود، بنابراین نمایه‌های منفی از انتهای آرایه به عقب شمارش می‌شوند و نمایه \-1 به آخرین عنصر اشاره می‌کند. .PP عملگر .Q += هنگام انتساب با استفاده از نحو انتساب مرکب، به یک متغیر آرایه اضافه می‌کند؛ .SM .B PARAMETERS در بالا را ببینید. .PP به یک عنصر آرایه با استفاده از ${\fIname\fP[\fIsubscript\fP]} ارجاع داده می‌شود. آکولادها برای جلوگیری از تداخل با بسط مسیر الزامی هستند. اگر \fIsubscript\fP برابر با \fB@\fP یا \fB*\fP باشد، کلمه به تمام اعضای \fIname\fP بسط می‌یابد، مگر اینکه در توضیحات یک دستور توکار یا بسط کلمه طور دیگری ذکر شده باشد. این زیرنویس‌ها تنها زمانی متفاوت عمل می‌کنند که کلمه درون جفت‌کوتیشن (نقلقول دوگانه) قرار گیرد. اگر کلمه درون جفت‌کوتیشن باشد، ${\fIname\fP[*]} به یک کلمه واحد با مقدار هر عضو آرایه که با اولین نویسه متغیر ویژه .SM .B IFS جدا شده است بسط می‌یابد، و ${\fIname\fP[@]} هر عنصر \fIname\fP را به یک کلمه جداگانه بسط می‌دهد. هنگامی که هیچ عضو آرایه‌ای وجود ندارد، ${\fIname\fP[@]} به هیچ چیزی بسط نمی‌یابد. اگر بسط درون جفت‌کوتیشن در داخل یک کلمه رخ دهد، بسط پارامتر اول با بخش ابتدایی بسط کلمه اصلی الحاق می‌شود، و بسط آخرین پارامتر با بخش پایانی بسط کلمه اصلی الحاق می‌گردد. این رفتار مشابه بسط پارامترهای ویژه \fB*\fP و \fB@\fP است (بخش .B "Special Parameters" در بالا را ببینید). .PP عبارت ${#\fIname\fP[\fIsubscript\fP]} به طول ${\fIname\fP[\fIsubscript\fP]} بسط می‌یابد. اگر \fIsubscript\fP برابر با \fB*\fP یا \fB@\fP باشد، حاصل بسط تعداد عناصر موجود در آرایه خواهد بود. .PP اگر .I subscript (زیرنویس/اندیس) استفاده‌شده برای ارجاع به عنصری از یک آرایه نمایه‌شده به مقداری کمتر از صفر ارزیابی شود، به‌صورت نسبی نسبت به یکی بیشتر از بیشترین اندیس آرایه تفسیر می‌شود؛ بنابراین اندیس‌های منفی از انتهای آرایه به سمت عقب شمرده می‌شوند، و اندیس \-1 به آخرین عنصر ارجاع می‌دهد. .PP ارجاع به یک متغیر آرایه‌ای بدون زیرنویس معادل ارجاع به آرایه با زیرنویس 0 است. هرگونه ارجاع به یک متغیر با استفاده از یک زیرنویس معتبر، مجاز است؛ .B bash در صورت لزوم یک آرایه ایجاد می‌کند. .PP یک متغیر آرایه‌ای در صورتی مقداردهی‌شده (set) در نظر گرفته می‌شود که به یک زیرنویس آن مقداری اختصاص داده شده باشد. رشته تهی یک مقدار معتبر است. .PP به‌دست آوردن کلیدها (اندیس‌ها)ی یک آرایه به همان صورت مقادیر امکان‌پذیر است. ${\fB!\fP\fIname\fP[\fI@\fP]} و ${\fB!\fP\fIname\fP[\fI*\fP]} به اندیس‌های اختصاص‌یافته در متغیر آرایه‌ای \fIname\fP بسط می‌یابند. رفتار آن در صورت قرار گرفتن در دوگان نقل‌قول (double quotes) مشابه بسط پارامترهای ویژه \fI@\fP و \fI*\fP درون دوگان نقل‌قول است. .PP دستور توکار .B unset برای از بین بردن آرایه‌ها استفاده می‌شود. \fBunset\fP \fIname\fP[\fIsubscript\fP] عنصر آرایه در اندیس \fIsubscript\fP را، هم برای آرایه‌های نمایه‌شده و هم انجمنی، حذف می‌کند. زیرنویس‌های منفی برای آرایه‌های نمایه‌شده همان‌طور که در بالا شرح داده شد تفسیر می‌شوند. حذف آخرین عنصر یک متغیر آرایه‌ای، خود متغیر را حذف نمی‌کند. \fBunset\fP \fIname\fP، جایی که \fIname\fP یک آرایه است، کل آرایه را حذف می‌کند. \fBunset\fP \fIname\fP[\fIsubscript\fP] بسته به این که \fIname\fP یک آرایه نمایه‌شده است یا انجمنی، هنگامی که \fIsubscript\fP برابر \fB*\fP یا \fB@\fP باشد، رفتار متفاوتی دارد. اگر \fIname\fP یک آرایه انجمنی باشد، این کار عنصری با زیرنویس \fB*\fP یا \fB@\fP را حذف می‌کند. اگر \fIname\fP یک آرایه نمایه‌شده باشد، unset تمام عناصر را پاک می‌کند ولی خود آرایه را حذف نمی‌کند. .PP هنگام استفاده از نام متغیر به همراه زیرنویس به عنوان یک آرگومان برای یک دستور، مانند \fBunset\fP، بدون استفاده از نحو بسط کلمه که در بالا شرح داده شد، (به‌عنوان مثال، unset a[4])، آرگومان مشمول بسط نام مسیر (pathname expansion) می‌شود. اگر بسط نام مسیر مطلوب نیست، آرگومان را درون نقل‌قول قرار دهید (به‌عنوان مثال، unset \*'a[4]\*'). .PP دستورات توکار .BR declare ، .BR local ، و .B readonly هر کدام یک گزینه .B \-a را برای تعیین یک آرایه نمایه‌شده و یک گزینه .B \-A را برای تعیین یک آرایه انجمنی می‌پذیرند. اگر هر دو گزینه ارائه شوند، .B \-A اولویت دارد. دستور توکار .B read یک گزینه .B \-a را برای اختصاص فهرستی از کلمات خوانده‌شده از ورودی استاندارد به یک آرایه می‌پذیرد. دستورات توکار .B set و .B declare مقادیر آرایه را به شیوه‌ای نمایش می‌دهند که امکان استفاده مجدد از آن‌ها به عنوان انتساب‌ها را فراهم می‌کند. سایر دستورات توکار نیز آرگومان‌های نام آرایه را می‌پذیرند (به‌عنوان مثال، \fBmapfile\fP)؛ برای جزئیات به توضیحات دستورات توکار منفرد در زیر مراجعه کنید. پوسته تعدادی متغیر آرایه‌ای توکار فراهم می‌کند. .SH "بسط (EXPANSION)" بسط روی خط فرمان پس از تقسیم شدن آن به کلمات انجام می‌شود. پوسته این بسط‌ها را انجام می‌دهد: .IR "بسط آکولاد (brace expansion)" ، .IR "بسط مدک (tilde expansion)" ، .IR "بسط پارامتر و متغیر (parameter and variable expansion)" ، .IR "جایگزینی دستور (command substitution)" ، .IR "بسط حسابی (arithmetic expansion)" ، .IR "تفکیک کلمات (word splitting)" ، .IR "بسط نام مسیر (pathname expansion)" ، و .IR "حذف نقل‌قول (quote removal)" . .PP ترتیب انجام بسط‌ها به این صورت است: بسط آکولاد (brace expansion)؛ بسط تیلدا (tilde expansion)، بسط پارامتر و متغیر (parameter and variable expansion)، بسط حسابی (arithmetic expansion)، و جایگزینی دستور (command substitution) (که به صورت چپ‌به‌راست انجام می‌شوند)؛ تفکیک کلمات (word splitting)؛ بسط نام مسیر (pathname expansion)؛ و حذف نقلقول (quote removal). .PP روی سیستم‌هایی که توانایی پشتیبانی از آن را دارند، یک بسط اضافی نیز در دسترس است: \fIجایگزینی فرایند (process substitution)\fP. این بسط هم‌زمان با بسط‌های تیلدا، پارامتر، متغیر، حسابی و جایگزینی دستور انجام می‌شود. .PP \fIحذف نقلقول (Quote removal)\fP همواره در آخرین مرحله انجام می‌گیرد. این عمل کاراکترهای نقل‌قول موجود در کلمه اصلی را حذف می‌کند، نه مواردی که در اثر یکی از بسط‌های دیگر ایجاد شده‌اند، مگر اینکه خود آنها نیز داخل نقل‌قول قرار گرفته باشند. .PP تنها بسط آکولاد، تفکیک کلمات و بسط نام مسیر می‌توانند تعداد کلمات حاصل از بسط را افزایش دهند؛ سایر بسط‌ها یک کلمه منفرد را به یک کلمه منفرد بسط می‌دهند. تنها استثناهای این قاعده، بسط‌های .B \&\*"$@\*" و .B \&\*"${\fIname\fP[@]}\*"\c \" keep leading \& for AT&T troff .BR \& , \" .BR + \& + \*" doesn't work with AT&T troff و در اکثر موارد، \fB$*\fP و \fB${\fP\fIname\fP\fB[*]}\fP هستند، همان‌طور که در بالا توضیح داده شد (ببینید .SM .BR "پارامترها (PARAMETERS)" ). .SS بسط آکولاد (Brace Expansion) .I "بسط آکولاد (Brace expansion)" سازوکاری است برای تولید رشته‌های اختیاری و دلخواه با پیشوند و پسوند مشترک، که هر یک از آنها می‌تواند خالی باشد. این سازوکار شبیه به \fIبسط نام مسیر (pathname expansion)\fP است، اما نام فایل‌های تولیدشده الزاماً نباید وجود خارجی داشته باشند. الگوهایی که قرار است با آکولاد بسط داده شوند، از یک .IR "پیش‌درآمد (preamble)" اختیاری تشکیل می‌شوند، که به دنبال آن یا مجموعه‌ای از رشته‌های جداشده با ویرگول یا یک عبارت دنباله‌ای (sequence expression) درون یک جفت آکولاد می‌آید، و در انتها یک .IR "پس‌درآمد (postscript)" اختیاری قرار می‌گیرد. پیش‌درآمد به ابتدای هر یک از رشته‌های موجود درون آکولاد اضافه می‌شود، و سپس پس‌درآمد به انتهای هر رشته حاصل الحاق می‌گردد، و بسط از چپ به راست صورت می‌گیرد. .PP بسط‌های آکولاد می‌توانند به صورت تو در تو باشند. نتایج حاصل از هر رشته بسط‌یافته مرتب‌سازی (sort) نمی‌شوند؛ بسط آکولاد ترتیب چپ به راست را حفظ می‌کند. برای مثال، a\fB{\fPd,c,b\fB}\fPe به .Q "ade ace abe" بسط می‌یابد. .PP یک عبارت دنباله‌ای شکلی مانند \fIx\fP\fB..\fP\fIy\fP\fB[..\fP\fIincr\fP\fB]\fP به خود می‌گیرد، که در آن \fIx\fP و \fIy\fP یا اعداد صحیح هستند یا تک‌حرف‌ها، و \fIincr\fP، که گام افزایشی اختیاری است، یک عدد صحیح است. هنگامی که اعداد صحیح ارائه شوند، عبارت به تک‌تک اعداد بین \fIx\fP و \fIy\fP، شامل خود آنها، بسط پیدا می‌کند. اگر \fIx\fP یا \fIy\fP با یک صفر شروع شود، هر عبارت تولیدشده دارای تعداد ارقام یکسانی خواهد بود، و در صورت لزوم با صفرهای اولیه پر می‌شود (zero-padding). هنگامی که حروف ارائه شوند، عبارت به تک‌تک کاراکترهایی که بر اساس ترتیب واژه‌نگاشتی (lexicographically) بین \fIx\fP و \fIy\fP، شامل خود آنها، با استفاده از لوکال C قرار دارند، بسط داده می‌شود. توجه داشته باشید که هر دوی \fIx\fP و \fIy\fP باید از یک نوع یکسان (عدد صحیح یا حرف) باشند. هنگامی که مقدار افزایشی (increment) ارائه شود، از آن به عنوان تفاضل میان هر عبارت استفاده می‌شود. مقدار افزایشی پیش‌فرض بر حسب نیاز 1 یا \-1 است. .PP بسط آکولاد پیش از هر بسط دیگری اجرا می‌شود، و هر کاراکتر ویژه‌ای که متعلق به بسط‌های دیگر باشد در نتیجه حفظ خواهد شد. عملکرد آن کاملاً متنی است. .B Bash هیچ‌گونه تفسیر نحوی (syntactic interpretation) را بر بافت متنِ بسط داده‌شده یا متن درون آکولادها اعمال نمی‌کند. .PP یک بسط آکولاد با ساختار صحیح باید شامل آکولادهای باز و بسته بدون نقل‌قول، و حداقل یک ویرگولِ بدون نقل‌قول یا یک عبارت دنباله‌ای معتبر باشد. هر بسط آکولادی با ساختار نادرست بدون تغییر باقی می‌ماند. .PP یک .Q { یا Q , می‌تواند با یک بک‌اسلش نقل‌قول شود تا از در نظر گرفته شدن آن به عنوان بخشی از یک عبارت آکولادی جلوگیری شود. به منظور اجتناب از تداخل با بسط پارامتر، رشته .Q ${ واجد شرایط بسط آکولاد در نظر گرفته نمی‌شود، و تا رسیدن به .Q } بسته، از انجام بسط آکولاد جلوگیری می‌کند. .PP این ساختار معمولاً به عنوان یک روش خلاصه‌نویسی زمانی استفاده می‌شود که پیشوند مشترک رشته‌هایی که قرار است تولید شوند، طولانی‌تر از مثال بالا باشد: .PP .RS .EX mkdir /usr/local/src/bash/{old,new,dist,bugs} .EE .RE یا .RS .EX chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}} .EE .RE .PP بسط آکولاد ناسازگاری جزئی با نسخه‌های تاریخی .BR sh ایجاد می‌کند. .B sh با آکولادهای باز یا بسته هنگامی که به عنوان بخشی از یک کلمه ظاهر می‌شوند رفتار خاصی ندارد و آنها را در خروجی حفظ می‌کند. .B Bash به عنوان نتیجه‌ای از بسط آکولاد، آکولادها را از کلمات حذف می‌کند. به عنوان مثال، کلمه‌ای که در .B sh به صورت .Q file{1,2} وارد شود، عیناً در خروجی ظاهر می‌شود. .B Bash پس از بسط آکولاد، آن کلمه را به صورت .Q "file1 file2" خروجی می‌دهد. برای سازگاری دقیق با \fBsh\fP، .B bash را با گزینه .B +B شروع کنید یا بسط آکولاد را با گزینه .B +B در دستور .B set غیرفعال نمایید (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر را ببینید). .SS بسط تیلدا (Tilde Expansion) اگر کلمه‌ای با یک نویسه تیلدای نقل‌قول‌نشده شروع شود (\c .Q \fB\*~\fP )، تمام نویسه‌های قبل از نخستین ممیز (اسلش) نقل‌قول‌نشده (یا همه نویسه‌ها، اگر هیچ ممیز نقل‌قول‌نشده‌ای وجود نداشته باشد) به عنوان یک \fItilde-prefix\fP (پیشوند تیلدا) در نظر گرفته می‌شوند. اگر هیچ‌یک از نویسه‌های موجود در پیشوند تیلدا نقل‌قول نشده باشند، نویسه‌های موجود در پیشوند تیلدا پس از تیلدا به عنوان یک \fIlogin name\fP (نام کاربری ورود) احتمالی در نظر گرفته می‌شوند. اگر این نام کاربری ورود یک رشته تهی باشد، تیلدا با مقدار پارامتر پوسته .SM .BR HOME جایگزین می‌شود. اگر .SM .B HOME تنظیم نشده باشد، تیلدا به جای آن به دایرکتوری خانگی کاربری که پوسته را اجرا می‌کند بسط می‌یابد. در غیر این صورت، پیشوند تیلدا با دایرکتوری خانگی مرتبط با نام کاربری ورود مشخص‌شده جایگزین می‌شود. .PP اگر پیشوند تیلدا یک .Q \*~+ باشد، مقدار متغیر پوسته .SM .B PWD جایگزین پیشوند تیلدا می‌شود. اگر پیشوند تیلدا یک .Q \*~\- باشد، پوسته مقدار متغیر پوسته .SM .BR OLDPWD را در صورت تنظیم بودن جایگزین می‌کند. اگر نویسه‌های پس از تیلدا در پیشوند تیلدا از یک عدد \fIN\fP تشکیل شده باشند که اختیاری با یک .Q + یا یک .Q \- پیشوند شده باشد، پیشوند تیلدا با عنصر متناظر از پشته دایرکتوری جایگزین می‌شود، همان‌طور که توسط دستور توکار .B dirs هنگام فراخوانی با نویسه‌های پس از تیلدا در پیشوند تیلدا به عنوان آرگومان نمایش داده می‌شود. اگر نویسه‌های پس از تیلدا در پیشوند تیلدا شامل یک عدد بدون .Q + یا .Q \- در ابتدا باشند، بسط تیلدا فرض می‌کند که علامت .Q + است. .PP نتایج بسط تیلدا به‌گونه‌ای رفتار می‌شوند که گویی نقل‌قول شده‌اند، بنابراین جایگزینی مشمول جداسازی کلمات و بسط مسیر پرونده نمی‌شود. .PP اگر نام ورود به سیستم نامعتبر باشد یا بسط تیلدا با شکست مواجه شود، پیشوند تیلدا بدون تغییر باقی می‌ماند. .PP \fBBash\fP هر مقداردهی متغیر را برای پیشوندهای تیلدای بدون نقل‌قول که بلافاصله پس از یک .B : یا اولین .BR = می‌آیند بررسی کرده و در این موارد بسط تیلدا را انجام می‌دهد. در نتیجه، می‌توان از نام‌های فایل حاوی تیلدا در انتساب‌ها به .SM .BR PATH ، .SM .BR MAILPATH ، و .SM .BR CDPATH استفاده کرد و پوسته مقدار بسط‌یافته را منتسب می‌کند. .PP \fBBash\fP همچنین بسط تیلدا را روی کلماتی که شرایط مقداردهی متغیرها را برآورده می‌کنند (همان‌طور که در بالا ذیل .SM .BR PARAMETERS شرح داده شد) هنگامی که به‌عنوان آرگومان برای دستورات ساده ظاهر می‌شوند، انجام می‌دهد. \fBBash\fP در حالت posix این کار را، به‌جز برای دستورات \fIdeclaration\fP فهرست‌شده در بالا، انجام نمی‌دهد. .SS بسط پارامتر (Parameter Expansion) نویسه .Q \fB$\fP معرف بسط پارامتر، جایگزینی دستور، یا بسط حسابی است. نام پارامتر یا نمادی که باید بسط داده شود ممکن است در آکولاد محصور شود؛ آکولادها اختیاری هستند اما برای محافظت از متغیری که قرار است بسط یابد در برابر نویسه‌های بلافاصله پس از آن که ممکن است به‌عنوان بخشی از نام تفسیر شوند، به کار می‌روند. .PP هنگامی که از آکولاد استفاده می‌شود، آکولاد پایانی متناظر اولین .Q \fB}\fP است که با بک‌اسلش گریز داده نشده یا درون یک رشته نقل‌قول‌شده نباشد، و درون یک بسط حسابی توکار، جایگزینی دستور، یا بسط پارامتر قرار نگرفته باشد. .PP شکل پایه بسط پارامتر به این صورت است: .PP ${\fIparameter\fP} .LP که مقدار \fIparameter\fP را جایگزین می‌کند. آکولادها در صورتی الزامی هستند که .I parameter یک پارامتر موضعی با بیش از یک رقم باشد، یا زمانی که .I parameter توسط نویسه‌ای دنبال شود که نباید به‌عنوان بخشی از نام آن تفسیر گردد. \fIparameter\fP یک پارامتر پوسته است همان‌گونه که در بالا (\fBPARAMETERS\fP) شرح داده شد یا یک ارجاع آرایه (\fBArrays\fP) است. .PD .PP اگر اولین نویسه \fIparameter\fP یک علامت تعجب (\fB!\fP) باشد، و \fIparameter\fP یک \fInameref\fP نباشد، سطحی از غیراستفاده مستقیم (indirection) را معرفی می‌کند. \fBBash\fP مقداری را که با بسط بقیه \fIparameter\fP تشکیل می‌شود به‌عنوان \fIparameter\fP جدید به کار می‌گیرد؛ سپس این پارامتر جدید بسط داده می‌شود و آن مقدار به جای بسط \fIparameter\fP اصلی، در بقیه فرایند بسط استفاده می‌شود. این حالت به‌عنوان \fIبسط نامستقیم (indirect expansion)\fP شناخته می‌شود. این مقدار مشمول بسط تیلدا، بسط پارامتر، جایگزینی دستور و بسط حسابی است. اگر \fIparameter\fP یک nameref باشد، جهت حفظ سازگاری، به جای انجام بسط نامستقیم کامل، به نام پارامتری که توسط \fIparameter\fP به آن ارجاع شده است بسط می‌یابد. استثنائات این قاعده، بسط‌های ${\fB!\fP\fIprefix\fP\fB*\fP} و ${\fB!\fP\fIname\fP[\fI@\fP]} هستند که در زیر شرح داده شده‌اند. علامت تعجب برای ایجاد حالت نامستقیم باید بلافاصله پس از آکولاد چپ بیاید. .PP در هر یک از موارد زیر، \fIword\fP مشمول بسط تیلدا، بسط پارامتر، جایگزینی دستور و بسط حسابی است. .PP هنگامی که بسط زیررشته انجام نمی‌شود، با استفاده از اشکال مستندشده در زیر (برای نمونه، \fB:-\fP)، \fBbash\fP پارامتر را از نظر تنظیم‌نشده (unset) یا خالی (null) بودن بررسی می‌کند. حذف دونقطه، پارامتر را تنها از نظر تنظیم‌نشده بودن می‌آزماید. .PP .TP ${\fIparameter\fP\fB:\-\fP\fIword\fP} \fBاستفاده از مقادیر پیش‌فرض\fP. اگر .I parameter تنظیم نشده یا تهی (null) باشد، بسط یافتهٔ .I word جایگزین می‌شود. در غیر این صورت، مقدار .I parameter جایگزین خواهد شد. .TP ${\fIparameter\fP\fB:=\fP\fIword\fP} \fBتخصیص مقادیر پیش‌فرض\fP. اگر .I parameter تنظیم نشده یا تهی باشد، بسط یافتهٔ .I word به .I parameter اختصاص داده می‌شود، و این بسط، مقدار نهایی .IR parameter خواهد بود. پارامترهای موضعی و پارامترهای خاص را نمی‌توان بدین شیوه مقداردهی کرد. .TP ${\fIparameter\fP\fB:?\fP\fIword\fP} \fBنمایش خطا در صورت تهی بودن یا تنظیم‌نشدن\fP. اگر .I parameter تهی یا تنظیم‌نشده باشد، پوسته بسط یافتهٔ \fIword\fP را (یا در صورت عدم وجود .I word پیامی مبنی بر این موضوع را) در خروجی استاندارد خطا می‌نویسد و چنانچه تعاملی نباشد، با وضعیتی غیر از صفر خارج می‌شود. یک پوستهٔ تعاملی خارج نمی‌شود، اما دستوری را که با این بسط همراه است اجرا نمی‌کند. در غیر این صورت، مقدار \fIparameter\fP جایگزین خواهد شد. .TP ${\fIparameter\fP\fB:+\fP\fIword\fP} \fBاستفاده از مقدار جایگزین\fP. اگر .I parameter تهی یا تنظیم‌نشده باشد، چیزی جایگزین نمی‌شود؛ در غیر این صورت بسط یافتهٔ .I word جایگزین می‌گردد. مقدار \fIparameter\fP استفاده نمی‌شود. .TP .PD 0 ${\fIparameter\fP\fB:\fP\fIoffset\fP} .TP .PD ${\fIparameter\fP\fB:\fP\fIoffset\fP\fB:\fP\fIlength\fP} \fBBبسط زیررشته\fP. تا حداکثر \fIlength\fP نویسه از مقدار \fIparameter\fP را با شروع از نویسهٔ مشخص‌شده توسط \fIoffset\fP بسط می‌دهد. اگر \fIparameter\fP برابر با \fB@\fP یا \fB*\fP، یک آرایهٔ اندیس‌دار با زیرنویس \fB@\fP یا \fB*\fP، یا نام یک آرایهٔ متناظر باشد، نتایج طبق آنچه در زیر توضیح داده شده تفاوت خواهد داشت. اگر \fB:\fP\fIlength\fP حذف شده باشد (حالت اول در بالا)، این عبارت به زیررشته‌ای از مقدار \fIparameter\fP بسط می‌یابد که از نویسهٔ مشخص‌شده با \fIoffset\fP آغاز می‌شود و تا انتهای مقدار ادامه دارد. اگر \fIoffset\fP حذف شده باشد، به عنوان 0 در نظر گرفته می‌شود. اگر \fIlength\fP حذف شده باشد، اما دونقطهٔ بعد از \fIoffset\fP درج شده باشد، به عنوان 0 در نظر گرفته خواهد شد. \fIlength\fP و \fIoffset\fP عبارات حسابی هستند (به بخش .SM .B ارزیابی حسابی (ARITHMETIC EVALUATION) در زیر مراجعه کنید). .IP اگر مقدار \fIoffset\fP عددی کمتر از صفر ارزیابی شود، از آن مقدار به عنوان جابه‌جایی بر حسب نویسه از انتهای مقدار \fIparameter\fP استفاده می‌شود. اگر مقدار \fIlength\fP عددی کمتر از صفر ارزیابی شود، به عنوان جابه‌جایی بر حسب نویسه از انتهای مقدار \fIparameter\fP تفسیر می‌شود و نه تعداد نویسه‌ها، و نتیجهٔ بسط، نویسه‌های بین \fIoffset\fP و آن مقدار خواهد بود. توجه داشته باشید که آفست منفی باید حداقل با یک فاصله از دونقطه جدا شود تا با بسط \fB:-\fP اشتباه گرفته نشود. .IP اگر \fIparameter\fP برابر با \fB@\fP یا \fB*\fP باشد، نتیجه شامل تعداد \fIlength\fP پارامتر موضعی است که از \fIoffset\fP آغاز می‌شوند. یک \fIoffset\fP منفی نسبت به یکی بیشتر از بزرگ‌ترین پارامتر موضعی محاسبه می‌شود؛ بنابراین آفست \-1 برابر با آخرین پارامتر موضعی خواهد بود (یا اگر پارامتر موضعی وجود نداشته باشد، برابر با 0). چنانچه \fIlength\fP عددی کمتر از صفر ارزیابی شود، یک خطای بسط رخ می‌دهد. .IP اگر \fIparameter\fP نام یک آرایهٔ اندیس‌دار با زیرنویس @ یا * باشد، نتیجه شامل \fIlength\fP عضو از آرایه خواهد بود که با ${\fIparameter\fP[\fIoffset\fP]} شروع می‌شوند. یک \fIoffset\fP منفی نسبت به یکی بیشتر از بیشترین اندیس آرایهٔ مشخص‌شده محاسبه می‌شود. چنانچه \fIlength\fP به عددی کمتر از صفر ارزیابی شود، یک خطای بسط به وجود می‌آید. .IP اعمال بسط زیررشته روی یک آرایهٔ متناظر (associative array) نتایج نامشخصی تولید می‌کند. .IP اندیس‌گذاری زیررشته از صفر آغاز می‌شود، مگر آنکه از پارامترهای موضعی استفاده شود؛ در این صورت، اندیس‌گذاری به صورت پیش‌فرض از 1 آغاز می‌شود. اگر \fIoffset\fP برابر با 0 باشد و از پارامترهای موضعی استفاده شود، \fB$0\fP به ابتدای فهرست افزوده می‌شود. .TP .PD 0 ${\fB!\fP\fIprefix\fP\fB*\fP} .TP ${\fB!\fP\fIprefix\fP\fB@\fP} .PD \fBنامهای منطبق با پیشوند\fP. به نام متغیرهایی بسط می‌یابد که نامشان با \fIprefix\fP شروع می‌شود، و با اولین نویسهٔ متغیر ویژهٔ .SM .B IFS از یکدیگر جدا می‌شوند. هنگامی که از \fI@\fP استفاده می‌شود و بسط درون علامت دابل کوت (نقل‌قول دوگانه) قرار می‌گیرد، هر نام متغیر به یک کلمهٔ جداگانه بسط می‌یابد. .TP .PD 0 ${\fB!\fP\fIname\fP[\fI@\fP]} .TP ${\fB!\fP\fIname\fP[\fI*\fP]} .PD \fBفهرست کلیدهای آرایه\fP. اگر \fIname\fP یک متغیر آرایه باشد، به فهرستی از اندیس‌های آرایه (کلیدها) که در \fIname\fP مقداردهی شده‌اند بسط می‌یابد. اگر \fIname\fP آرایه نباشد، چنانچه \fIname\fP مقداردهی شده باشد به 0 و در غیر این صورت به تهی (null) بسط می‌یابد. هنگامی که از \fI@\fP استفاده می‌شود و بسط درون علامت دابل کوت قرار می‌گیرد، هر کلید به یک کلمهٔ مجزا بسط می‌یابد. .TP ${\fB#\fP\fIparameter\fP} \fBطول پارامتر\fP. طول مقدار بسط‌یافتهٔ \fIparameter\fP را بر حسب نویسه‌ها جایگزین می‌کند. اگر .I parameter برابر .B * یا .BR @ باشد، مقدار جایگزین‌شده برابر با تعداد پارامترهای مکانی خواهد بود. اگر .I parameter نام یک آرایه باشد که اندیس آن .B * یا .BR @ تعیین شده باشد، مقدار جایگزین‌شده برابر با تعداد اعضای آرایه خواهد بود. اگر .I parameter نام یک آرایهٔ نمایه‌دار باشد که اندیس آن عددی منفی باشد، آن عدد نسبت به یک واحد بیشتر از بیشترین اندیس \fIparameter\fP تفسیر می‌شود، بنابراین اندیس‌های منفی از انتهای آرایه به سمت عقب شمارش می‌شوند، و اندیس \-1 به آخرین عنصر اشاره دارد. .TP .PD 0 ${\fIparameter\fP\fB#\fP\fIword\fP} .TP ${\fIparameter\fP\fB##\fP\fIword\fP} .PD \fBحذف الگوی پیشوند منطبق\fP. عبارت .I word همانند بسط نام مسیر بسط می‌یابد تا الگویی تولید کند، و با استفاده از قواعد شرح‌داده‌شده در بخش .B "تطبیق الگو (Pattern Matching)" در زیر، با مقدار بسط‌یافتهٔ .I parameter تطبیق داده می‌شود. اگر الگو با ابتدای مقدار .IR parameter منطبق شود، نتیجهٔ بسط همان مقدار بسط‌یافتهٔ .I parameter خواهد بود با این تفاوت که کوتاه‌ترین الگوی منطبق (حالت .Q # ) یا بلندترین الگوی منطبق (حالت .Q ## ) از ابتدای آن حذف می‌شود. اگر .I parameter برابر .B @ یا .BR * باشد، عملیات حذف الگو به نوبت بر روی هر یک از پارامترهای مکانی اعمال می‌شود، و بسط حاصل، فهرست به‌دست‌آمده خواهد بود. اگر .I parameter یک متغیر آرایه با اندیس .B @ یا .BR * باشد، عملیات حذف الگو به نوبت بر روی هر عضو آرایه اعمال می‌شود، و بسط حاصل، فهرست به‌دست‌آمده خواهد بود. .TP .PD 0 ${\fIparameter\fP\fB%\fP\fIword\fP} .TP ${\fIparameter\fP\fB%%\fP\fIword\fP} .PD \fBحذف الگوی پسوند منطبق\fP. عبارت \fIword\fP برای تولید یک الگو درست مانند بسط نام مسیر بسط می‌یابد، و بر اساس قواعد شرح داده‌شده ذیل .B "تطبیق الگو (Pattern Matching)" در ادامه، با مقدار بسط‌یافته .I parameter تطبیق داده می‌شود. اگر الگو با بخش انتهایی مقدار بسط‌یافته .IR parameter منطبق شود، نتیجه این بسط برابر با مقدار بسط‌یافته .I parameter با حذف کوتاه‌ترین الگوی منطبق (حالت .Q % ) یا بلندترین الگوی منطبق (حالت .Q %% ) خواهد بود. اگر .I parameter برابر با .B @ یا .BR * باشد، عملیات حذف الگو به نوبت بر روی هر یک از پارامترهای مکانی اعمال می‌شود و بسط حاصل، فهرست به‌دست‌آمده خواهد بود. اگر .I parameter یک متغیر آرایه‌ای اندیس‌گذاری‌شده با .B @ یا .BR * باشد، عملیات حذف الگو به نوبت بر روی هر یک از اعضای آرایه اعمال می‌شود و بسط حاصل، فهرست به‌دست‌آمده خواهد بود. .TP .PD 0 ${\fIparameter\fP\fB/\fP\fIpattern\fP\fB/\fP\fIstring\fP} .TP ${\fIparameter\fP\fB//\fP\fIpattern\fP\fB/\fP\fIstring\fP} .TP ${\fIparameter\fP\fB/#\fP\fIpattern\fP\fB/\fP\fIstring\fP} .TP ${\fIparameter\fP\fB/%\fP\fIpattern\fP\fB/\fP\fIstring\fP} .PD \fBجایگزینی الگو\fP. عبارت \fIpattern\fP برای ایجاد یک الگو بسط می‌یابد و همان‌طور که در بخش .B "تطبیق الگو (Pattern Matching)" در ادامه شرح داده شده است، با مقدار بسط‌یافته \fIparameter\fP مطابقت داده می‌شود. طولانی‌ترین تطابق \fIpattern\fP در مقدار بسط‌یافته با \fIstring\fP جایگزین می‌شود. روی \fIstring\fP بسط مدک (tilde expansion)، بسط متغیر و پارامتر، بسط حسابی، جایگزینی دستور و فرایند، و حذف نقل‌قول انجام می‌شود. .IP در اولین شکل بالا، تنها اولین تطابق جایگزین می‌شود. اگر دو اسلش جداکننده \fIparameter\fP و \fIpattern\fP باشند (شکل دوم در بالا)، تمام تطابق‌های \fIpattern\fP با \fIstring\fP جایگزین می‌شوند. اگر قبل از \fIpattern\fP علامت \fB#\fP بیاید (شکل سوم در بالا)، الگو باید در ابتدای مقدار بسط‌یافته \fIparameter\fP مطابقت داشته باشد. اگر قبل از \fIpattern\fP علامت \fB%\fP بیاید (شکل چهارم در بالا)، الگو باید در انتهای مقدار بسط‌یافته \fIparameter\fP مطابقت داشته باشد. .IP اگر بسط \fIstring\fP تهی (null) باشد، تطابق‌های \fIpattern\fP حذف می‌شوند و ممکن است علامت \fB/\fP بعد از \fIpattern\fP حذف شود. .IP اگر گزینه پوسته \fBpatsub_replacement\fP با استفاده از \fBshopt\fP فعال شده باشد، هر نمونه بدون نقل‌قول از \fB&\fP در \fIstring\fP با بخش منطبق‌شده \fIpattern\fP جایگزین می‌شود. .IP قرار دادن هر بخشی از \fIstring\fP در نقل‌قول مانع از جایگزینی در بسط بخش نقل‌قول‌شده می‌شود، از جمله رشته‌های جایگزینی که در متغیرهای پوسته ذخیره شده‌اند. کاراکتر بک‌اسلش از \fB&\fP در \fIstring\fP گریز (escape) ایجاد می‌کند؛ بک‌اسلش حذف می‌شود تا امکان درج نویسه \fB&\fP به‌صورت لفظی (literal) در رشته جایگزین فراهم شود. همچنین می‌توان از بک‌اسلش برای گریز دادن خود بک‌اسلش استفاده کرد؛ عبارت \fB\e\e\fP منجر به ایجاد یک بک‌اسلش لفظی در جایگزینی می‌شود. در صورتی که \fIstring\fP داخل جفت نقل‌قول دوگانه (double quotes) قرار گرفته باشد، کاربران باید مراقب تداخل‌های ناخواسته بین بک‌اسلش و جفت نقل‌قول باشند، زیرا بک‌اسلش درون جفت نقل‌قول معنای ویژه‌ای دارد. جایگزینی الگو، بررسی برای \fB&\fP بدون نقل‌قول را پس از بسط دادن \fIstring\fP انجام می‌دهد؛ برنامه‌نویسان پوسته باید هر رخداد \fB&\fP را که می‌خواهند به‌صورت لفظی در جایگزینی لحاظ شود در نقل‌قول قرار دهند و اطمینان حاصل کنند که هر نمونه از \fB&\fP که قصد جایگزینی آن را دارند بدون نقل‌قول باشد. .IP همانند عملگرهای حذف الگو، قرار دادن رشته جایگزین درون جفت نقل‌قول دوگانه کاراکترهای بسط‌یافته را نقل‌قول می‌کند، در حالی که قرار دادن کل عبارت جایگزینی پارامتر درون جفت نقل‌قول چنین اثری ندارد، زیرا بسط در زمینه‌ای انجام می‌شود که جفت نقل‌قول احاطه‌کننده را در نظر نمی‌گیرد. .IP اگر گزینه پوسته .B nocasematch فعال باشد، تطبیق بدون در نظر گرفتن بزرگی و کوچکی حروف الفبا انجام می‌شود. .IP اگر .I parameter برابر با .B @ یا .BR * باشد، عملیات جایگزینی به نوبت بر روی هر یک از پارامترهای مکانی اعمال می‌شود و بسط حاصل، فهرست به‌دست‌آمده خواهد بود. اگر .I parameter یک متغیر آرایه‌ای اندیس‌گذاری‌شده با .B @ یا .BR * باشد، عملیات جایگزینی به نوبت بر روی هر یک از اعضای آرایه اعمال می‌شود و بسط حاصل، فهرست به‌دست‌آمده خواهد بود. .TP .PD 0 ${\fIparameter\fP\fB\*^\fP\fIpattern\fP} .TP ${\fIparameter\fP\fB\*^\*^\fP\fIpattern\fP} .TP ${\fIparameter\fP\fB,\fP\fIpattern\fP} .TP ${\fIparameter\fP\fB,,\fP\fIpattern\fP} .PD \fBتغییر بزرگی و کوچکی حروف (Case modification)\fP. این بسط بزرگی و کوچکی حروف الفبایی موجود در \fIparameter\fP را تغییر می‌دهد. ابتدا، \fIpattern\fP همان‌طور که در زیر در بخش .SM .BR "تطبیق الگو (Pattern Matching)" شرح داده شده است، بسط می‌یابد تا یک الگو تولید کند. سپس .B Bash نویسه‌های موجود در مقدار بسط‌یافتهٔ \fIparameter\fP را در برابر \fIpattern\fP همان‌گونه که در زیر آمده بررسی می‌کند. اگر نویسه‌ای با الگو تطابق داشته باشد، بزرگی/کوچکی آن تبدیل می‌شود. الگو نباید برای تطبیق بیش از یک نویسه تلاش کند. .IP استفاده از .Q \*^ حروف کوچکِ منطبق با \fIpattern\fP را به حروف بزرگ تبدیل می‌کند؛ .Q , حروف بزرگِ منطبق را به حروف کوچک تبدیل می‌کند. انواع \fB\*^\fP و \fB,\fP نخستین نویسه در مقدار بسط‌یافته را بررسی کرده و در صورت تطابق با \fIpattern\fP، بزرگی/کوچکی آن را تبدیل می‌کنند؛ انواع \fB\*^\*^\fP و \fB,,\fP تمامی نویسه‌ها را در مقدار بسط‌یافته بررسی کرده و هر کدام را که با \fIpattern\fP مطابقت داشته باشد تبدیل می‌کنند. اگر \fIpattern\fP حذف شود، مانند \fB?\fP با آن رفتار می‌شود که با هر نویسه‌ای تطابق دارد. .IP اگر .I parameter برابر با .B @ یا .BR * باشد، عملیات تغییر بزرگی/کوچکی حروف به نوبت روی هر پارامتر مکانی اعمال می‌شود و بسط، فهرست حاصل خواهد بود. اگر .I parameter یک متغیر آرایه‌ای با اندیس .B @ یا .BR * باشد، عملیات تغییر بزرگی/کوچکی حروف به نوبت روی هر عضو از آرایه اعمال می‌شود و بسط، فهرست حاصل خواهد بود. .TP .PD 0 ${\fIparameter\fP\fB@\fP\fIoperator\fP} \fBتبدیل پارامتر (Parameter transformation)\fP. بسط یا تبدیلی از مقدار \fIparameter\fP است یا اطلاعاتی دربارهٔ خود \fIparameter\fP، بسته به مقدار \fIoperator\fP. هر \fIoperator\fP یک تک‌حرف است: .PP .RS .TP .B U بسط رشته‌ای است که مقدار \fIparameter\fP است به‌طوری‌که حروف الفبایی کوچک آن به حروف بزرگ تبدیل شده‌اند. .TP .B u بسط رشته‌ای است که مقدار \fIparameter\fP است به‌طوری‌که نخستین نویسهٔ آن در صورت الفبایی بودن به حروف بزرگ تبدیل شده است. .TP .B L بسط رشته‌ای است که مقدار \fIparameter\fP است به‌طوری‌که حروف الفبایی بزرگ آن به حروف کوچک تبدیل شده‌اند. .TP .B Q بسط رشته‌ای است که مقدار \fIparameter\fP نقل‌قول‌شده در قالبی است که می‌تواند مجدداً به‌عنوان ورودی استفاده شود. .TP .B E بسط رشته‌ای است که مقدار \fIparameter\fP است به‌طوری‌که توالی‌های گریز بک‌اسلش در آن مانند سازوکار نقل‌قول \fB$\*'\fP.\|.\|.\%\fB\*'\fP بسط یافته‌اند. .TP .B P بسط رشته‌ای است که نتیجهٔ بسط مقدار \fIparameter\fP است به‌گونه‌ای که گویی یک رشتهٔ خط اعلان است (بخش \fBخط اعلان (PROMPTING)\fP را در زیر ببینید). .TP .B A بسط رشته‌ای در قالب یک عبارت انتساب یا دستور \fBdeclare\fP است که در صورت ارزیابی، \fIparameter\fP را به همراه ویژگی‌ها و مقدار آن مجدداً بازتولید می‌کند. .TP .B K نسخه‌ای احتمالاً نقل‌قول‌شده از مقدار \fIparameter\fP را تولید می‌کند، با این تفاوت که مقادیر آرایه‌های نمایه‌شده و انجمنی را به صورت دنباله‌ای از جفت‌های کلید\-مقدار نقل‌قول‌شده چاپ می‌کند (بخش \fBآرایه‌ها (Arrays)\fP در بالا را ببینید). کلیدها و مقادیر در قالبی نقل‌قول می‌شوند که بتوان دوباره به عنوان ورودی از آن‌ها استفاده کرد. .TP .B a این بسط رشته‌ای متشکل از مقادیر فلگ است که ویژگی‌های \fIparameter\fP را نشان می‌دهند. .TP .B k مانند تبدیل K عمل می‌کند، اما کلیدها و مقادیر آرایه‌های نمایه‌شده و انجمنی را پس از تفکیک کلمات به کلمات جداگانه بسط می‌دهد. .PD .PP اگر .I parameter برابر با .B @ یا .B * باشد، این عملیات به نوبت روی هر پارامتر مکانی اعمال می‌شود و بسط، فهرست حاصل خواهد بود. اگر .I parameter یک متغیر آرایه‌ای با زیرنویس .B @ یا .B * باشد، این عملیات به نوبت روی هر عضو آرایه اعمال می‌شود و بسط، فهرست حاصل خواهد بود. .PP نتیجه این بسط مشمول تفکیک کلمات و بسط مسیر، همان‌طور که در زیر شرح داده شده است، می‌شود. .RE .SS جایگزینی دستور (Command Substitution) \fIجایگزینی دستور\fP اجازه می‌دهد خروجی یک دستور جایگزین خود دستور شود. دو قالب استاندارد وجود دارد: .RS .PP \fB$(\fP\fIcommand\fP\|\fB)\fP .RE یا (منسوخ‌شده) .RS \fB\`\fP\fIcommand\fP\fB\`\fP. .RE .PP .B Bash این بسط را با اجرای \fIcommand\fP در یک محیط زیرپوسته (subshell) و جایگزین کردن جایگزینی دستور با خروجی استاندارد دستور، همراه با حذف خطوط جدید انتهایی انجام می‌دهد. خطوط جدید تعبیه‌شده در میان متن حذف نمی‌شوند، اما ممکن است هنگام تفکیک کلمات برداشته شوند. جایگزینی دستور \fB$(cat \fIfile\fP)\fR می‌تواند با قالب معادل اما سریع‌تر \fB$(< \fIfile\fP)\fR جایگزین شود. .PP در شیوه قدیمی جایگزینی با بک‌تیک، بک‌اسلش معنای تحت‌اللفظی خود را حفظ می‌کند مگر زمانی که پس از آن .BR $ ، .BR \` ، یا .B \e بیاید. اولین بک‌تیکی که قبل از آن بک‌اسلش نیامده باشد، جایگزینی دستور را خاتمه می‌دهد. هنگام استفاده از قالب $(\^\fIcommand\fP\|)، تمام نویسه‌های بین پرانتزها دستور را تشکیل می‌دهند؛ با هیچ‌کدام رفتار خاصی صورت نمی‌گیرد. .PP یک شکل جایگزین دیگر برای جایگزینی دستور وجود دارد: .RS .PP \fB${\fP\fIc\fP \fIcommand\fP\fB;\fP\|\fB}\fP .RE .PP که \fIcommand\fP را در محیط اجرای فعلی اجرا کرده و خروجی آن را می‌گیرد؛ در اینجا نیز خطوط جدید انتهایی حذف می‌شوند. .PP نویسه \fIc\fP پس از آکولاد باز باید یک فاصله، تب، خط جدید، یا \fB|\fP باشد، و آکولاد بسته باید در موقعیتی قرار گیرد که یک کلمه رزرو شده می‌تواند ظاهر شود (یعنی قبل از آن یک پایان‌دهنده دستور مانند سمیکالن آمده باشد). \fBBash\fP اجازه می‌دهد آکولاد بسته به نویسه‌های باقی‌مانده در کلمه متصل شود بدون آنکه لازم باشد پس از آن یک فرا\-نویسه پوسته بیاید، برخلاف آنچه معمولاً برای کلمات رزرو شده الزامی است. .PP هرگونه اثرات جانبی \fIcommand\fP بلافاصله در محیط اجرای فعلی اعمال می‌شود و پس از اتمام دستور نیز در محیط فعلی باقی می‌ماند (به عنوان مثال، دستور توکار \fBexit\fP از پوسته خارج می‌شود). .PP این نوع از جایگزینی دستور در ظاهر شبیه به اجرای یک تابع بی‌نام پوسته است: متغیرهای محلی همانند زمان اجرای یک تابع پوسته ایجاد می‌شوند، و دستور توکار \fBreturn\fP \fIcommand\fP را وادار به پایان یافتن می‌کند؛ با این حال، بقیه محیط اجرا، از جمله پارامترهای مکانی، با فراخواننده به اشتراک گذاشته می‌شود. .PP اگر اولین نویسه پس از آک getUserآکولاد باز یک \fB|\fP باشد، این ساختار پس از اجرای \fIcommand\fP به مقدار متغیر پوسته \fBREPLY\fP بسط می‌یابد، بدون اینکه خط‌های جدید پایانی حذف شوند، و خروجی استاندارد \fIcommand\fP همانند پوسته فراخواننده باقی می‌ماند. \fBBash\fP هنگام اجرای \fIcommand\fP، متغیر \fBREPLY\fP را به عنوان یک متغیر محلی که در ابتدا مقداردهی‌نشده است ایجاد می‌کند، و پس از اتمام \fIcommand\fP، \fBREPLY\fP را به مقداری که قبل از جایگزینی دستور داشت بازمی‌گرداند، همانند هر متغیر محلی دیگر. .PP جایگزینی‌های دستور ممکن است تو در تو باشند. برای تو در تو کردن هنگام استفاده از قالب بک‌تیک (backquote)، بک‌تیک‌های داخلی را با بک‌اسلش گریزدهی (escape) کنید. .PP اگر جایگزینی درون جفت‌کوتیشن (double quotes) ظاهر شود، \fBbash\fP تفکیک کلمات و بسط نام مسیر را روی نتایج اعمال نمی‌کند. .SS بسط حسابی (Arithmetic Expansion) بسط حسابی یک عبارت حسابی را ارزیابی کرده و نتیجه را جایگزین می‌کند. قالب بسط حسابی به این صورت است: .RS .PP \fB$((\fP\fIexpression\fP\fB))\fP .RE .PP عبارت .I expression دستخوش همان بسط‌هایی می‌شود که گویی درون جفت‌کوتیشن قرار داشته است، اما نویسه‌های جفت‌کوتیشن گریزدهی‌نشده در \fIexpression\fP به صورت خاص در نظر گرفته نمی‌شوند و حذف می‌گردند. تمام توکن‌های موجود در عبارت تحت بسط پارامتر و متغیر، جایگزینی دستور، و حذف کوتیشن قرار می‌گیرند. نتیجه به عنوان عبارت حسابی برای ارزیابی در نظر گرفته می‌شود. از آنجا که نحوه مدیریت جفت‌کوتیشن‌ها توسط Bash می‌تواند به رشته‌های خالی منجر شود، بسط حسابی با آن‌ها به عنوان عباراتی که حاصل ارزیابی‌شان ۰ است رفتار می‌کند. بسط‌های حسابی می‌توانند تو در تو باشند. .PP ارزیابی بر اساس قواعد ذکر شده در زیر بخش .SM .BR "ارزیابی حسابی (ARITHMETIC EVALUATION)" انجام می‌شود. اگر .I expression نامعتبر باشد، .B bash پیامی مبنی بر شکست در خروجی خطای استاندارد چاپ می‌کند، جایگزینی را انجام نمی‌دهد، و دستور مرتبط با بسط را اجرا نمی‌کند. .SS جایگزینی فرآیند (Process Substitution) \fIجایگزینی فرآیند\fP اجازه می‌دهد تا با استفاده از نام یک فایل، به ورودی یا خروجی یک فرآیند ارجاع داده شود. این ساختار به شکل \fB<(\fP\fIlist\^\fP\fB)\fP یا \fB>(\fP\fIlist\^\fP\fB)\fP است. فرآیند \fIlist\fP به صورت ناهمگام اجرا می‌شود، و ورودی یا خروجی آن به صورت نام یک فایل ظاهر می‌گردد. این نام فایل به عنوان نتیجه بسط، به عنوان یک آرگومان به دستور جاری پاس داده می‌شود. .PP اگر از قالب \fB>(\fP\fIlist\^\fP\fB)\fP استفاده شود، نوشتن در فایل ورودیِ \fIlist\fP را فراهم می‌کند. اگر از قالب \fB<(\fP\fIlist\^\fP\fB)\fP استفاده شود، خواندن فایل خروجی \fIlist\fP را به دست می‌آورد. هیچ فاصله‌ای نباید بین \fB<\fP یا \fB>\fP و پرانتز چپ وجود داشته باشد، در غیر این صورت این ساختار به عنوان یک تغییر مسیر تفسیر خواهد شد. .PP جایگزینی فرآیند در سیستم‌هایی که از لوله‌های نام‌گذاری‌شده (\fIFIFOs\fP) یا روش \fI/dev/fd\fP برای نام‌گذاری فایل‌های باز پشتیبانی می‌کنند، پشتیبانی می‌شود. .PP در صورت وجود، جایگزینی فرآیند به صورت همزمان با بسط پارامتر و متغیر، جایگزینی دستور، و بسط حسابی انجام می‌شود. .SS تفکیک کلمات (Word Splitting) پوسته نتایجِ بسط پارامتر، جایگزینی دستور، و بسط حسابی را که درون جفت‌کوتیشن رخ نداده‌اند، برای .IR "تفکیک کلمات" بررسی می‌کند. کلماتی که بسط داده نشده‌اند، تفکیک نمی‌شوند. .PP پوسته با هر نویسه از .SM .B IFS به‌عنوان یک جداکننده رفتار می‌کند، و نتایج سایر بسط‌ها را با استفاده از این نویسه‌ها به‌عنوان پایان‌دهنده‌های فیلد، به کلمات تقسیم می‌کند. .PP یک نویسه \fIفاصله‌سفید IFS\fP نویسه فاصله‌سفیدی است همان‌طور که در بالا تعریف شد (بخش \fBتعاریف\fP را ببینید) که در مقدار .SM .BR IFS ظاهر می‌شود. فاصله (Space)، تب (Tab)، و خط جدید (Newline) همواره به‌عنوان فاصله‌سفید IFS در نظر گرفته می‌شوند، حتی اگر در دسته‌بندی \fBspace\fP در محلی‌سازی (locale) وجود نداشته باشند. .PP اگر .SM .B IFS تنظیم نشده باشد، تفکیک فیلد طوری عمل می‌کند که گویی مقدار آن .BR است، و با این نویسه‌ها به‌عنوان فاصله‌سفید IFS رفتار می‌کند. اگر مقدار .SM .B IFS تهی (null) باشد، هیچ تفکیک کلمه‌ای رخ نمی‌دهد، اما شناسه‌های تهی ضمنی (به زیر مراجعه کنید) همچنان حذف می‌شوند. .PP تفکیک کلمات با حذف توالی نویسه‌های فاصله‌سفید IFS از ابتدا و انتهای نتایج بسط‌های قبلی آغاز می‌شود، سپس کلمات باقی‌مانده را تفکیک می‌کند. .PP اگر مقدار .SM .B IFS تنها شامل فاصله‌سفید IFS باشد، هر توالی از نویسه‌های فاصله‌سفید IFS یک فیلد را جدا می‌سازد، بنابراین یک فیلد شامل نویسه‌هایی است که فاصله‌سفید IFS بدون نقل‌قول نیستند، و فیلدهای تهی تنها از نقل‌قول حاصل می‌شوند. .PP اگر .SM .B IFS شامل نویسه‌ای غیر از فاصله‌سفید باشد، در این صورت هر نویسه‌ای در مقدار .SM .B IFS که فاصله‌سفید IFS نیست، به همراه هر نویسه فاصله‌سفید IFS مجاور، یک فیلد را مرزبندی می‌کند. این بدان معناست که جداکننده‌های مجاور غیر فاصله‌سفید IFS یک فیلد تهی ایجاد می‌کنند. توالی از نویسه‌های فاصله‌سفید IFS نیز یک فیلد را مرزبندی می‌کند. .PP شناسه‌های تهی صریح (\^\fB\*"\^\*"\fP یا \^\fB\*'\^\*'\fP\^) حفظ می‌شوند و به‌عنوان رشته‌های خالی به دستورات ارسال می‌شوند. شناسه‌های تهی ضمنی بدون نقل‌قول، حاصل از بسط پارامترهایی که مقداری ندارند، حذف می‌شوند. بسط یک پارامتر بدون مقدار درون نقل‌قول دوتایی (double quotes) یک فیلد تهی ایجاد می‌کند، که حفظ شده و به‌عنوان یک رشته خالی به دستور ارسال می‌گردد. .PP هنگامی که یک شناسه تهی نقل‌قول‌شده به‌عنوان بخشی از یک کلمه ظاهر می‌شود که بسط آن غیر تهی است، تفکیک کلمه بخش شناسه تهی را حذف می‌کند، و بسط غیر تهی را باقی می‌گذارد. یعنی، کلمه .Q "\-d\*'\^\*'" پس از تفکیک کلمات و حذف شناسه تهی، به .Q \-d تبدیل می‌شود. .SS "بسط نام مسیر (Pathname Expansion)" پس از تفکیک کلمات، مگر اینکه گزینه .B \-f تنظیم شده باشد، .B bash هر کلمه را برای یافتن نویسه‌های .BR * ، .BR ؟ ، و .BR [ پویش می‌کند. اگر یکی از این نویسه‌ها ظاهر شود و داخل نقل‌قول نباشد، کلمه به‌عنوان یک .IR الگو (pattern) در نظر گرفته می‌شود، و با فهرستی مرتب‌شده از نام فایل‌های منطبق با الگو جایگزین می‌گردد (بخش .SM .B "تطبیق الگو" در زیر را ببینید) که وابسته به مقدار متغیر پوسته \fBGLOBSORT\fP است. .PP اگر هیچ نام فایل منطبقی پیدا نشود، و گزینه پوسته .B nullglob فعال نباشد، کلمه بدون تغییر باقی می‌ماند. اگر گزینه .B nullglob تنظیم شده باشد و هیچ انطباقی یافت نشود، کلمه حذف می‌شود. اگر گزینه پوسته .B failglob تنظیم شده باشد و هیچ انطباقی پیدا نشود، \fBbash\fP یک پیام خطا چاپ کرده و دستور را اجرا نمی‌کند. اگر گزینه پوسته .B nocaseglob فعال باشد، تطبیق بدون توجه به کوچک و بزرگی حروف الفبا انجام می‌شود. .PP هنگامی که از یک الگو برای بسط نام مسیر استفاده می‌شود، نویسه .Q .\& در ابتدای یک نام یا بلافاصله پس از یک اسلش باید به‌طور صریح مطابقت داده شود، مگر اینکه گزینه پوسته .B dotglob تنظیم شده باشد. به منظور تطابق نام فایل‌های .FN .\& و .FN ..\& ، الگو باید با .Q .\& شروع شود (برای مثال، .Q .?\& )، حتی اگر .B dotglob تنظیم شده باشد. اگر گزینه پوسته .B globskipdots فعال باشد، نام فایل‌های .FN .\& و .FN ..\& هرگز مطابقت داده نمی‌شوند، حتی اگر الگو با یک .Q .\& آغاز شود. هنگامی که نام‌های مسیر تطبیق داده نمی‌شوند، با نویسه .Q .\& به‌طور ویژه رفتار نمی‌شود. .PP هنگام تطبیق نام مسیر، نویسه اسلش همیشه باید به‌طور صریح با یک اسلش در الگو مطابقت داده شود، اما در سایر زمینه‌های تطبیق می‌توان آن را با یک نویسه الگوی ویژه همان‌طور که در زیر در .SM .BR "تطبیق الگو (Pattern Matching)" شرح داده شده است، مطابقت داد. .PP توضیحات مربوط به .B shopt را در زیر بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" برای شرحی از گزینه‌های پوسته .BR nocaseglob ، .BR nullglob ، .BR globskipdots ، .BR failglob و .B dotglob ببینید. .PP متغیر پوسته .SM .B GLOBIGNORE ممکن است برای محدود کردن مجموعه نام فایل‌های مطابق با یک .I pattern به‌کار رود. اگر .SM .B GLOBIGNORE تنظیم شده باشد، هر نام فایل منطبقی که همچنین با یکی از الگوهای موجود در .SM .B GLOBIGNORE مطابقت داشته باشد، از فهرست موارد منطبق حذف می‌شود. اگر گزینه \fBnocaseglob\fP تنظیم شده باشد، تطبیق در برابر الگوهای موجود در .SM .B GLOBIGNORE بدون در نظر گرفتن بزرگی و کوچکی حروف انجام می‌شود. نام فایل‌های .FN .\& و .FN ..\& همیشه نادیده گرفته می‌شوند، زمانی که .SM .B GLOBIGNORE تنظیم شده و تهی نباشد. با این حال، تنظیم .SM .B GLOBIGNORE روی یک مقدار غیر تهی این اثر را دارد که گزینه پوسته .B dotglob را فعال می‌کند، بنابراین تمام نام فایل‌های دیگر که با یک .Q .\& شروع می‌شوند، تطبیق داده خواهند شد. برای به دست آوردن رفتار قدیمی در نادیده گرفتن نام فایل‌هایی که با .Q .\& شروع می‌شوند، .Q .* را یکی از الگوهای موجود در .SM .B GLOBIGNORE\c \& قرار دهید. گزینه .B dotglob هنگامی که .SM .B GLOBIGNORE لغو تنظیم (unset) شود، غیرفعال می‌گردد. تطبیق الگوی .B GLOBIGNORE تنظیمات گزینه پوسته \fBextglob\fP را محترم می‌شمارد. .PP مقدار متغیر پوستهٔ .SM .B GLOBSORT چگونگی مرتب‌سازی نتایج بسط مسیر را کنترل می‌کند، همان‌طور که در بالا ذیل .BR "متغیرهای پوسته (Shell Variables)" شرح داده شد. .PP .B "تطبیق الگو (Pattern Matching)" .PP هر نویسه‌ای که در یک الگو ظاهر شود، غیر از نویسه‌های ویژهٔ الگو که در زیر شرح داده شده‌اند، با خودش تطبیق می‌یابد. نویسهٔ NUL نباید در یک الگو قرار گیرد. یک بک‌اسلش (backslash) نویسهٔ پس از خود را گریزدهی (escape) می‌کند؛ بک‌اسلشِ گریزدهنده هنگام تطبیق کنار گذاشته می‌شود. نویسه‌های ویژهٔ الگو در صورتی که قرار است به‌طور لغوی (عینی) تطبیق داده شوند، باید نقل‌قول گردند. .PP نویسه‌های ویژهٔ الگو دارای معانی زیر هستند: .PP .PD 0 .RS .TP .B * با هر رشته‌ای، از جمله رشتهٔ تهی، تطبیق می‌یابد. هنگامی که گزینهٔ پوستهٔ \fBglobstar\fP فعال باشد، و \fB*\fP در بافتار بسط مسیر استفاده شود، دو \fB*\fP مجاور هم که به عنوان یک الگوی واحد به کار رفته‌اند، با تمام فایل‌ها و صفر یا چند دایرکتوری و زیردایرکتوری تطبیق می‌یابند. اگر پس از آن یک \fB/\fP بیاید، دو \fB*\fP مجاور هم تنها با دایرکتوری‌ها و زیردایرکتوری‌ها تطبیق می‌یابند. .TP .B ? با هر تک‌نویسه‌ای تطبیق می‌یابد. .TP .BR [ .\|.\|. ] .PD با هر یک از نویسه‌های محصور میان قلاب‌ها (brackets) تطبیق می‌یابد. این عبارت به عنوان یک \fIbracket expression\fP (عبارت قلاب) شناخته می‌شود و با یک تک‌نویسه تطبیق می‌یابد. یک جفت نویسه که با یک خط پیوند (hyphen) از هم جدا شده‌اند، نشان‌دهندهٔ یک \fIrange expression\fP (عبارت بازه) هستند؛ هر نویسه‌ای که با استفاده از ترتیب تطبیق (collating sequence) و مجموعه نویسه‌های لوکال فعلی، بین آن دو نویسه (شامل خود آن‌ها) قرار گیرد، تطبیق می‌یابد. اگر اولین نویسه پس از .B [ یک .B ! یا یک .B \*^ باشد، آن‌گاه هر نویسه‌ای که درون بازه قرار ندارد تطبیق می‌یابد. برای تطبیق نویسهٔ .BR \- ، آن را به عنوان اولین یا آخرین نویسه در مجموعه قرار دهید. برای تطبیق نویسهٔ .BR ] ، آن را به عنوان اولین نویسه در مجموعه قرار دهید. .IP ترتیب مرتب‌سازی نویسه‌ها در عبارات بازه، و نویسه‌های موجود در بازه، توسط لوکال فعلی و در صورت تنظیم بودن، مقادیر متغیرهای پوستهٔ .SM .B LC_COLLATE یا .SM .B LC_ALL تعیین می‌شوند. برای به دست آوردن تفسیر سنتی از عبارات بازه، که در آن .B [a\-d] معادل .BR [abcd] است، مقدار متغیرهای پوستهٔ .B LC_COLLATE یا .B LC_ALL را برابر با .B C قرار دهید، یا گزینهٔ پوستهٔ .B globasciiranges را فعال کنید. .IP درون یک عبارت قلاب، \fIکلاس‌های نویسه (character classes)\fP می‌توانند با استفاده از نحو \fB[:\fP\fIclass\fP\fB:]\fP مشخص شوند، که در آن \fIclass\fP یکی از کلاس‌های زیر است که در استاندارد .SM POSIX تعریف شده‌اند: .IP .RS .B .if n alnum alpha ascii blank cntrl digit graph lower print punct space \ upper word xdigit .if t alnum alpha ascii blank cntrl digit graph lower \ print punct space upper word xdigit .RE .IP یک کلاس نویسه با هر نویسه‌ای که متعلق به آن کلاس باشد تطبیق می‌یابد. کلاس نویسهٔ \fBword\fP با حروف، ارقام، و نویسهٔ _ تطبیق می‌یابد. .IP درون یک عبارت قلاب، یک \fIکلاس هم‌ارزی (equivalence class)\fP می‌تواند با استفاده از نحو \fB[=\fP\fIc\fP\fB=]\fP مشخص شود، که با تمام نویسه‌هایی که وزن ترتیبی یکسان (همان‌طور که توسط لوکال فعلی تعریف شده) با نویسهٔ \fIc\fP دارند، تطبیق می‌یابد. .IP درون یک عبارت قلاب، نحو \fB[.\fP\fIsymbol\fP\fB.]\fP با نماد ترتیبی \fIsymbol\fP تطبیق می‌یابد. .RE .PP اگر گزینهٔ پوستهٔ \fBextglob\fP با استفاده از دستور توکار \fBshopt\fP فعال شده باشد، پوسته چندین عملگر تطبیق الگوی گسترش‌یافته را شناسایی می‌کند. در توضیحات زیر، یک \fIpattern-list\fP فهرستی از یک یا چند الگو است که با \fB|\fP از هم جدا شده‌اند. الگوهای ترکیبی ممکن است با استفاده از یک یا چند زیرالگوی زیر تشکیل شوند: .PP .PD 0 .RS .TP \fB?(\fP\^\fIpattern-list\^\fP\fB)\fP با صفر یا یک بار وقوع الگوهای داده‌شده تطبیق می‌یابد. .TP \fB*(\fP\^\fIpattern-list\^\fP\fB)\fP با صفر یا چند بار وقوع الگوهای داده‌شده تطبیق می‌یابد. .TP \fB+(\fP\^\fIpattern-list\^\fP\fB)\fP با یک یا چند بار وقوع الگوهای داده‌شده تطبیق می‌یابد. .TP \fB@(\fP\^\fIpattern-list\^\fP\fB)\fP دقیقاً با یکی از الگوهای داده‌شده تطبیق می‌یابد. .TP \fB!(\fP\^\fIpattern-list\^\fP\fB)\fP با هر چیزی به جز یکی از الگوهای داده‌شده تطبیق می‌یابد. .RE .PD .PP گزینهٔ \fBextglob\fP رفتار تجزیه‌کننده (parser) را تغییر می‌دهد، زیرا پرانتزها معمولاً به عنوان عملگرهایی با مفهوم نحوی در نظر گرفته می‌شوند. برای اطمینان از اینکه الگوهای تطبیق گسترش‌یافته به درستی تجزیه می‌شوند، مطمئن شوید که \fBextglob\fP پیش از تجزیهٔ ساختارهای حاوی الگوها، از جمله توابع پوسته و جایگزینی‌های دستور، فعال شده باشد. .PP هنگام تطبیق نام فایل‌ها، گزینهٔ پوستهٔ \fBdotglob\fP مجموعهٔ نام فایل‌هایی را که بررسی می‌شوند تعیین می‌کند: هنگامی که \fBdotglob\fP فعال است، مجموعهٔ نام فایل‌ها شامل تمام فایل‌هایی است که با .Q .\& شروع می‌شوند، اما .FN .\& و .FN ..\& باید توسط یک الگو یا زیرالگو که با نقطه شروع می‌شود تطبیق داده شوند؛ هنگامی که غیرفعال است، این مجموعه شامل هیچ نام فایلی که با .Q .\& شروع شود نخواهد بود، مگر اینکه الگو یا زیرالگو با یک .Q .\& شروع شود. اگر گزینهٔ پوستهٔ .B globskipdots فعال باشد، نام فایل‌های .FN .\& و .FN ..\& هرگز در این مجموعه ظاهر نمی‌شوند. همانند بالا، .Q .\& تنها هنگام تطبیق نام فایل‌ها معنای خاصی دارد. .PP تطبیق الگوی گسترش‌یافتهٔ پیچیده در برابر رشته‌های طولانی کند است، به‌ویژه زمانی که الگوها حاوی تناوب‌ها (alternations) باشند و رشته‌ها شامل چندین تطبیق باشند. استفاده از تطبیق‌های جداگانه در برابر رشته‌های کوتاه‌تر، یا استفاده از آرایه‌هایی از رشته‌ها به جای یک رشتهٔ طولانی منفرد، ممکن است سریع‌تر باشد. .SS حذف نقل‌قول (Quote Removal) پس از بسط‌های قبلی، تمام موارد نقل‌قول‌نشده از نویسه‌های .BR \e ، .BR \*' ، و \^\fB\*"\fP\^ که ناشی از یکی از بسط‌های بالا نبوده‌اند، حذف می‌شوند. .SH "تغییر مسیر (REDIRECTION)" پیش از اجرای یک دستور، ورودی و خروجی آن ممکن است با استفاده از نشانه‌گذاری ویژه‌ای که توسط پوسته تفسیر می‌شود، .I تغییر مسیر داده شوند. \fIتغییر مسیر\fP اجازه می‌دهد تا توصیف‌کننده‌های فایل (file handles) دستورات تکثیر شوند، باز شوند، بسته شوند، به فایل‌های متفاوتی ارجاع داده شوند، و می‌تواند فایل‌هایی را که دستور از آن‌ها می‌خواند و در آن‌ها می‌نویسد تغییر دهد. هنگامی که همراه با دستور توکار \fBexec\fP استفاده شود، تغییر مسیرها توصیف‌کننده‌های فایل را در محیط اجرای فعلی پوسته تغییر می‌دهند. عملگرهای تغییر مسیر زیر ممکن است قبل از یک .I دستور ساده یا در هر جای آن ظاهر شوند، یا ممکن است پس از یک .IR دستور بیایند. تغییر مسیرها به ترتیبی که ظاهر می‌شوند، از چپ به راست پردازش می‌شوند. .PP هر تغییر مسیری که ممکن است یک شمارهٔ توصیف‌کنندهٔ فایل پیش از آن بیاید، می‌تواند در عوض با کلمه‌ای به شکل {\fIvarname\fP} همراه شود. در این حالت، برای هر عملگر تغییر مسیر به جز .B >&\- و .BR <&\- ، پوسته یک توصیف‌کنندهٔ فایل بزرگتر یا مساوی ۱۰ اختصاص می‌دهد و آن را به \fIvarname\fP منتسب می‌کند. اگر {\fIvarname\fP} پیش از .B >&\- یا .BR <&\- بیاید، مقدار \fIvarname\fP توصیف‌کنندهٔ فایلی را که باید بسته شود مشخص می‌کند. اگر {\fIvarname\fP} ارائه شود، تغییر مسیر فراتر از حوزهٔ دستور باقی می‌ماند، که به برنامه‌نویس پوسته اجازه می‌دهد تا طول عمر توصیف‌کنندهٔ فایل را به صورت دستی و بدون استفاده از دستور توکار \fBexec\fP مدیریت کند. گزینهٔ پوستهٔ \fBvarredir_close\fP این رفتار را مدیریت می‌کند. .PP در توضیحات زیر، اگر شماره توصیف‌کننده فایل (file descriptor) حذف شود و اولین نویسه از عملگر تغییر مسیر .Q < باشد، تغییر مسیر به ورودی استاندارد (توصیف‌کننده فایل 0) اشاره دارد. اگر اولین نویسه از عملگر تغییر مسیر .Q > باشد، تغییر مسیر به خروجی استاندارد (توصیف‌کننده فایل 1) اشاره دارد. .PP عبارت \fIword\fP پس از عملگر تغییر مسیر در توضیحات زیر، مگر در مواردی که خلاف آن ذکر شده باشد، مشمول بسط آکولاد (brace expansion)، بسط تیلدا (tilde expansion)، بسط پارامتر و متغیر (parameter and variable expansion)، جایگزینی دستور (command substitution)، بسط حسابی (arithmetic expansion)، حذف نقل‌قول (quote removal)، بسط مسیر (pathname expansion) و تفکیک کلمات (word splitting) می‌شود. اگر به بیش از یک کلمه بسط یابد، .B bash یک خطا گزارش می‌دهد. .PP ترتیب تغییر مسیرها اهمیت دارد. به عنوان مثال، دستور .RS .PP ls \fB>\fP dirlist 2\fB>&\fP1 .RE .PP هم خروجی استاندارد و هم خطای استاندارد را به فایل .IR dirlist هدایت می‌کند، در حالی که دستور .RS .PP ls 2\fB>&\fP1 \fB>\fP dirlist .RE .PP تنها خروجی استاندارد را به فایل .IR dirlist هدایت می‌کند، زیرا خطای استاندارد قبل از اینکه خروجی استاندارد به .IR dirlist تغییر مسیر داده شود، به خروجی استاندارد هدایت شده بود. .PP پوسته \fBBash\fP هنگام استفاده از چندین نام فایل در تغییر مسیرها، همان‌طور که در جدول زیر آمده است، با آنها به طور ویژه‌ای رفتار می‌کند. اگر سیستم‌عاملی که \fBbash\fP روی آن اجرا می‌شود این فایل‌های ویژه را فراهم کند، \fBbash\fP از آنها استفاده می‌کند؛ در غیر این صورت، آنها را به صورت داخلی با رفتاری که در زیر شرح داده شده، شبیه‌سازی می‌کند. .RS .PP .PD 0 .TP .B /dev/fd/\fIfd\fP اگر \fIfd\fP یک عدد صحیح معتبر باشد، توصیف‌کننده فایل \fIfd\fP تکثیر می‌شود. .TP .B /dev/stdin توصیف‌کننده فایل 0 تکثیر می‌شود. .TP .B /dev/stdout توصیف‌کننده فایل 1 تکثیر می‌شود. .TP .B /dev/stderr توصیف‌کننده فایل 2 تکثیر می‌شود. .TP .B /dev/tcp/\fIhost\fP/\fIport\fP اگر \fIhost\fP یک نام میزبان یا نشانی اینترنتی معتبر باشد و \fIport\fP یک شماره پورت صحیح یا نام سرویس باشد، \fBbash\fP تلاش می‌کند تا سوکت TCP مربوطه را باز کند. .TP .B /dev/udp/\fIhost\fP/\fIport\fP اگر \fIhost\fP یک نام میزبان یا نشانی اینترنتی معتبر باشد و \fIport\fP یک شماره پورت صحیح یا نام سرویس باشد، \fBbash\fP تلاش می‌کند تا سوکت UDP مربوطه را باز کند. .PD .RE .PP عدم موفقیت در باز کردن یا ایجاد یک فایل موجب شکست تغییر مسیر می‌شود. .PP تغییر مسیرهایی که از توصیف‌کننده‌های فایل بزرگتر از 9 استفاده می‌کنند باید با احتیاط به کار روند، چرا که ممکن است با توصیف‌کننده‌های فایلی که پوسته به صورت داخلی استفاده می‌کند، تداخل داشته باشند. .SS تغییر مسیر ورودی (Redirecting Input) تغییر مسیر ورودی باعث باز شدن فایلی می‌شود که نام آن از بسط .I word حاصل شده است تا برای خواندن روی توصیف‌کننده فایل .IR n قرار گیرد، یا اگر .I n مشخص نشده باشد، روی ورودی استاندارد (توصیف‌کننده فایل 0) باز می‌شود. .PP قالب کلی برای تغییر مسیر ورودی به این صورت است: .RS .PP [\fIn\fP]\fB<\fP\fIword\fP .RE .SS تغییر مسیر خروجی (Redirecting Output) تغییر مسیر خروجی، فایلی را که نام آن حاصل بسط .I word است برای نوشتن بر روی توصیف‌گر فایل .IR n ، یا خروجی استاندارد (توصیف‌گر فایل ۱) در صورتی که .I n مشخص نشده باشد، باز می‌کند. اگر فایل وجود نداشته باشد ایجاد می‌شود؛ اگر وجود داشته باشد اندازه آن به صفر تقلیل می‌یابد (خالی می‌شود). .PP قالب کلی برای تغییر مسیر خروجی به این صورت است: .RS .PP [\fIn\fP]\fB>\fP\fIword\fP .RE .PP اگر عملگر تغییر مسیر .BR > باشد، و گزینه .B noclobber برای دستور توکار .B set فعال شده باشد، در صورتی که فایلی که نام آن حاصل بسط \fIword\fP است وجود داشته و یک فایل معمولی باشد، تغییر مسیر با شکست مواجه می‌شود. اگر عملگر تغییر مسیر .BR >| باشد، یا عملگر تغییر مسیر .B > بوده و گزینه .B noclobber برای دستور توکار .B set فعال نباشد، \fBbash\fP حتی در صورت وجود فایل نام‌گذاری‌شده توسط \fIword\fP برای تغییر مسیر تلاش می‌کند. .SS الحاق خروجی تغییر مسیر یافته (Appending Redirected Output) تغییر مسیر خروجی به این شیوه، فایلی را که نام آن حاصل بسط .I word است برای الحاق کردن (افزودن به انتها) بر روی توصیف‌گر فایل .IR n ، یا خروجی استاندارد (توصیف‌گر فایل ۱) در صورتی که .I n مشخص نشده باشد، باز می‌کند. اگر فایل وجود نداشته باشد ایجاد می‌شود. .PP قالب کلی برای الحاق خروجی به این صورت است: .RS .PP [\fIn\fP]\fB>>\fP\fIword\fP .RE .SS تغییر مسیر خروجی استاندارد و خطای استاندارد (Redirecting Standard Output and Standard Error) این ساختار هم خروجی استاندارد (توصیف‌گر فایل ۱) و هم خروجی خطای استاندارد (توصیف‌گر فایل ۲) را به فایلی که نام آن بسط‌یافته .I word است تغییر مسیر می‌دهد. .PP دو قالب برای تغییر مسیر خروجی استاندارد و خطای استاندارد وجود دارد: .RS .PP \fB&>\fP\fIword\fP .RE و .RS \fB>&\fP\fIword\fP .RE .PP از این دو شکل، شکل اول ترجیح داده می‌شود. این شکل از نظر معنایی معادل با عبارت زیر است: .RS .PP \fB>\fP\fIword\fP 2\fB>&\fP1 .RE .PP هنگام استفاده از شکل دوم، \fIword\fP نباید به یک عدد یا \fB\-\fP بسط یابد. اگر چنین شود، به دلایل سازگاری، عملگرهای دیگر تغییر مسیر اعمال می‌شوند (به بخش \fBتکثیر توصیف‌گرهای فایل (Duplicating File Descriptors)\fP در زیر مراجعه کنید). .SS "الحاق خروجی استاندارد و خطای استاندارد" این ساختار هم خروجی استاندارد (توصیف‌کننده فایل ۱) و هم خروجی خطای استاندارد (توصیف‌کننده فایل ۲) را به فایلی الحاق می‌کند که نام آن حاصل بسط .IR word است. .PP قالب الحاق خروجی استاندارد و خطای استاندارد به شکل زیر است: .RS .PP \fB&>>\fP\fIword\fP .RE .PP این از نظر معنایی معادل دستور زیر است: .RS .PP \fB>>\fP\fIword\fP 2\fB>&\fP1 .RE .PP (بخش \fBتکثیر توصیف‌کننده‌های فایل (Duplicating File Descriptors)\fP را در زیر ببینید). .SS "اسناد درجا (Here Documents)" این نوع تغییر مسیر به پوسته دستور می‌دهد تا ورودی را از منبع فعلی بخواند تا زمانی که خطی را بخواند که تنها شامل .I delimiter باشد (بدون فاصله‌های خالی انتهایی). سپس تمام خطوط خوانده‌شده تا آن نقطه به ورودی استاندارد (یا توصیف‌کننده فایل \fIn\fP در صورتی که \fIn\fP مشخص شده باشد) برای یک دستور تبدیل می‌شوند. .PP قالب اسناد درجا (here-documents) به شکل زیر است: .RS .PP .nf [\fIn\fP]\fB<<\fP[\fB\-\fP]\fIword\fP \fIhere-document\fP \fIdelimiter\fP .fi .RE .PP پوسته بسط پارامتر و متغیر، جایگزینی دستور، بسط حسابی یا بسط نام مسیر را روی .IR word انجام نمی‌دهد. .PP اگر هر بخشی از .I word نقل‌قول شده باشد، .I delimiter حاصل حذف نقل‌قول از .IR word خواهد بود و خطوط موجود در سند درجا بسط داده نمی‌شوند. اگر \fIword\fP بدون نقل‌قول باشد، .I delimiter خود \fIword\fP است و متن سند درجا مشابه یک رشته با نقل‌قول دوتایی رفتار می‌شود: تمام خطوط سند درجا مشمول بسط پارامتر، جایگزینی دستور و بسط حسابی می‌شوند، دنباله نویسه .B \e به صورت تحت‌اللفظی رفتار می‌شود، و .B \e باید برای نقل‌قول کردن نویسه‌های .BR \e ، .BR $ و .BR \` استفاده شود؛ با این حال، نویسه‌های نقل‌قول دوتایی معنی خاصی ندارند. .PP اگر عملگر تغییر مسیر .BR <<\- باشد، آن‌گاه پوسته تمام نویسه‌های تب ابتدایی را از خطوط ورودی و خط حاوی .IR delimiter حذف می‌کند. این امکان به اسناد درجا درون اسکریپت‌های پوسته اجازه می‌دهد تا به شکلی طبیعی دندانه‌دار شوند. .PP اگر جداکننده (delimiter) نقل‌قول نشده باشد، دنباله .B \e به عنوان ادامه‌دهنده خط تلقی می‌شود: دو خط به یکدیگر متصل می‌شوند و نویسه بک‌اسلش-خط‌جدید حذف می‌گردد. این فرآیند هنگام خواندن سند درجا، پیش از بررسی جداکننده پایانی رخ می‌دهد، بنابراین خطوط متصل‌شده می‌توانند جداکننده پایانی را تشکیل دهند. .SS "رشته‌های درجا (Here Strings)" گونه‌ای از اسناد درجا، با قالب زیر است: .RS .PP .nf [\fIn\fP]\fB<<<\fP\fIword\fP .fi .RE .PP عبارت \fIword\fP تحت بسط تیلدا، بسط پارامتر و متغیر، جایگزینی دستور، بسط حسابی و حذف نقل‌قول قرار می‌گیرد. بسط نام مسیر و تفکیک کلمات انجام نمی‌شود. نتیجه به عنوان یک رشته واحد، همراه با یک خط جدید الحاق شده، به عنوان ورودی استاندارد دستور (یا توصیف‌کننده فایل \fIn\fP در صورت مشخص شدن \fIn\fP) ارائه می‌شود. .SS "تکثیر توصیف‌کننده‌های فایل" عملگر تغییر مسیر .RS .PP [\fIn\fP]\fB<&\fP\fIword\fP .RE .PP برای تکثیر توصیف‌کننده‌های فایل ورودی به کار می‌رود. اگر .I word به یک یا چند رقم بسط یابد، توصیف‌کننده فایل .I n به عنوان کپی از آن توصیف‌کننده فایل قرار داده می‌شود. اگر ارقام موجود در .I word توصیف‌کننده فایلی را مشخص نکنند که برای ورودی باز شده باشد، یک خطای تغییر مسیر رخ می‌دهد. اگر .I word به .BR \- ارزیابی شود، توصیف‌کننده فایل .I n بسته می‌شود. اگر .I n مشخص نشده باشد، از ورودی استاندارد (توصیف‌کننده فایل 0) استفاده می‌شود. .PP عملگر .RS .PP [\fIn\fP]\fB>&\fP\fIword\fP .RE .PP مشابه قبل برای تکثیر توصیف‌کننده‌های فایل خروجی به کار می‌رود. اگر .I n مشخص نشده باشد، از خروجی استاندارد (توصیف‌کننده فایل 1) استفاده می‌شود. اگر ارقام موجود در .I word توصیف‌کننده فایلی را مشخص نکنند که برای خروجی باز شده باشد، یک خطای تغییر مسیر رخ می‌دهد. اگر .I word به .BR \- ارزیابی شود، توصیف‌کننده فایل .I n بسته می‌شود. به عنوان یک حالت خاص، اگر \fIn\fP حذف شده باشد، و \fIword\fP به یک یا چند رقم یا \fB\-\fP بسط نیابد، همان‌طور که پیش‌تر شرح داده شد، خروجی استاندارد و خطای استاندارد تغییر مسیر داده می‌شوند. .SS "انتقال توصیف‌کننده‌های فایل" عملگر تغییر مسیر .RS .PP [\fIn\fP]\fB<&\fP\fIdigit\fP\fB\-\fP .RE .PP توصیف‌کننده فایل \fIdigit\fP را به توصیف‌کننده فایل .IR n ، یا به ورودی استاندارد (توصیف‌کننده فایل 0) در صورتی که \fIn\fP مشخص نشده باشد، منتقل می‌کند. \fIdigit\fP پس از تکثیر به \fIn\fP بسته می‌شود. .PP مشابهاً، عملگر تغییر مسیر .RS .PP [\fIn\fP]\fB>&\fP\fIdigit\fP\fB\-\fP .RE .PP توصیف‌کننده فایل \fIdigit\fP را به توصیف‌کننده فایل .IR n ، یا به خروجی استاندارد (توصیف‌کننده فایل 1) در صورتی که \fIn\fP مشخص نشده باشد، منتقل می‌کند. .SS "باز کردن توصیف‌کننده‌های فایل برای خواندن و نوشتن" عملگر تغییر مسیر .RS .PP [\fIn\fP]\fB<>\fP\fIword\fP .RE .PP فایلی را که نام آن بسط‌یافته .I word است، برای هر دو حالت خواندن و نوشتن روی توصیف‌کننده فایل .IR n ، یا روی توصیف‌کننده فایل 0 در صورت مشخص نبودن .I n باز می‌کند. اگر فایل وجود نداشته باشد، ایجاد می‌شود. .SH "نامهای مستعار (ALIASES)" \fIAliases\fP (نام‌های مستعار) این امکان را فراهم می‌کنند که یک رشته به‌جای کلمه‌ای جایگزین شود که در موقعیتی از ورودی قرار دارد که می‌تواند کلمه اول یک دستور ساده باشد. نام‌های مستعار دارای نام‌ها و مقادیر متناظری هستند که با استفاده از دستورات توکار \fBalias\fP و \fBunalias\fP تنظیم و حذف می‌شوند (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر را ببینید). .PP اگر پوسته یک کلمه بدون نقل‌قول را در موقعیت مناسب بخواند، بررسی می‌کند که آیا این کلمه با نام یک نام مستعار مطابقت دارد یا خیر. در صورت تطابق، پوسته کلمه را با مقدار نام مستعار جایگزین کرده، و آن مقدار را چنان می‌خواند که گویی به جای آن کلمه خوانده شده است. پوسته پیش از تلاش برای جایگزینی نام مستعار، به کاراکترهای پس از کلمه نگاه نمی‌کند. .PP کاراکترهای \fB/\fP، \fB$\fP، \fB\`\fP، و \fB=\fP و هر یک از \fIابرکاراکترها (metacharacters)\fP یا کاراکترهای نقل‌قول پوسته که در بالا فهرست شده‌اند، نباید در نام یک نام مستعار ظاهر شوند. متن جایگزین می‌تواند شامل هر ورودی معتبر پوسته، از جمله ابرکاراکترهای پوسته باشد. کلمه اول متن جایگزین از نظر نام‌های مستعار بررسی می‌شود، اما کلمه‌ای که مشابه با نام مستعار در حال بسط باشد، برای بار دوم بسط داده نمی‌شود. این بدان معناست که می‌توان برای نمونه .B ls را به .BR "ls \-F" مستعار کرد، و .B bash سعی نمی‌کند متن جایگزین را به‌طور بازگشتی بسط دهد. .PP اگر آخرین کاراکتر مقدار نام مستعار یک .IR blank (فاصله خالی) باشد، پوسته کلمه دستور بعدی را که پس از نام مستعار قرار دارد نیز برای بسط نام مستعار بررسی می‌کند. .PP نام‌های مستعار با دستور .B alias ایجاد و فهرست می‌شوند، و با دستور .B unalias حذف می‌گردند. .PP هیچ سازوکاری برای استفاده از آرگومان‌ها در متن جایگزین وجود ندارد. اگر به آرگومان‌ها نیاز است، به‌جای آن از یک تابع پوسته (بخش .SM .B "توابع (FUNCTIONS)" در زیر را ببینید) استفاده کنید. .PP نام‌های مستعار هنگامی که پوسته تعاملی نیست بسط داده نمی‌شوند، مگر اینکه گزینه پوسته .B expand_aliases با استفاده از .B shopt تنظیم شده باشد (توضیحات مربوط به .B shopt را در بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر ببینید). .PP قواعد مربوط به تعریف و استفاده از نام‌های مستعار تا حدودی گیج‌کننده هستند. .B Bash پیش از اجرای هر یک از دستورات موجود در یک خط یا یک دستور مرکب، همواره حداقل یک خط کامل از ورودی، و تمام خطوطی که یک دستور مرکب را تشکیل می‌دهند را می‌خواند. نام‌های مستعار زمانی بسط می‌یابند که یک دستور خوانده می‌شود، نه هنگامی که اجرا می‌شود. بنابراین، تعریف نام مستعاری که در همان خط یک دستور دیگر ظاهر می‌شود تا زمانی که پوسته خط بعدی ورودی را نخواند اعمال نمی‌شود، و تعریف نام مستعار در یک دستور مرکب نیز تا زمانی که پوسته کل دستور مرکب را تجزیه و اجرا نکند اعمال نخواهد شد. دستوراتی که پس از تعریف نام مستعار در آن خط، یا در بقیه دستور مرکب قرار دارند، تحت تأثیر نام مستعار جدید قرار نمی‌گیرند. این رفتار در هنگام اجرای توابع نیز مساله‌ساز است. نام‌های مستعار هنگام خوانده شدن تعریف تابع بسط می‌یابند، نه هنگامی که تابع اجرا می‌شود، زیرا تعریف تابع خود یک دستور است. در نتیجه، نام‌های مستعار تعریف‌شده در یک تابع تا پس از اجرای آن تابع در دسترس نخواهند بود. برای اطمینان، همواره تعریف‌های نام مستعار را در یک خط جداگانه قرار دهید، و از .B alias در دستورات مرکب استفاده نکنید. .PP تقریباً برای هر هدفی، توابع پوسته نسبت به نام‌های مستعار ارجحیت دارند. .SH "توابع (FUNCTIONS)" یک تابع پوسته، که همان‌طور که در بالا تحت عنوان .SM .BR "گرامر پوسته (SHELL GRAMMAR)" شرح داده شد تعریف می‌شود، مجموعه‌ای از دستورات را برای اجرای بعدی ذخیره می‌کند. هنگامی که نام یک تابع پوسته به عنوان نام یک دستور ساده استفاده می‌شود، پوسته فهرست دستورات مرتبط با نام آن تابع را اجرا می‌کند. توابع در بافتار پوسته فراخواننده اجرا می‌شوند؛ هیچ فرایند جدیدی برای تفسیر آن‌ها ایجاد نمی‌شود (این را با اجرای یک اسکریپت پوسته مقایسه کنید). .PP هنگامی که یک تابع اجرا می‌شود، آرگومان‌های ارسالی به تابع در طول اجرای آن به پارامترهای مکانی تبدیل می‌شوند. پارامتر ویژه .B # به‌روزرسانی می‌شود تا پارامترهای مکانی جدید را منعکس کند. پارامتر ویژه \fB0\fP بدون تغییر می‌ماند. اولین عنصر متغیر .SM .B FUNCNAME در زمان اجرای تابع روی نام تابع تنظیم می‌شود. .PP تمام جنبه‌های دیگر محیط اجرای پوسته بین یک تابع و فراخواننده‌اش یکسان است، به استثنای این موارد: تله‌های .SM .B DEBUG و .B RETURN (توضیحات مربوط به دستور توکار .B trap در زیر بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" را در ادامه ببینید) به ارث برده نمی‌شوند، مگر اینکه به تابع صفت \fBtrace\fP داده شده باشد (توضیحات مربوط به دستور توکار .SM .B declare در ادامه را ببینید) یا گزینه پوسته \fB\-o functrace\fP با دستور توکار \fBset\fP فعال شده باشد (که در این صورت تمام توابع تله‌های \fBDEBUG\fP و \fBRETURN\fP را به ارث می‌برند)، و تله .SM .B ERR به ارث برده نمی‌شود مگر اینکه گزینه پوسته \fB\-o errtrace\fP فعال شده باشد. .PP متغیرهای محلی برای تابع با دستور توکار .B local تعریف می‌شوند (\fIlocal variables\fP). به طور معمول، متغیرها و مقادیر آن‌ها بین تابع و فراخواننده‌اش به اشتراک گذاشته می‌شوند. اگر متغیری به صورت \fBlocal\fP تعریف شود، حوزه دید متغیر به آن تابع و فرزندانش (شامل توابعی که فراخوانی می‌کند) محدود می‌شود. .PP در توضیحات زیر، \fIcurrent scope\fP (حوزه فعلی) تابعی است که در حال حاضر در حال اجراست. حوزه‌های قبلی شامل فراخواننده آن تابع و به همین ترتیب، به سمت عقب تا .Q global scope (حوزه سراسری)، جایی که پوسته هیچ تابع پوسته‌ای را اجرا نمی‌کند، تشکیل می‌شوند. یک متغیر محلی در حوزه فعلی، متغیری است که با استفاده از دستورات توکار \fBlocal\fP یا \fBdeclare\fP در تابعی که در حال حاضر در حال اجراست اعلان شده باشد. .PP متغیرهای محلی، متغیرهای با نام یکسان را که در حوزه‌های قبلی اعلان شده‌اند .Q سایه‌اندازی (shadow) می‌کنند. به عنوان مثال، یک متغیر محلی اعلان‌شده در یک تابع، متغیرهای با همان نام را که در حوزه‌های قبلی اعلان شده‌اند، از جمله متغیرهای سراسری، پنهان می‌کند: ارجاعات و انتساب‌ها به متغیر محلی اشاره دارند و متغیرهای موجود در حوزه‌های قبلی را بدون تغییر باقی می‌گذارند. هنگامی که تابع بازمی‌گردد، متغیر سراسری بار دیگر نمایان می‌شود. .PP پوسته از \fIdynamic scoping\fP (حوزه‌بندی پویا) برای کنترل میدان دید یک متغیر درون توابع استفاده می‌کند. با حوزه‌بندی پویا، متغیرهای قابل مشاهده و مقادیر آن‌ها نتیجه توالی فراخوانی‌های تابعی هستند که باعث رسیدن اجرا به تابع فعلی شده‌اند. مقدار متغیری که یک تابع می‌بیند، به مقدار آن در فراخواننده‌اش (در صورت وجود) بستگی دارد، چه آن فراخواننده حوزه سراسری باشد یا یک تابع پوسته دیگر. این همچنین مقداری است که اعلان یک متغیر محلی روی آن سایه می‌اندازد، و مقداری است که هنگام بازگشت تابع بازیابی می‌شود. .PP به‌عنوان مثال، اگر متغیر \fIvar\fP در تابع \fIfunc1\fP به‌صورت محلی اعلان شود، و \fIfunc1\fP تابع دیگری به نام \fIfunc2\fP را فراخوانی کند، ارجاعات به \fIvar\fP که از درون \fIfunc2\fP انجام می‌شوند به متغیر محلی \fIvar\fP از \fIfunc1\fP منتهی می‌گردند، و روی هر متغیر سراسری با نام \fIvar\fP سایه می‌افکنند. .PP دستور توکار \fBunset\fP نیز با استفاده از همین حوزه پویای متغیرها عمل می‌کند: اگر متغیری متعلق به حوزه محلی فعلی باشد، \fBunset\fP آن را حذف (unset) می‌کند؛ در غیر این صورت، حذف به متغیر یافت‌شده در هر یک از حوزه‌های فراخواننده همان‌طور که در بالا توضیح داده شد، ارجاع خواهد داد. اگر متغیری در حوزه محلی فعلی حذف شود، تا زمانی که مجدداً در آن حوزه مقداردهی نشود یا تا زمان بازگشت تابع، به همین وضعیت (به‌عنوان حذف‌شده) باقی می‌ماند. به‌محض بازگشت تابع، هر نمونه از متغیر در حوزه قبلی مجدداً قابل مشاهده خواهد بود. اگر عملیات حذف روی متغیری در حوزه قبلی اعمال شود، هر نمونه از متغیری با آن نام که سایه‌افکنی شده بود، قابل مشاهده می‌شود (در زیر ببینید که چگونه گزینه پوسته \fBlocalvar_unset\fP این رفتار را تغییر می‌دهد). .PP متغیر .SM .B FUNCNEST در صورتی که روی یک مقدار عددی بزرگ‌تر از 0 تنظیم شود، حداکثر سطح تو در تویی تابع را تعریف می‌کند. فراخوانی‌های تابعی که از این حد فراتر بروند باعث لغو و متوقف شدن کل دستور می‌شوند. .PP اگر دستور توکار .B return در یک تابع اجرا شود، اجرای تابع پایان یافته و اجرا با دستور بعدیِ پس از فراخوانی تابع از سر گرفته می‌شود. اگر به \fBreturn\fP یک آرگومان عددی داده شود، آن مقدار وضعیت بازگشتیِ تابع خواهد بود؛ در غیر این صورت، وضعیت بازگشتی تابع برابر با وضعیت خروجِ آخرین دستور اجراشده قبل از \fBreturn\fP خواهد بود. هر دستوری که با تله (trap) \fBRETURN\fP مرتبط باشد، قبل از ازسرگیری اجرا، انجام می‌گیرد. هنگامی که یک تابع به پایان می‌رسد، مقادیر پارامترهای مکانی و پارامتر ویژه .B # به مقادیری که قبل از اجرای تابع داشتند، بازگردانده می‌شوند. .PP گزینه .B \-f برای دستورات توکار .B declare یا .B typeset نام‌ها و تعاریف توابع را فهرست می‌کند. گزینه .B \-F برای .B declare یا .B typeset فقط نام توابع را فهرست می‌کند (و در صورت فعال بودن گزینه پوسته \fBextdebug\fP، به‌صورت اختیاری فایل منبع و شماره خط را نیز نمایش می‌دهد). توابع را می‌توان صادر (export) کرد تا فرآیندهای فرزند پوسته (آن‌هایی که هنگام اجرای یک فراخوانی جداگانه پوسته ایجاد می‌شوند) با استفاده از گزینه .B \-f در دستور توکار .B export به‌طور خودکار آن‌ها را به‌صورت تعریف‌شده داشته باشند. گزینه \fB\-f\fP برای دستور توکار .B unset تعریف یک تابع را حذف می‌کند. .PP توابع می‌توانند بازگشتی باشند. متغیر \fBFUNCNEST\fP ممکن است برای محدود کردن عمق پشته فراخوانی تابع و محدود کردن تعداد فراخوانی‌های تابع استفاده شود. به‌طور پیش‌فرض، \fBbash\fP هیچ محدودیتی برای تعداد فراخوانی‌های بازگشتی اعمال نمی‌کند. .SH "ارزیابی حسابی (ARITHMETIC EVALUATION)" پوسته اجازه می‌دهد که در شرایط معینی، عبارات حسابی ارزیابی شوند (دستورات توکار \fBlet\fP و \fBdeclare\fP، دستور ترکیبی \fB((\fP، دستور حسابی \fBfor\fP، دستور شرطی \fB[[\fP، و \fBبسط حسابی (Arithmetic Expansion)\fP را ببینید). .PP ارزیابی در بزرگ‌ترین اعداد صحیح با عرض ثابتِ در دسترس، بدون بررسی سرریز انجام می‌شود، هرچند تقسیم بر 0 به عنوان یک تله گرفته شده و به‌عنوان یک خطا علامت‌گذاری می‌شود. عملگرها و اولویت، شرکت‌پذیری و مقادیر آن‌ها مشابه زبان C هستند. فهرست عملگرهای زیر به سطوحی از عملگرها با اولویت برابر گروه‌بندی شده است. این سطوح به ترتیب اولویت کاهشی فهرست شده‌اند. .PP .PD 0 .TP .B \fIid\fP++ \fIid\fP\-\- پس‌افزایش و پس‌کاهش متغیر .TP .B ++\fIid\fP \-\-\fIid\fP پیش‌افزایش و پیش‌کاهش متغیر .TP .B \- + منفی و مثبت یکانی .TP .B ! \*~ نقیض منطقی و بیتی .TP .B ** توان .TP .B * / % ضرب، تقسیم، باقیمانده .TP .B + \- جمع، تفریق .TP .B << >> شیفت بیتی به چپ و راست .TP .B <= >= < > مقایسه .TP .B == != برابری و نابرابری .TP .B & AND بیتی .TP .B \*^ OR انحصاری بیتی (XOR) .TP .B | OR بیتی .TP .B && AND منطقی .TP .B || OR منطقی .TP .B \fIexpr\fP?\fIexpr\fP:\fIexpr\fP عملگر شرطی .TP .B "= *= /= %= += \-= <<= >>= &= \*^= |=" انتساب .TP .B \fIexpr1\fP , \fIexpr2\fP کاما .PD .PP متغیرهای پوسته به عنوان عملوند مجاز هستند؛ بسط پارامتر پیش از ارزیابی عبارت انجام می‌شود. درون یک عبارت، متغیرهای پوسته همچنین می‌توانند با نام و بدون استفاده از نحو بسط پارامتر ارجاع داده شوند. این بدان معناست که می‌توانید از "x"، که در آن \fIx\fP نام یک متغیر پوسته است، در یک عبارت حسابی استفاده کنید، و پوسته مقدار آن را به عنوان یک عبارت ارزیابی کرده و از نتیجه استفاده خواهد کرد. متغیر پوسته‌ای که تهی (null) باشد یا مقداردهی نشده باشد، هنگامی که در یک عبارت با نام ارجاع داده شود، به 0 ارزیابی می‌شود. .PP مقدار یک متغیر هنگامی که به آن ارجاع داده می‌شود، یا هنگامی که به متغیری که با استفاده از \fBdeclare \-i\fP صفت \fIinteger\fP (عدد صحیح) داده شده مقداری اختصاص داده می‌شود، به عنوان یک عبارت حسابی ارزیابی می‌گردد. یک مقدار تهی (null) به 0 ارزیابی می‌شود. نیازی نیست که صفت \fIinteger\fP یک متغیر پوسته فعال باشد تا بتوان از آن در یک عبارت استفاده کرد. .PP ثابت‌های عدد صحیح از تعریف زبان C پیروی می‌کنند، بدون پسوندها یا ثابت‌های نویسه‌ای. ثابت‌هایی با 0 آغازین به عنوان اعداد در مبنای هشت (اکتال) تفسیر می‌شوند. یک 0x یا 0X آغازین نشان‌دهنده مبنای شانزده (هگزادسیمال) است. در غیر این صورت، اعداد به شکل [\fIbase#\fP]n خواهند بود، که در آن \fIbase\fP اختیاری، عددی در مبنای ده بین 2 و 64 است که مبنای حسابی را نشان می‌دهد، و \fIn\fP عددی در آن مبنا است. اگر \fIbase#\fP حذف شود، مبنای 10 استفاده می‌شود. هنگام مشخص کردن \fIn\fP، در صورتی که یک غیررقم مورد نیاز باشد، ارقام بزرگ‌تر از 9 به ترتیب با حروف کوچک، حروف بزرگ، @، و _ نشان داده می‌شوند. اگر \fIbase\fP کمتر یا مساوی 36 باشد، حروف کوچک و بزرگ می‌توانند به جای یکدیگر برای نمایش اعداد بین 10 و 35 به کار روند. .PP عملگرها بر اساس اولویت ارزیابی می‌شوند. زیر‌عبارت‌های داخل پرانتز ابتدا ارزیابی می‌شوند و ممکن است قوانین اولویت فوق را لغو کنند. .SH "عبارات شرطی (CONDITIONAL EXPRESSIONS)" عبارات شرطی توسط دستور ترکیبی \fB[[\fP و دستورات توکار \fBtest\fP و \fB[\fP برای آزمایش ویژگی‌های فایل و انجام مقایسه‌های رشته‌ای و حسابی استفاده می‌شوند. دستورات \fBtest\fP و \fB[\fP رفتار خود را بر اساس تعداد آرگومان‌ها تعیین می‌کنند؛ برای هرگونه اقدام خاص دیگر به توضیحات آن دستورات مراجعه کنید. .PP عبارات از مؤلفه‌های اولیه یکانی یا دوتایی فهرست‌شده در زیر تشکیل می‌شوند. عبارات یکانی اغلب برای بررسی وضعیت یک فایل یا متغیر پوسته استفاده می‌شوند. عملگرهای دوتایی برای مقایسه‌های رشته‌ای، عددی و ویژگی‌های فایل به کار می‌روند. .PP پوسته \fBBash\fP هنگام استفاده از چندین نام فایل در عبارات، به صورت ویژه‌ای با آن‌ها رفتار می‌کند. اگر سیستم‌عاملی که \fBbash\fP روی آن اجرا می‌شود این فایل‌های ویژه را فراهم کند، bash از آن‌ها استفاده خواهد کرد؛ در غیر این صورت آن‌ها را به صورت داخلی با این رفتار شبیه‌سازی می‌کند: اگر هر آرگومان \fIfile\fP برای یکی از مؤلفه‌های اولیه به شکل .FN /dev/fd/n باشد، آنگاه \fBbash\fP توصیف‌گر فایل \fIn\fP را بررسی می‌کند. اگر آرگومان \fIfile\fP برای یکی از مؤلفه‌های اولیه یکی از موارد .FN /dev/stdin ، .FN /dev/stdout ، یا .FN /dev/stderr باشد، \fBbash\fP به ترتیب توصیف‌گر فایل 0، 1 یا 2 را بررسی می‌کند. .PP مگر اینکه خلاف آن مشخص شده باشد، مؤلفه‌های اولیه‌ای که روی فایل‌ها عمل می‌کنند از پیوندهای نمادین پیروی کرده و به جای خود پیوند، روی مقصد پیوند عمل می‌کنند. .PP هنگام استفاده همراه با \fB[[\fP، یا زمانی که پوسته در حالت posix است، عملگرهای \fB<\fP و \fB>\fP بر اساس ترتیب لغت‌نگاری با استفاده از محلی‌سازی (locale) فعلی مرتب‌سازی می‌کنند. هنگامی که پوسته در حالت posix نیست، دستور \fBtest\fP مرتب‌سازی را با استفاده از ترتیب ASCII انجام می‌دهد. .PP .PD 0 .TP .B \-a \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد. .TP .B \-b \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد و یک فایل ویژه بلوکی باشد. .TP .B \-c \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد و یک فایل ویژه کاراکتری باشد. .TP .B \-d \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد و یک دایرکتوری باشد. .TP .B \-e \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد. .TP .B \-f \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد و یک فایل معمولی (regular file) باشد. .TP .B \-g \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد و بیت set-group-id آن تنظیم شده باشد. .TP .B \-h \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد و یک پیوند نمادین باشد. .TP .B \-k \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد و بیت چسبنده .Q sticky آن تنظیم شده باشد. .TP .B \-p \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد و یک لوله نام‌گذاری‌شده (FIFO) باشد. .TP .B \-r \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد و قابل خواندن باشد. .TP .B \-s \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد و اندازه آن بزرگ‌تر از صفر باشد. .TP .B \-t \fIfd\fP درست است اگر توصیف‌گر فایل .I fd باز باشد و به یک ترمینال اشاره کند. .TP .B \-u \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد و بیت set-user-id آن تنظیم شده باشد. .TP .B \-w \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد و قابل نوشتن باشد. .TP .B \-x \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد و قابل اجرا باشد. .TP .B \-G \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد و متعلق به شناسه گروهی مؤثر (effective group id) باشد. .TP .B \-L \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد و یک پیوند نمادین (symbolic link) باشد. .TP .B \-N \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد و از زمان آخرین دسترسی تغییر کرده باشد. .TP .B \-O \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد و متعلق به شناسه کاربری مؤثر (effective user id) باشد. .TP .B \-S \fIfile\fP درست است اگر \fIfile\fP وجود داشته باشد و یک سوکت باشد. .TP .B \-o \fIoptname\fP درست است اگر گزینه پوسته .I optname فعال باشد. فهرست گزینهها را در زیر توضیحات گزینه .B \-o برای دستور توکار .B set در ادامه ببینید. .TP .B \-v \fIvarname\fP درست است اگر متغیر پوسته .I varname تنظیم شده باشد (مقداری به آن اختصاص یافته باشد). اگر \fIvarname\fP نام یک متغیر آرایه ایندکسشده (نمایهدار) باشد که با \fI@\fP یا \fI*\fP زیرنویس شده است، در صورتی که آرایه دارای هرگونه عنصر مقداردهیشده باشد درست بازمیگرداند. اگر \fIvarname\fP نام یک متغیر آرایه انجمنی (متناظر) باشد که با \fI@\fP یا \fI*\fP زیرنویس شده است، در صورتی که عنصری با آن کلید مقداردهی شده باشد درست بازمیگرداند. .TP .B \-R \fIvarname\fP درست است اگر متغیر پوسته .I varname تنظیم شده باشد و یک ارجاع نام (name reference) باشد. .TP .B \-z \fIstring\fP درست است اگر طول \fIstring\fP صفر باشد. .TP \fIstring\fP .TP .B \-n \fIstring\fP درست است اگر طول .I string غیر صفر باشد. .PD .TP \fIstring1\fP \fB==\fP \fIstring2\fP .PD 0 .TP \fIstring1\fP \fB=\fP \fIstring2\fP درست است اگر رشتهها برابر باشند. \fB=\fP باید با دستور \fBtest\fP برای انطباق با .SM POSIX استفاده شود. هنگامی که با دستور \fB[[\fP استفاده میشود، این تطابق الگو را همانطور که در بالا توضیح داده شد (\fBدستورات ترکیبی (Compound Commands)\fP) انجام میدهد. .TP \fIstring1\fP \fB!=\fP \fIstring2\fP درست است اگر رشتهها برابر نباشند. .TP \fIstring1\fP \fB<\fP \fIstring2\fP درست است اگر \fIstring1\fP از نظر لغتنامهای قبل از \fIstring2\fP مرتب شود. .TP \fIstring1\fP \fB>\fP \fIstring2\fP درست است اگر \fIstring1\fP از نظر لغتنامهای بعد از \fIstring2\fP مرتب شود. .PD .TP .PD 0 \fIfile1\fP \fB\-ef\fP \fIfile2\fP درست است اگر \fIfile1\fP و \fIfile2\fP به همان دستگاه و شمارههای inode یکسان اشاره کنند. .TP \fIfile1\fP \-\fBnt\fP \fIfile2\fP درست است اگر \fIfile1\fP جدیدتر (بر اساس تاریخ اصلاح) از \fIfile2\fP باشد، یا اگر \fIfile1\fP وجود داشته باشد و \fPfile2\fP وجود نداشته باشد. .TP \fIfile1\fP \-\fBot\fP \fIfile2\fP درست است اگر \fIfile1\fP قدیمیتر از \fIfile2\fP باشد، یا اگر \fIfile2\fP وجود داشته باشد و \fIfile1\fP وجود نداشته باشد. .PD .TP .I \fIarg1\fP \fBOP\fP \fIarg2\fP .SM .B OP یکی از .BR \-eq ، .BR \-ne ، .BR \-lt ، .BR \-le ، .BR \-gt یا .BR \-ge است. این عملگرهای دودویی حسابی در صورتی مقدار درست (true) را برمی‌گردانند که \fIarg1\fP به ترتیب برابر، نابرابر، کوچکتر، کوچکتر یا مساوی، بزرگتر، یا بزرگتر یا مساوی با \fIarg2\fP باشد. .I arg1 و .I arg2 می‌توانند اعداد صحیح مثبت یا منفی باشند. هنگامی که همراه با دستور \fB[[\fP استفاده شوند، .I arg1 و .I arg2 به عنوان عبارت‌های حسابی ارزیابی می‌شوند (بخش .SM .B "ارزیابی حسابی (ARITHMETIC EVALUATION)" در بالا را ببینید). از آنجا که بسط‌هایی که دستور \fB[[\fP بر روی .I arg1 و .I arg2 انجام می‌دهد ممکن است به رشته‌های خالی منجر شود، ارزیابی عبارت حسابی با آن‌ها به عنوان عباراتی که حاصلشان 0 است رفتار می‌کند. .PD .SH "بسط دستورات ساده (SIMPLE COMMAND EXPANSION)" هنگامی که پوسته یک دستور ساده را اجرا می‌کند، بسط‌ها، مقداردهی‌ها و تغییر مسیرهای زیر را از چپ به راست و به ترتیب زیر انجام می‌دهد. .IP 1. کلماتی که تجزیه‌کننده (parser) آن‌ها را به عنوان مقداردهی متغیر (کلمات قبل از نام دستور) و تغییر مسیر علامت‌گذاری کرده است، برای پردازش‌های بعدی ذخیره می‌شوند. .IP 2. کلماتی که مقداردهی متغیر یا تغییر مسیر نیستند بسط داده می‌شوند. اگر بعد از بسط کلمه‌ای باقی بماند، اولین کلمه به عنوان نام دستور در نظر گرفته شده و کلمات باقی‌مانده آرگومان‌ها خواهند بود. .IP 3. تغییر مسیرها همان‌طور که در بالا در بخش .SM .BR "تغییر مسیر (REDIRECTION)" شرح داده شد، انجام می‌شوند. .IP 4. متن پس از \fB=\fP در هر مقداردهی متغیر، قبل از اینکه به متغیر انتساب یابد، تحت بسط تیلدا، بسط پارامتر، جایگزینی دستور، بسط حسابی و حذف نقل‌قول قرار می‌گیرد. .PP اگر هیچ نام دستوری حاصل نشود، مقداردهی متغیرها بر روی محیط فعلی پوسته تأثیر می‌گذارد. در مورد چنین دستوری (دستوری که فقط شامل عبارت‌های مقداردهی و تغییر مسیر است)، عبارت‌های مقداردهی قبل از تغییر مسیرها انجام می‌شوند. در غیر این صورت، متغیرها به محیط دستورِ اجراشده اضافه می‌شوند و بر محیط فعلی پوسته تأثیری ندارند. اگر هر یک از مقداردهی‌ها تلاش کند مقداری را به یک متغیر فقط‌خواندنی اختصاص دهد، خطایی رخ می‌دهد و دستور با وضعیتی غیرصفر خارج می‌شود. .PP اگر هیچ نام دستوری حاصل نشود، تغییر مسیرها انجام می‌شوند، اما بر محیط فعلی پوسته تأثیری نمی‌گذارند. خطای تغییر مسیر باعث می‌شود که دستور با وضعیت غیرصفر خارج شود. .PP اگر بعد از بسط، نام دستوری باقی مانده باشد، روند اجرا همان‌گونه که در زیر شرح داده شده ادامه می‌یابد. در غیر این صورت، دستور پایان می‌یابد. اگر یکی از بسط‌ها شامل یک جایگزینی دستور باشد، وضعیت خروج دستور همان وضعیت خروج آخرین جایگزینی دستورِ انجام‌شده خواهد بود. اگر هیچ جایگزینی دستوری وجود نداشته باشد، دستور با وضعیت صفر خارج می‌شود. .SH "اجرای دستور (COMMAND EXECUTION)" پس از اینکه یک دستور به کلمات تفکیک شد، در صورتی که نتیجه یک دستور ساده و یک فهرست اختیاری از آرگومان‌ها باشد، پوسته اقدامات زیر را انجام می‌دهد. .PP اگر نام دستور حاوی هیچ اسلشی نباشد، پوسته تلاش می‌کند مکان آن را پیدا کند. اگر تابع پوسته‌ای با آن نام وجود داشته باشد، آن تابع همان‌طور که در بالا در .SM .BR "توابع (FUNCTIONS)" شرح داده شد، فراخوانی می‌شود. اگر نام با هیچ تابعی مطابقت نداشته باشد، پوسته آن را در فهرست دستورات توکار پوسته جستجو می‌کند. اگر تطابقی یافت شود، آن دستور توکار فراخوانی می‌شود. .PP اگر نام نه یک تابع پوسته باشد و نه یک دستور توکار، و فاقد هرگونه ممیز (اسلش) باشد، .B bash هر یک از مؤلفه‌های .SM .B PATH را برای یافتن دایرکتوری حاوی یک فایل اجرایی با آن نام جستجو می‌کند. .B Bash از یک جدول درهم‌سازی (hash table) برای به خاطر سپردن مسیرهای کامل فایل‌های اجرایی استفاده می‌کند (نگاه کنید به .B hash در بخش .SM .B "SHELL BUILTIN COMMANDS" در زیر). Bash تنها در صورتی جستجوی کاملی در دایرکتوری‌های موجود در .SM .B PATH انجام می‌دهد که دستور در جدول درهم‌سازی پیدا نشود. اگر جستجو ناموفق باشد، پوسته به دنبال یک تابع تعریف‌شده پوسته به نام \fBcommand_not_found_handle\fP می‌گردد. اگر چنین تابعی وجود داشته باشد، در یک محیط اجرای مجزا با دستور اصلی و آرگومان‌های دستور اصلی به عنوان آرگومان‌هایش فراخوانی می‌شود و وضعیت خروج این تابع، وضعیت خروج آن زیرپوسته (subshell) خواهد بود. اگر چنین تابعی تعریف نشده باشد، پوسته یک پیام خطا چاپ کرده و وضعیت خروج ۱۲۷ را برمی‌گرداند. .PP اگر جستجو موفقیت‌آمیز باشد، یا اگر نام دستور شامل یک یا چند ممیز (اسلش) باشد، پوسته برنامهٔ نام‌برده را در یک محیط اجرای مجزا اجرا می‌کند. آرگومان ۰ برابر با نام داده‌شده تنظیم می‌شود، و باقی آرگومان‌های دستور، در صورت وجود، روی آرگومان‌های ارائه‌شده تنظیم می‌گردند. .PP اگر این اجرا به دلیل اینکه فایل در قالب اجرایی معتبر نیست شکست بخورد و فایل دایرکتوری نباشد، فرض می‌شود که فایل یک \fIshell script\fP (اسکریپت پوسته) است؛ فایلی حاوی دستورات پوسته، و پوسته نمونهٔ جدیدی از خود را برای اجرای آن ایجاد می‌کند. Bash تلاش می‌کند مشخص کند که آیا فایل یک فایل متنی است یا باینری، و فایل‌هایی را که تشخیص دهد باینری هستند اجرا نخواهد کرد. این زیرپوسته خود را دوباره مقداردهی اولیه می‌کند، به طوری که اثر آن مشابه زمانی است که یک پوستهٔ جدید برای رسیدگی به اسکریپت فراخوانی شده باشد، با این استثنا که مکان دستورات به خاطر سپرده شده توسط والد (نگاه کنید به .B hash در زیر، ذیل بخش .SM .B "SHELL BUILTIN COMMANDS" توسط فرزند حفظ می‌شوند. .PP اگر برنامه فایلی باشد که با .BR #! آغاز می‌شود، بقیهٔ خط اول یک مفسر را برای برنامه مشخص می‌کند. پوسته، مفسر مشخص‌شده را در سیستم‌های عاملی که خودشان این قالب اجرایی را مدیریت نمی‌کنند، اجرا می‌نماید. آرگومان‌های مفسر شامل یک آرگومان اختیاری منفرد به دنبال نام مفسر در خط اول برنامه، به همراه نام برنامه، و در ادامه آرگومان‌های دستور (در صورت وجود) خواهند بود. .SH "محیط اجرای دستور (COMMAND EXECUTION ENVIRONMENT)" پوسته دارای یک \fIexecution environment\fP (محیط اجرا) است که از موارد زیر تشکیل شده است: .IP \(bu فایل‌های بازی که هنگام فراخوانی به پوسته به ارث رسیده‌اند، با اعمال تغییرات ناشی از تغییر مسیرهای ارائه‌شده به دستور توکار \fBexec\fP. .IP \(bu دایرکتوری کاری فعلی که توسط \fBcd\fP، \fBpushd\fP، یا \fBpopd\fP تنظیم شده، یا هنگام فراخوانی به پوسته به ارث رسیده است. .IP \(bu ماسک حالت ایجاد فایل (file creation mode mask) که توسط \fBumask\fP تنظیم شده یا از والد پوسته به ارث رسیده است. .IP \(bu تله‌های فعلی (traps) که توسط \fBtrap\fP تنظیم شده‌اند. .IP \(bu پارامترهای پوسته‌ای که از طریق انتساب متغیر یا با \fBset\fP تعیین شده‌اند یا از والد پوسته در محیط به ارث رسیده‌اند. .IP \(bu توابع پوسته‌ای که در حین اجرا تعریف شده‌اند یا از والد پوسته در محیط به ارث رسیده‌اند. .IP \(bu گزینه‌هایی که هنگام فراخوانی فعال شده‌اند (خواه به صورت پیش‌فرض یا با آرگومان‌های خط فرمان) یا توسط \fBset\fP فعال گشته‌اند. .IP \(bu گزینه‌هایی که توسط \fBshopt\fP فعال شده‌اند. .IP \(bu نام‌های مستعار پوسته که با \fBalias\fP تعریف شده‌اند. .IP \(bu شناسه‌های گوناگون فرآیند (process IDs)، از جمله شناسه‌های کارهای پس‌زمینه، مقدار \fB$$\fP، و مقدار .SM .BR PPID . .PP هنگامی که یک دستور ساده غیر از یک دستور توکار یا تابع پوسته قرار است اجرا شود، در یک محیط اجرای جداگانه فراخوانی می‌شود که شامل موارد زیر است. مگر در مواردی که ذکر شده باشد، مقادیر از پوسته به ارث برده می‌شوند. .IP \(bu فایل‌های باز پوسته، به همراه هرگونه تغییرات و اضافاتی که توسط تغییر مسیرها به دستور مشخص شده‌اند. .IP \(bu دایرکتوری کاری فعلی. .IP \(bu ماسک حالت ایجاد فایل (umask). .IP \(bu متغیرها و توابع پوسته که برای export علامت‌گذاری شده‌اند، به همراه متغیرهای صادر شده برای دستور، که در محیط ارسال می‌شوند. .IP \(bu تله‌های (traps) به دام افتاده توسط پوسته به مقادیر به ارث رسیده از والد پوسته بازنشانی می‌شوند، و تله‌های نادیده گرفته شده توسط پوسته نادیده گرفته می‌شوند. .PP دستوری که در این محیط جداگانه فراخوانی می‌شود نمی‌تواند بر محیط اجرای پوسته تأثیر بگذارد. .PP یک \fIsubshell\fP (زیرپوسته) کپی‌ای از فرآیند پوسته است. .PP جایگزینی دستور، دستورات گروه‌بندی شده با پرانتز، و دستورات ناهمگام (asynchronous) در یک محیط زیرپوسته فراخوانی می‌شوند که رونوشتی از محیط پوسته است، به جز اینکه تله‌های به دام افتاده توسط پوسته به مقادیری بازنشانی می‌شوند که پوسته هنگام فراخوانی از والد خود به ارث برده است. دستورات توکاری که به عنوان بخشی از یک خط لوله (pipeline) فراخوانی می‌شوند، به جز احتمالاً در آخرین عنصر بسته به مقدار گزینه پوسته \fBlastpipe\fP، آن‌ها نیز در یک محیط زیرپوسته اجرا می‌شوند. تغییرات ایجاد شده در محیط زیرپوسته نمی‌تواند بر محیط اجرای پوسته تأثیر بگذارد. .PP هنگامی که پوسته در حالت posix است، زیرپوسته‌های ایجاد شده برای اجرای جایگزینی دستور، مقدار گزینه \fB\-e\fP را از پوسته والد خود به ارث می‌برند. هنگامی که در حالت posix نیست، \fBbash\fP گزینه \fB\-e\fP را در چنین زیرپوسته‌هایی پاک می‌کند. برای نحوه کنترل این رفتار در زمانی که در حالت posix نیستید، توضیحات مربوط به گزینه پوسته \fBinherit_errexit\fP را در ادامه ببینید. .PP اگر دستوری با یک \fB&\fP دنبال شود و مدیریت کارها فعال نباشد، ورودی استاندارد پیش‌فرض برای دستور، فایل خالی .FN /dev/null خواهد بود. در غیر این صورت، دستور فراخوانی‌شده توصیف‌کننده‌های فایل پوسته فراخوان را به همان صورتی که توسط تغییر مسیرها اصلاح شده‌اند به ارث می‌برد. .SH "محیط (ENVIRONMENT)" هنگامی که برنامه‌ای فراخوانی می‌شود، آرایه‌ای از رشته‌ها به آن داده می‌شود که .IR environment (محیط) نامیده می‌شود. این لیستی از جفت‌های \fIname\fP\-\fIvalue\fP (نام-مقدار) به فرم .IR "name\fR=\fPvalue" است. .PP پوسته چندین راه برای دستکاری محیط ارائه می‌دهد. هنگام فراخوانی، پوسته محیط خود را بررسی کرده و برای هر نامِ یافت‌شده یک پارامتر ایجاد می‌کند، و به طور خودکار آن را برای .I export به فرآیندهای فرزند علامت‌گذاری می‌کند. دستورات اجرا شده محیط را به ارث می‌برند. دستورات .BR export ، .BR "declare \-x" ، و .B unset محیط را با افزودن و حذف پارامترها و توابع تغییر می‌دهند. اگر مقدار یک پارامتر در محیط تغییر یابد، مقدار جدید به طور خودکار جایگزین مقدار قدیمی شده و بخشی از محیط می‌شود. محیط به ارث رسیده توسط هر دستور اجرا شده شامل محیط اولیه پوسته است که مقادیر آن ممکن است در پوسته اصلاح شده باشد، منهای جفت‌های حذف شده توسط دستورات .B unset یا .BR "export \-n" ، به علاوه هرگونه موارد اضافه شده از طریق دستورات .B export و .BR "declare \-x" . .PP اگر هرگونه انتساب پارامتر، همان‌طور که در بالا در .SM .BR PARAMETERS توضیح داده شده است، قبل از یک .IR "simple command" ظاهر شود، این انتساب‌های متغیر تا زمانی که دستور اجرا می‌شود، بخشی از محیط آن دستور هستند. این عبارت‌های انتساب فقط بر محیطی که توسط آن دستور دیده می‌شود تأثیر می‌گذارند. اگر این انتساب‌ها مقدم بر فراخوانی یک تابع پوسته باشند، متغیرها برای آن تابع محلی بوده و به فرزندان آن تابع صادر (export) می‌شوند. .PP اگر گزینه .B \-k تنظیم شده باشد (دستور توکار .B set در زیر را ببینید)، آنگاه .I همه انتسابهای پارامتر در محیط برای یک دستور قرار میگیرند، نه فقط مواردی که قبل از نام دستور میآیند. .PP هنگامی که .B bash یک دستور خارجی را فراخوانی میکند، متغیر .B _ روی مسیر کامل دستور تنظیم شده و در محیط آن به آن دستور ارسال میشود. .SH "وضعیت خروج (EXIT STATUS)" وضعیت خروج یک دستور اجرا شده، مقداری است که توسط فراخوانی سیستمی \fIwaitpid\fP یا تابع معادل آن بازگردانده میشود. وضعیت‌های خروج بین 0 تا 255 قرار میگیرند، گرچه همانطور که در زیر توضیح داده شده است، پوسته ممکن است از مقادیر بالاتر از 125 به صورت ویژه‌ای استفاده کند. وضعیت‌های خروج از دستورات توکار پوسته و دستورات مرکب نیز به این محدوده محدود میشوند. تحت شرایط خاص، پوسته از مقادیر ویژه‌ای برای نشان دادن حالتهای شکست مشخص استفاده میکند. .PP برای اهداف پوسته، دستوری که با وضعیت خروج صفر خارج میشود موفق شده است. بنابراین در حالی که وضعیت خروج صفر نشاندهنده موفقیت است، یک وضعیت خروج غیرصفر نشاندهنده شکست است. .PP هنگامی که یک دستور با یک سیگنال مرگبار \fIN\fP خاتمه مییابد، \fBbash\fP از مقدار \fIN\fP+128 به عنوان وضعیت خروج استفاده میکند. .PP اگر دستوری پیدا نشود، فرآیند فرزندی که برای اجرای آن ایجاد شده است وضعیت 127 را بازمیگرداند. اگر دستوری پیدا شود اما قابل اجرا نباشد، وضعیت بازگشتی 126 است. .PP اگر دستوری به دلیل خطایی در حین بسط یا تغییر مسیر شکست بخورد، وضعیت خروج بزرگتر از صفر است. .PP دستورات توکار پوسته در صورت موفقیت وضعیت 0 (\fItrue\fP) و در صورت بروز خطا در حین اجرا وضعیت غیرصفر (\fIfalse\fP) را بازمیگردانند. همه دستورات توکار برای نشان دادن استفاده نادرست، عموماً گزینه‌های نامعتبر یا آرگومان‌های مفقود، وضعیت خروج 2 را بازمیگردانند. .PP وضعیت خروج آخرین دستور در پارامتر ویژه $? در دسترس است. .PP خود \fBBash\fP وضعیت خروج آخرین دستور اجرا شده را بازمیگرداند، مگر اینکه یک خطای نحوی رخ دهد، که در این صورت با یک مقدار غیرصفر خارج میشود. همچنین دستور توکار \fBexit\fP را در زیر ببینید. .SH "سیگنالها (SIGNALS)" هنگامی که \fBbash\fP تعاملی است، در غیاب هرگونه تله (trap)، سیگنال .SM .B SIGTERM را نادیده میگیرد (تا \fBkill 0\fP یک پوسته تعاملی را از بین نبرد)، و سیگنال .SM .B SIGINT را گرفته و مدیریت میکند (تا دستور توکار \fBwait\fP قابل وقفه باشد). هنگامی که \fBbash\fP سیگنال .SM .BR SIGINT را دریافت میکند، از هر حلقه در حال اجرایی خارج میشود. در همه موارد، \fBbash\fP سیگنال .SM .BR SIGQUIT را نادیده میگیرد. اگر مدیریت کارها فعال باشد، .B bash سیگنالهای .SM .BR SIGTTIN ، .SM .BR SIGTTOU و .SM .BR SIGTSTP را نادیده میگیرد. .PP دستور توکار \fBtrap\fP مدیریت سیگنال پوسته را همانطور که در زیر توضیح داده شده است، تغییر میدهد. .PP دستورات غیرتوکاری که \fBbash\fP اجرا میکند، گرداننده‌های سیگنالی تنظیم‌شده با مقادیر به ارث رسیده توسط پوسته از والد خود دارند، مگر اینکه \fBtrap\fP آنها را طوری تنظیم کند که نادیده گرفته شوند، که در این صورت فرآیند فرزند نیز آنها را نادیده خواهد گرفت. هنگامی که مدیریت کارها فعال نیست، دستورات ناهمگام علاوه بر این گرداننده‌های به ارث رسیده، سیگنالهای .SM .B SIGINT و .SM .B SIGQUIT را نادیده میگیرند. دستوراتی که در نتیجه جایگزینی دستور اجرا میشوند، سیگنالهای مدیریت کار تولید شده از صفحه‌کلید یعنی .SM .BR SIGTTIN ، .SM .BR SIGTTOU و .SM .BR SIGTSTP را نادیده میگیرند. .PP پوسته به طور پیش‌فرض پس از دریافت یک .SM .B SIGHUP خارج می‌شود. پیش از خروج، یک پوسته تعاملی .SM .B SIGHUP را دوباره به تمام کارها، در حال اجرا یا متوقف‌شده، ارسال می‌کند. پوسته .SM .B SIGCONT را به کارهای متوقف‌شده ارسال می‌کند تا اطمینان حاصل کند که آن‌ها .SM .B SIGHUP را دریافت می‌کنند (برای اطلاعات بیشتر درباره کارهای در حال اجرا و متوقف‌شده، بخش .SM .B "مدیریت کارها (JOB CONTROL)" در زیر را ببینید). برای جلوگیری از ارسال سیگنال توسط پوسته به یک کار خاص، آن را با دستور توکار .B disown از جدول کارها حذف کنید (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر را ببینید) یا با استفاده از .BR "disown \-h" آن را علامت‌گذاری کنید تا .SM .B SIGHUP را دریافت نکند. .PP اگر گزینه پوسته .B huponexit با استفاده از .B shopt تنظیم شده باشد، .B bash هنگامی که یک پوسته ورودی تعاملی خارج می‌شود، یک .SM .B SIGHUP به تمام کارها ارسال می‌کند. .PP اگر \fBbash\fP منتظر اتمام یک دستور باشد و سیگنالی دریافت کند که برای آن یک تله (trap) تنظیم شده است، تا زمان اتمام دستور، آن تله را اجرا نخواهد کرد. اگر \fBbash\fP از طریق دستور توکار \fBwait\fP منتظر یک دستور ناهمگام باشد، و سیگنالی دریافت کند که برای آن تله‌ای تنظیم شده است، دستور توکار \fBwait\fP بلافاصله با وضعیت خروج بزرگتر از ۱۲۸ بازمی‌گردد، و بلافاصله پس از آن پوسته تله را اجرا می‌کند. .PP هنگامی که مدیریت کارها فعال نیست، و \fBbash\fP منتظر اتمام یک دستور پیش‌زمینه است، پوسته سیگنال‌های تولیدشده توسط صفحه‌کلید را مانند .SM .B SIGINT (معمولاً تولیدشده با \fB\*^C\fP) که کاربران معمولاً قصد ارسال آن به آن دستور را دارند، دریافت می‌کند. این اتفاق به این دلیل می‌افتد که پوسته و دستور در گروه فرایندی یکسانی با ترمینال قرار دارند، و \fB\*^C\fP سیگنال .SM .B SIGINT را به تمام فرایندهای موجود در آن گروه فرایندی ارسال می‌کند. از آنجا که \fBbash\fP وقتی پوسته غیرتعاملی است مدیریت کارها را به طور پیش‌فرض فعال نمی‌کند، این سناریو در پوسته‌های غیرتعاملی بسیار متداول است. .PP هنگامی که مدیریت کارها فعال است، و \fBbash\fP منتظر اتمام یک دستور پیش‌زمینه است، پوسته سیگنال‌های تولیدشده توسط صفحه‌کلید را دریافت نمی‌کند، زیرا در همان گروه فرایندیِ ترمینال قرار ندارد. این سناریو در پوسته‌های تعاملی، که در آن‌ها \fBbash\fP تلاش می‌کند به طور پیش‌فرض مدیریت کارها را فعال کند، از همه متداول‌تر است. برای اطلاعات بیشتر در مورد گروه‌های فرایندی، بخش .SM .B "مدیریت کارها (JOB CONTROL)" در زیر را ببینید. .PP هنگامی که مدیریت کارها فعال نیست، و \fBbash\fP در حین انتظار برای یک دستور پیش‌زمینه .SM .B SIGINT دریافت می‌کند، تا زمان خاتمه یافتن آن دستور پیش‌زمینه صبر کرده و سپس درباره نحوه برخورد با .SM .B SIGINT تصمیم می‌گیرد: .IP 1. اگر دستور به دلیل .SM .B SIGINT خاتمه یابد، \fBbash\fP نتیجه می‌گیرد که کاربر قصد داشته .SM .B SIGINT را به پوسته نیز ارسال کند، و بر اساس .SM .B SIGINT عمل می‌کند (برای مثال، با اجرای یک تله .SM .BR SIGINT ، خروج از یک پوسته غیرتعاملی، یا بازگشت به بالاترین سطح برای خواندن یک دستور جدید). .IP 2. اگر دستور به دلیل .SM .B SIGINT خاتمه نیابد، برنامه خودش .SM .B SIGINT را مدیریت کرده و با آن به عنوان یک سیگنال مرگبار رفتار نکرده است. در این حالت، \fBbash\fP نیز با .SM .B SIGINT به عنوان یک سیگنال مرگبار رفتار نمی‌کند، بلکه در عوض فرض می‌کند که .SM .B SIGINT به عنوان بخشی از عملکرد عادی برنامه استفاده شده است (به عنوان مثال، emacs از آن برای لغو دستورات ویرایشی استفاده می‌کند) یا عمداً نادیده گرفته شده است. با این حال، به منظور سازگاری، \fBbash\fP هر تله تنظیم‌شده روی .SM .B SIGINT را اجرا خواهد کرد، همان‌طور که با هر سیگنال دارای تله دیگری که در حین انتظار برای اتمام دستور پیش‌زمینه دریافت می‌کند، چنین می‌کند. .PP هنگامی که مدیریت کارها فعال است، \fBbash\fP سیگنالهای تولیدشده توسط صفحه‌کلید مانند .SM .B SIGINT را در حین انتظار برای یک دستور پیش‌زمینه دریافت نمی‌کند. یک پوسته تعاملی به .SM .BR SIGINT توجهی نمی‌کند، حتی اگر دستور پیش‌زمینه در نتیجه آن خاتمه یابد، مگر برای ثبت وضعیت خروج آن. اگر پوسته تعاملی نباشد، و دستور پیش‌زمینه به دلیل .SM .BR SIGINT خاتمه یابد، \fBbash\fP وانمود می‌کند که خود .SM .B SIGINT را دریافت کرده است (سناریوی ۱ در بالا)، تا سازگاری حفظ شود. .SH "مدیریت کارها (JOB CONTROL)" .I مدیریت کارها به توانایی متوقف کردن انتخابی (\fIsuspend\fP) اجرای فرایندها و ادامه دادن (\fIresume\fP) اجرای آنها در زمانی دیگر اشاره دارد. یک کاربر معمولاً از این امکان از طریق یک رابط تعاملی که به طور مشترک توسط درایور ترمینال هسته سیستم‌عامل و .BR bash فراهم می‌شود، استفاده می‌کند. .PP پوسته یک .I کار (job) را به هر خط‌لوله مرتبط می‌کند. پوسته جدولی از کارهای در حال اجرای فعلی نگهداری می‌کند که با دستور .B jobs نمایش داده می‌شود. هر کار یک \fIشماره کار\fP دارد که \fBjobs\fP آن را داخل کروشه نمایش می‌دهد. شماره کارها از ۱ شروع می‌شوند. هنگامی که .B bash کاری را به صورت ناهمگام (در .IR پس‌زمینه ) شروع می‌کند، خطی به این شکل چاپ می‌کند: .RS .PP [1] 25647 .RE .PP که نشان می‌دهد این کار شماره ۱ است و شناسه فرایند (PID) آخرین فرایند در خط‌لوله مرتبط با این کار ۲۵۶۴۷ است. تمام فرایندهای یک خط‌لوله یکسان، عضو یک کار مشابه هستند. .B Bash از انتزاع .I کار به عنوان مبنایی برای مدیریت کارها استفاده می‌کند. .PP برای تسهیل پیاده‌سازی رابط کاربری مدیریت کارها، هر فرایند دارای یک \fIشناسه گروه فرایند\fP است، و سیستم‌عامل مفهومی به نام \fIشناسه گروه فرایند ترمینال فعلی\fP را حفظ می‌کند. این شناسه گروه فرایند ترمینال با \fIترمینال کنترل‌کننده\fP مرتبط است. .PP فرایندهایی که شناسه گروه فرایند یکسانی دارند، عضو یک \fIگروه فرایند\fP در نظر گرفته می‌شوند. اعضای گروه فرایند \fIپیش‌زمینه\fP (فرایندهایی که شناسه گروه فرایند آنها برابر با شناسه گروه فرایند ترمینال فعلی است) سیگنالهای تولیدشده توسط صفحه‌کلید مانند .SM .BR SIGINT را دریافت می‌کنند. فرایندهای موجود در گروه فرایند پیش‌زمینه، فرایندهای .I پیش‌زمینه نامیده می‌شوند. فرایندهای .I پس‌زمینه فرایندهایی هستند که شناسه گروه فرایند آنها با ترمینال کنترل‌کننده متفاوت است؛ چنین فرایندهایی در برابر سیگنالهای تولیدشده توسط صفحه‌کلید مصون هستند. تنها به فرایندهای پیش‌زمینه اجازه خواندن داده می‌شود یا، اگر کاربر با .Q "stty tostop" چنین مشخص کند، نوشتن در ترمینال کنترل‌کننده مجاز خواهد بود. سیستم یک سیگنال .SM .B "SIGTTIN (SIGTTOU)" به فرایندهای پس‌زمینه‌ای که تلاش برای خواندن از ترمینال (یا نوشتن در آن، هنگامی که .Q tostop فعال است) دارند ارسال می‌کند، که مگر در صورت به دام انداختن، فرایند را معلق می‌کند. .PP اگر سیستم‌عاملی که .B bash روی آن در حال اجراست از مدیریت کارها پشتیبانی کند، .B bash امکاناتی برای استفاده از آن در بر دارد. وارد کردن نویسهٔ .I تعلیق (suspend) (معمولاً .BR \*^Z ، Control-Z) در زمان اجرای یک فرایند، آن فرایند را متوقف کرده و کنترل را به .B bash بازمی‌گرداند. وارد کردن نویسهٔ .I "تعلیق با تأخیر (delayed suspend)" (معمولاً .BR \*^Y ، Control-Y) باعث می‌شود فرایند هنگامی که تلاش می‌کند ورودی را از ترمینال بخواند متوقف شود، و کنترل را به .B bash بازمی‌گرداند. سپس کاربر می‌تواند با استفاده از دستور .B bg برای ادامهٔ آن در پس‌زمینه، دستور .B fg برای ادامهٔ آن در پیش‌زمینه، یا دستور .B kill برای خاتمه دادن به آن، وضعیت این کار را مدیریت کند. نویسهٔ تعلیق بلافاصله اثر می‌کند، و اثر جانبی دیگری نیز دارد که عبارت است از دور ریختن هرگونه خروجی در انتظار و نویسه‌های پیش‌تایپ‌شده (typeahead). برای وادار کردن یک فرایند پس‌زمینه به توقف، یا توقف فرایندی که به نشست ترمینال فعلی مرتبط نیست، سیگنال .SM .B SIGSTOP را با استفاده از \fBkill\fP برای آن ارسال کنید. .PP راه‌های متعددی برای ارجاع به یک کار در پوسته وجود دارد. نویسهٔ .B % یک مشخصهٔ کار (jobspec) را معرفی می‌کند. .PP کار شمارهٔ .I n ممکن است به‌صورت .B %n ارجاع داده شود. همچنین ممکن است به یک کار با استفاده از پیشوند نامی که برای شروع آن استفاده شده، یا با استفاده از زیررشته‌ای که در خط فرمان آن ظاهر می‌شود، ارجاع داد. برای نمونه، .B %ce به کاری ارجاع دارد که نام دستور آن با .B ce آغاز می‌شود. از سوی دیگر، استفاده از .BR %?ce ، به هر کاری که شامل رشتهٔ .B ce در خط فرمان خود باشد ارجاع دارد. اگر پیشوند یا زیررشته با بیش از یک کار مطابقت داشته باشد، .B bash یک خطا گزارش می‌کند. .PP نمادهای .B %% و .B %+ به برداشت پوسته از .I "کار فعلی (current job)" اشاره دارند. یک % تکی (بدون هیچ مشخصهٔ کار همراه آن) نیز به کار فعلی ارجاع دارد. .B %\- به .I "کار پیشین (previous job)" اشاره دارد. هنگامی که کاری در پس‌زمینه شروع می‌شود، کاری در حین اجرا در پیش‌زمینه متوقف می‌شود، یا کاری در پس‌زمینه از سر گرفته می‌شود، آن کار به کار فعلی تبدیل می‌شود. کاری که کار فعلی بود، به کار پیشین تبدیل می‌شود. هنگامی که کار فعلی خاتمه می‌یابد، کار پیشین به کار فعلی تبدیل می‌شود. اگر تنها یک کار وجود داشته باشد، از هر دوی \fB%+\fP و \fB%\-\fP می‌توان برای ارجاع به آن کار استفاده کرد. در خروجی‌های مربوط به کارها (مانند خروجی دستور .BR jobs )، کار فعلی همیشه با یک .BR + ، و کار پیشین با یک .B \- علامت‌گذاری می‌شود. .PP صرفاً نام بردن از یک کار می‌تواند برای آوردن آن به پیش‌زمینه استفاده شود: .B %1 مترادفی برای .Q "fg %1" است، که کار ۱ را از پس‌زمینه به پیش‌زمینه می‌آورد. به همین ترتیب، .Q "%1 &" کار ۱ را در پس‌زمینه از سر می‌گیرد، که معادل است با .QR "bg %1" . .PP پوسته هر زمان که وضعیّت کاری تغییر کند، بلافاصله از آن آگاه می‌شود. به‌طور معمول، .B bash پیش از آگاه کردن کاربر از تغییرات وضعیّت یک کار، صبر می‌کند تا درست در آستانهٔ چاپ یک خط اعلان قرار گیرد تا مانع از اختلال در هرگونه خروجی دیگر شود، هرچند که تغییرات وضعیّت یک کار را پس از تکمیل شدن یک دستور پیش‌زمینه در یک فهرست، پیش از اجرای دستور بعدی در فهرست، اعلام خواهد کرد. اگر گزینهٔ .B \-b در دستور توکار .B set فعال باشد، .B bash تغییرات وضعیّت را بلافاصله گزارش می‌کند. \fBBash\fP هر تلهٔ (trap) تعیین‌شده روی .SM .B SIGCHLD را به ازای هر فرآیند فرزندی که خاتمه می‌یابد اجرا می‌کند. .PP هنگامی که یک کار خاتمه می‌یابد و \fBbash\fP کاربر را از آن مطلع می‌سازد، \fBbash\fP آن کار را از جدول کارها حذف می‌کند. آن کار دیگر در خروجی \fBjobs\fP ظاهر نخواهد شد، اما \fBwait\fP تا زمانی که شناسهٔ فرآیند (PID) مرتبط با کار به‌عنوان شناسه به آن داده شود، وضعیّت خروج آن را گزارش خواهد داد. هنگامی که جدول خالی شود، شماره‌گذاری کارها مجدداً از ۱ آغاز می‌شود. .PP اگر کاربری تلاش کند از .B bash خارج شود در حالی که کارهایی متوقف شده‌اند (یا اگر گزینهٔ پوستهٔ \fBcheckjobs\fP با استفاده از دستور توکار \fBshopt\fP فعال شده باشد، در حال اجرا باشند)، پوسته یک پیام هشدار چاپ می‌کند، و در صورتی که گزینهٔ \fBcheckjobs\fP فعال باشد، فهرست کارها و وضعیّت‌هایشان را نمایش می‌دهد. سپس می‌توان از دستور .B jobs برای بررسی وضعیّت آن‌ها استفاده کرد. اگر کاربر بلافاصله و بدون وارد کردن دستوری در این میان دوباره تلاش کند خارج شود، \fBbash\fP هشدار دیگری چاپ نمی‌کند، و هر کار متوقف‌شده‌ای را خاتمه می‌دهد. .PP هنگامی که پوسته با استفاده از دستور توکار \fBwait\fP منتظر یک کار یا فرآیند است و مدیریت کارها فعال باشد، \fBwait\fP با تغییر وضعیّت کار بازمی‌گردد. گزینهٔ \fB\-f\fP باعث می‌شود که \fBwait\fP پیش از بازگشت، تا زمان خاتمه یافتن کار یا فرآیند منتظر بماند. .SH "خط اعلان (PROMPTING)" هنگام اجرای تعاملی، .B bash هنگامی که آمادهٔ خواندن یک دستور است، خط اعلان اصلی .SM .B PS1 و هنگامی که برای تکمیل یک دستور به ورودی بیشتری نیاز دارد، خط اعلان ثانویهٔ .SM .B PS2 را نمایش می‌دهد. .PP .B Bash درست پیش از چاپ هر خط اعلان اصلی، مقدار متغیر آرایه‌ای \fBPROMPT_COMMAND\fP را بررسی می‌کند. اگر هر عنصری در \fBPROMPT_COMMAND\fP تنظیم شده و غیرتهی باشد، Bash هر مقدار را به ترتیب عددی اجرا می‌کند، دقیقاً مانند اینکه در خط فرمان تایپ شده باشد. .B Bash متغیر .SM .B PS0 را پس از خواندن یک دستور اما پیش از اجرای آن نمایش می‌دهد. .PP .B Bash متغیر .SM .B PS4 را همان‌طور که در بالا شرح داده شد، پیش از ردگیری هر دستور در زمانی که گزینهٔ \fB\-x\fP فعال است، نمایش می‌دهد. .PP .B Bash اجازه می‌دهد تا رشته‌های خط اعلان \fBPS0\fP، \fBPS1\fP, \fBPS2\fP، و \fBPS4\fP، با درج تعدادی از نویسه‌های ویژه که با بک‌اسلش گریز داده شده‌اند، سفارشی‌سازی شوند؛ این نویسه‌ها به شرح زیر رمزگشایی می‌شوند: .RS .TP .B \ea یک نویسهٔ زنگ اسکی (ASCII bell character) (07). .PD 0 .TP .B \ed تاریخ در قالب .Q "Weekday Month Date" (به عنوان مثال، .Q "Tue May 26" ). .TP .B \eD{\fIformat\fP} مقدار \fIformat\fP به .IR strftime (3) پاس داده می‌شود و نتیجه در رشته خط اعلان درج می‌گردد؛ یک \fIformat\fP خالی منجر به نمایش زمان بر اساس محلی‌سازی جاری (locale) می‌شود. کروشه‌ها الزامی هستند. .TP .B \ee یک نویسه گریز ASCII (کد 033). .TP .B \eh نام میزبان تا اولین .Q . . .TP .B \eH نام میزبان. .TP .B \ej تعداد کارهایی که در حال حاضر توسط پوسته مدیریت می‌شوند. .TP .B \el نام پایه (basename) نام دستگاه ترمینال پوسته (به عنوان مثال، .Q ttys0 ). .TP .B \en یک خط جدید (newline). .TP .B \er یک بازگشت به ابتدای سطر (carriage return). .TP .B \es نام پوسته: نام پایه (basename) .B $0 (بخشی که پس از آخرین ممیز قرار دارد). .TP .B \et زمان فعلی در قالب ۲۴ ساعته HH:MM:SS. .TP .B \eT زمان فعلی در قالب ۱۲ ساعته HH:MM:SS. .TP .B \e@ زمان فعلی در قالب ۱۲ ساعته am/pm. .TP .B \eA زمان فعلی در قالب ۲۴ ساعته HH:MM. .TP .B \eu نام کاربری کاربر فعلی. .TP .B \ev نسخه \fBbash\fP (به عنوان مثال، 2.00). .TP .B \eV انتشار \fBbash\fP، نسخه + سطح وصله (patch level) (به عنوان مثال، 2.00.0). .TP .B \ew مقدار متغیر پوسته \fBPWD\fP (\fB$PWD\fP)، که در آن .SM .B $HOME با یک مدک (tilde) خلاصه شده است (از مقدار متغیر .SM .B PROMPT_DIRTRIM استفاده می‌کند). .TP .B \eW نام پایه (basename) مربوط به \fB$PWD\fP، که در آن .SM .B $HOME با یک مدک خلاصه شده است. .TP .B \e! شماره تاریخچه این دستور. .TP .B \e# شماره دستور این دستور. .TP .B \e$ اگر شناسه کاربری مؤثر (UID) برابر 0 باشد، یک .BR # ، در غیر این صورت یک .BR $ . .TP .B \e\fInnn\fP نویسه متناظر با عدد در مبنای هشت \fInnn\fP. .TP .B \e\e یک بک‌اسلش (ممیز وارونه). .TP .B \e[ آغاز یک دنباله از نویسه‌های غیرقابل‌چاپ، که می‌تواند برای گنجاندن یک دنباله کنترلی ترمینال در خط اعلان استفاده شود. .TP .B \e] پایان یک دنباله از نویسه‌های غیرقابل‌چاپ. .PD .RE .PP شماره دستور و شماره تاریخچه معمولاً متفاوت هستند: شماره تاریخچه یک دستور، موقعیت آن در فهرست تاریخچه است که ممکن است شامل دستورهای بازیابی‌شده از فایل تاریخچه باشد (به بخش .SM .B "تاریخچه (HISTORY)" در زیر مراجعه کنید)، در حالی که شماره دستور، موقعیت در دنباله دستورهای اجراشده در طول نشست جاری پوسته است. پس از رمزگشایی رشته، مشروط به مقدار گزینه پوسته‌ای .B promptvars این رشته از طریق بسط پارامتر، جایگزینی دستور، بسط حسابی و حذف نقل‌قول بسط داده می‌شود (توضیحات دستور .B shopt را ذیل .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر ببینید). اگر بخش‌های گریز داده‌شده رشته در جایگزینی دستور ظاهر شوند یا شامل نویسه‌های خاص برای بسط کلمه باشند، این امر می‌تواند عوارض جانبی ناخواسته‌ای داشته باشد. .SH "خط خوان (READLINE)" این کتابخانه‌ای است که خواندن ورودی را هنگام استفاده از یک پوسته تعاملی مدیریت می‌کند، مگر اینکه گزینه .B \-\-noediting در هنگام فراخوانی پوسته مشخص شده باشد. ویرایش خط همچنین هنگام استفاده از گزینه \fB\-e\fP در دستور توکار \fBread\fP به کار می‌رود. به‌طور پیش‌فرض، دستورات ویرایش خط شبیه به دستورات emacs هستند؛ یک رابط ویرایش خط به سبک vi نیز در دسترس است. ویرایش خط را می‌توان در هر زمان با استفاده از گزینه‌های .B \-o emacs یا .B \-o vi در دستور توکار .B set فعال کرد (به بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر مراجعه کنید). برای خاموش کردن ویرایش خط پس از اجرای پوسته، از گزینه‌های .B +o emacs یا .B +o vi در دستور توکار .B set استفاده کنید. .SS "علامت‌گذاری خط‌خوان (Readline Notation)" این بخش از مفاهیم ویرایشی به سبک Emacs و علائم نگارشی آن برای کلیدها استفاده می‌کند. کلیدهای Control با C\-\fIkey\fP مشخص می‌شوند، برای نمونه C\-n به معنی Control\-N است. به همین ترتیب، کلیدهای .I meta با M\-\fIkey\fP مشخص می‌شوند، بنابراین M\-x به معنی Meta\-X است. کلید Meta اغلب با عنوان .Q Alt یا .Q Option برچسب‌گذاری شده است. .PP روی صفحه‌کلیدهای بدون کلید .IR Meta ، عبارت M\-\fIx\fP به معنای ESC \fIx\fP است، یعنی کلید Escape را فشرده و رها کنید، سپس کلید .I x را به صورت متوالی فشرده و رها نمایید. این کار کلید ESC را به \fImeta prefix\fP (پیشوند متا) تبدیل می‌کند. ترکیب M\-C\-\fIx\fP به معنای ESC Control\-\fIx\fP است: کلید Escape را فشرده و رها کنید، سپس کلید Control را نگه داشته و کلید .I x را فشار دهید، و آن‌گاه هر دو را رها کنید. .PP در برخی صفحه‌کلیدها، کلید تبدیل‌کننده Meta نویسه‌هایی تولید می‌کند که بیت هشتم (0200) آن‌ها تنظیم شده است. در صورتی که صفحه‌کلید این اجازه را بدهد، می‌توانید از متغیر \fBenable\-meta\-key\fP برای کنترل اینکه این عمل انجام شود یا خیر استفاده کنید. در بسیاری موارد دیگر، ترمینال یا شبیه‌ساز ترمینال، کلید متا را همان‌طور که در پاراگراف قبلی توضیح داده شد، به یک دنباله کلیدی تبدیل می‌کند که با ESC شروع می‌شود. .PP اگر کلید \fIMeta\fP شما دنباله‌ای از کلیدها را به همراه پیشوند متای ESC تولید می‌کند، می‌توانید با تنظیم متغیر \fBforce\-meta\-prefix\fP کاری کنید که مقیدسازی‌های کلیدی M\-\fIkey\fP که مشخص می‌کنید (بخش .B "مقیدسازی‌های کلید خط خوان (Readline Key Bindings)" در زیر را ببینید) همین رفتار را انجام دهند. .PP به دستورات .B Readline می‌توان .IR "آرگومان‌های عددی" داد که معمولاً به عنوان تعداد تکرار عمل می‌کنند. با این حال، گاهی اوقات علامت آرگومان است که اهمیت دارد. دادن یک آرگومان منفی به دستوری که در جهت جلو عمل می‌کند (مانند \fBkill\-line\fP) باعث می‌شود آن دستور در جهت عقب عمل کند. دستوراتی که رفتارشان با آرگومان‌ها از این قاعده انحراف دارد، در زیر ذکر شده‌اند. .PP مفهوم \fIpoint\fP به موقعیت فعلی مکان‌نما اشاره دارد و \fImark\fP به یک موقعیت ذخیره‌شده از مکان‌نما اشاره می‌کند. به متن بین point و mark اصطلاحاً \fIregion\fP (ناحیه) گفته می‌شود. \fBReadline\fP دارای مفهوم \fIactive region\fP (ناحیه فعال) است: هنگامی که ناحیه فعال باشد، بازنمایش \fBreadline\fP این ناحیه را با استفاده از مقدار متغیر \fBactive-region-start-color\fP برجسته می‌کند. متغیر \fBenable\-active\-region\fP این قابلیت را روشن و خاموش می‌کند. چندین دستور ناحیه را به حالت فعال تنظیم می‌کنند؛ این دستورات در زیر مشخص شده‌اند. .PP هنگامی که دستوری به عنوان \fIkilling\fP (حذف/کشتن) متن توصیف می‌شود، متن حذف‌شده برای بازیابی احتمالی در آینده ذخیره می‌شود (\fIyanking\fP یا چسباندن مجدد). متن حذف‌شده در یک \fIkill ring\fP (حلقه حذف) ذخیره می‌شود. حذف‌های متوالی، متن‌های حذف‌شده را در یک واحد انباشته می‌کنند که می‌توان همه آن‌ها را یکجا بازگرداند (yank کرد). دستوراتی که متن را حذف نمی‌کنند، تکه‌های متن را در حلقه حذف از یکدیگر جدا می‌سازند. .SS "راه‌اندازی اولیه خط خوان (Readline Initialization)" .B Readline با قرار دادن دستورات در یک فایل پیکربندی و راه‌اندازی اولیه (فایل \fIinputrc\fP) سفارشی‌سازی می‌شود. نام این فایل از مقدار متغیر پوسته .SM .B \%INPUTRC گرفته می‌شود. اگر این متغیر تنظیم نشده باشد، مقدار پیش‌فرض .FN \*~/.inputrc است. اگر آن فایل وجود نداشته باشد یا خوانده نشود، \fBreadline\fP به دنبال .FN /etc/inputrc می‌گردد. هنگامی که برنامه‌ای که از کتابخانه \fBreadline\fP استفاده می‌کند شروع به کار نماید، \fBreadline\fP فایل راه‌اندازی را می‌خواند و پیش از خواندن هرگونه ورودی کاربر، مقیدسازی‌های کلید و متغیرهای یافت‌شده در آن را تنظیم می‌کند. .PP تنها چند ساختار پایه‌ای در فایل inputrc مجاز است. خطوط خالی نادیده گرفته می‌شوند. خطوطی که با \fB#\fP آغاز می‌شوند، توضیح (comment) هستند. خطوطی که با \fB$\fP آغاز می‌شوند نشان‌دهنده ساختارهای شرطی هستند. سایر خطوط نشان‌دهنده مقیدسازی‌های کلید و تنظیمات متغیرها هستند. .PP مقیدسازی‌های پیش‌فرض کلیدها در این بخش را می‌توان با استفاده از دستورات مقیدسازی کلید در فایل .I inputrc تغییر داد. برنامه‌هایی که از کتابخانه \fBreadline\fP استفاده می‌کنند، از جمله \fBbash\fP، می‌توانند دستورات و مقیدسازی‌های ویژه خود را اضافه نمایند. .PP به عنوان مثال، قرار دادن .RS .PP M\-Control\-u: universal\-argument .RE یا .RS C\-Meta\-u: universal\-argument .RE .LP در فایل .I inputrc باعث می‌شود کلید M\-C\-u دستور \fBreadline\fP به نام .IR universal\-argument را اجرا کند. .PP مقیدسازی‌های کلید ممکن است شامل نام نمادین نویسه‌های زیر باشند: .IR DEL ، .IR ESC ، .IR ESCAPE ، .IR LFD ، .IR NEWLINE ، .IR RET ، .IR RETURN ، .I RUBOUT (یک پس‌بر مخرب یا destructive backspace)، .IR SPACE ، .IR SPC و .IR TAB . .PP علاوه بر نام‌های دستور، \fBreadline\fP اجازه می‌دهد کلیدها به یک رشته متصل شوند که هنگام فشرده شدن کلید درج می‌شود (یک \fImacro\fP). تفاوت بین یک ماکرو و یک دستور در این است که ماکرو در کوتیشن تکی یا دوتایی قرار می‌گیرد. .SS "اتصالات کلید ریدلاین (Readline Key Bindings)" نحو کنترل اتصالات کلید در فایل .I inputrc ساده است. تنها چیزی که لازم است، نام دستور یا متن یک ماکرو و یک توالی کلید است که باید به آن متصل شود. توالی کلید ممکن است به یکی از دو روش مشخص شود: به عنوان یک نام کلید نمادین، احتمالاً با پیشوندهای \fIMeta\-\fP یا \fIControl\-\fP، یا به عنوان یک توالی کلید متشکل از یک یا چند نویسه درون کوتیشن دوتایی. توالی کلید و نام با یک دونقطه از هم جدا می‌شوند. هیچ فاصله خالی نمی‌تواند بین نام و دونقطه وجود داشته باشد. .PP هنگام استفاده از قالب \fBkeyname\fP:\^\fIfunction\-name\fP یا \fImacro\fP، .I keyname نام یک کلید است که به انگلیسی نوشته شده است. برای مثال: .PP .RS .EX .nf Control-u: universal\-argument Meta-Rubout: backward\-kill\-word Control-o: \*"> output\*" .fi .EE .RE .LP در مثال بالا، .I C\-u به تابع .BR universal\-argument ، .I M\-DEL به تابع .BR backward\-kill\-word ، و .I C\-o برای اجرای ماکروی بیان‌شده در سمت راست متصل شده است (یعنی برای درج متن .Q "> output" در خط). .PP در قالب دوم، \fB\*"keyseq\*"\fP:\^\fIfunction\-name\fP یا \fImacro\fP، .B keyseq با .B keyname بالا تفاوت دارد، زیرا رشته‌هایی که کل یک توالی کلید را نشان می‌دهند می‌توانند با قرار دادن توالی درون کوتیشن دوتایی مشخص شوند. برخی از کاراکترهای گریز کلید به سبک GNU Emacs را می‌توان استفاده کرد، مانند مثال زیر، اما هیچ‌یک از نام‌های نمادین نویسه‌ها شناخته نمی‌شوند. .PP .RS .EX .nf \*"\eC\-u\*": universal\-argument \*"\eC\-x\eC\-r\*": re\-read\-init\-file \*"\ee[11\*~\*": \*"Function Key 1\*" .fi .EE .RE .PP در این مثال، .I C\-u دوباره به تابع .BR universal\-argument متصل شده است. .I "C\-x C\-r" به تابع .BR re\-read\-init\-file ، و .I "ESC [ 1 1 \*~" برای درج متن .Q "Function Key 1" متصل شده است. .PP مجموعه کامل توالی‌های گریز به سبک GNU Emacs که هنگام مشخص کردن توالی‌های کلید در دسترس هستند عبارتند از: .RS .PD 0 .TP .B \eC\- یک پیشوند کنترل (control). .TP .B \eM\- افزودن پیشوند متا یا تبدیل نویسه بعدی به یک نویسه متا، همان‌طور که در زیر ذیل \fBforce-meta-prefix\fP شرح داده شده است. .TP .B \ee نویسه گریز (escape character). .TP .B \e\e بک‌اسلش (Backslash). .TP .B \e\*" علامت نقل‌قول دوگانه به صورت صریح (\*"). .TP .B \e\*' علامت نقل‌قول تکی به صورت صریح (\*'). .RE .PD .PP علاوه بر توالی‌های گریز به سبک GNU Emacs، مجموعه دومی از توالی‌های گریز بک‌اسلش نیز در دسترس است: .RS .PD 0 .TP .B \ea هشدار (زنگ یا bell) .TP .B \eb پس‌بر (backspace) .TP .B \ed حذف (delete) .TP .B \ef برگه جدید (form feed) .TP .B \en خط جدید (newline) .TP .B \er بازگشت به ابتدای سطر (carriage return) .TP .B \et تب افقی (horizontal tab) .TP .B \ev تب عمودی (vertical tab) .TP .B \e\fInnn\fP نویسه هشت بیتی که مقدار آن مقدار اکتال (پایه هشت) \fInnn\fP است (یک تا سه رقم). .TP .B \ex\fIHH\fP نویسه هشت بیتی که مقدار آن مقدار هگزادسیمال (پایه شانزده) \fIHH\fP است (یک یا دو رقم هگز). .RE .PD .PP هنگام وارد کردن متن ماکرو، باید از نقل‌قول تکی یا دوگانه برای مشخص کردن تعریف ماکرو استفاده شود. متن فاقد نقل‌قول به عنوان نام تابع در نظر گرفته می‌شود. توالی‌های گریز بک‌اسلش توضیح‌داده‌شده در بالا در بدنه ماکرو بسط داده می‌شوند. بک‌اسلش هر نویسه دیگری را در متن ماکرو نقل‌قول (کو نقل‌قول/محافظت) می‌کند، از جمله \*" و \*'. .PP .B Bash کلیدهای مقیدشده فعلی \fBreadline\fP را با دستور توکار .B bind نمایش می‌دهد یا اصلاح می‌کند. گزینه‌های .B \-o emacs یا .B \-o vi برای دستور توکار .B set (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر را ببینید) حالت ویرایش را در طول استفاده تعاملی تغییر می‌دهند. .SS "متغیرهای Readline" \fBReadline\fP دارای متغیرهایی است که می‌توانند برای سفارشی‌سازی بیشتر رفتار آن استفاده شوند. یک متغیر ممکن است در فایل .I inputrc با عبارتی به شکل زیر تنظیم شود: .RS .PP \fBset\fP \fIvariable\-name\fP \fIvalue\fP .RE یا با استفاده از دستور توکار \fBbind\fP (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر را ببینید). .PP به‌جز مواردی که ذکر شده است، متغیرهای \fBreadline\fP می‌توانند مقادیر .B On یا .B Off را (بدون حساسیت به کوچک و بزرگی حروف) بپذیرند. نام‌های متغیر ناشناخته نادیده گرفته می‌شوند. هنگامی که \fBreadline\fP مقدار یک متغیر را می‌خواند، مقادیر خالی یا تهی (null)، .Q "on" (بدون حساسیت به کوچک و بزرگی حروف) و .Q 1 معادل \fBOn\fP هستند. تمام مقادیر دیگر معادل \fBOff\fP می‌باشند. .PP دستور \fBbind \-V\fP نام‌ها و مقادیر فعلی متغیرهای \fBreadline\fP را فهرست می‌کند (به بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر مراجعه کنید). .PP متغیرها و مقادیر پیش‌فرض آن‌ها عبارتند از: .PP .PD 0 .TP .B active\-region\-start\-color یک متغیر رشته‌ای که رنگ متن و پس‌زمینه را هنگام نمایش متن در ناحیه فعال (active region) کنترل می‌کند (به توضیحات \fBenable\-active\-region\fP در زیر مراجعه کنید). این رشته نباید هیچ موقعیت کاراکتر فیزیکی روی صفحه نمایش اشغال کند، بنابراین تنها باید از توالی‌های گریز (escape sequences) ترمینال تشکیل شده باشد. این رشته پیش از نمایش متن در ناحیه فعال به ترمینال فرستاده می‌شود. این متغیر هر زمان که نوع ترمینال تغییر کند به مقدار پیش‌فرض بازنشانی می‌شود. مقدار پیش‌فرض، رشته‌ای است که ترمینال را در حالت برجسته (standout) قرار می‌دهد، همان‌طور که از توصیف terminfo ترمینال دریافت می‌شود. یک مقدار نمونه می‌تواند .Q \ee[01;33m باشد. .TP .B active\-region\-end\-color یک متغیر رشته‌ای که اثرات \fBactive\-region\-start\-color\fP را .Q خنثی کرده و ظاهر نمایش .Q عادی ترمینال را پس از نمایش متن در ناحیه فعال بازیابی می‌کند. این رشته نباید هیچ موقعیت کاراکتر فیزیکی روی صفحه نمایش اشغال کند، بنابراین باید تنها از توالی‌های گریز ترمینال تشکیل شده باشد. این رشته پس از نمایش متن در ناحیه فعال به ترمینال فرستاده می‌شود. این متغیر هر زمان که نوع ترمینال تغییر کند به مقدار پیش‌فرض بازنشانی می‌شود. مقدار پیش‌فرض، رشته‌ای است که ترمینال را از حالت برجسته خارج می‌کند، همان‌طور که از توصیف terminfo ترمینال دریافت می‌شود. یک مقدار نمونه می‌تواند .Q \ee[0m باشد. .TP .B bell\-style (audible) کنترل می‌کند هنگامی که \fBreadline\fP می‌خواهد زنگ ترمینال را به صدا درآورد چه اتفاقی بیفتد. اگر روی \fBnone\fP تنظیم شود، \fBreadline\fP هرگز زنگ را به صدا درنمی‌آورد. اگر روی \fBvisible\fP تنظیم شود، \fBreadline\fP در صورت وجود، از یک زنگ بصری استفاده می‌کند. اگر روی \fBaudible\fP تنظیم شود، \fBreadline\fP تلاش می‌کند زنگ ترمینال را به صدا درآورد. .TP .B bind\-tty\-special\-chars (On) اگر روی \fBOn\fP تنظیم شود، \fBreadline\fP تلاش می‌کند کاراکترهای کنترلی را که توسط راه‌انداز (درایور) ترمینال هسته به طور ویژه‌ای مدیریت می‌شوند، به معادل‌های آن‌ها در \fBreadline\fP متصل (bind) کند. این‌ها جایگزین اتصال‌های پیش‌فرض \fBreadline\fP می‌شوند که در اینجا توضیح داده شده‌اند. دستور .Q "stty \-a" را در اعلان \fBbash\fP تایپ کنید تا تنظیمات فعلی ترمینال خود را، شامل کاراکترهای کنترلی ویژه (معمولاً \fBcchars\fP)، مشاهده نمایید. .TP .B blink\-matching\-paren (Off) اگر روی \fBOn\fP تنظیم شود، \fBreadline\fP هنگام وارد شدن پرانتز بسته، تلاش می‌کند تا مکان‌نما را برای لحظه‌ای کوتاه به پرانتز باز متناظر منتقل کند. .TP .B colored\-completion\-prefix (Off) اگر روی \fBOn\fP تنظیم شود، هنگام فهرست کردن کامل‌سازی‌ها، \fBreadline\fP پیشوند مشترک مجموعه کامل‌سازی‌های ممکن را با استفاده از یک رنگ متفاوت نمایش می‌دهد. تعاریف رنگ از مقدار متغیر محیطی \fBLS_COLORS\fP گرفته می‌شود. اگر تعریفی از رنگ در \fB$LS_COLORS\fP برای پسوند سفارشی .Q .readline-colored-completion-prefix وجود داشته باشد، \fBreadline\fP به جای مقدار پیش‌فرض خود، از این رنگ برای پیشوند مشترک استفاده می‌کند. .TP .B colored\-stats (Off) اگر روی \fBOn\fP تنظیم شود، \fBreadline\fP کامل‌سازی‌های ممکن را با استفاده از رنگ‌های متفاوت برای مشخص کردن نوع فایل آن‌ها نمایش می‌دهد. تعاریف رنگ از مقدار متغیر محیطی \fBLS_COLORS\fP گرفته می‌شود. .\" Tucking multiple macro calls into a paragraph tag requires some .\" finesse. We require `\c`, and while the single-font macros don't .\" honor input trap continuation, the font alternation macros do. .TP .BR comment\-begin\ ( \c .Q \fB#\fP \fB)\fP رشته‌ای که دستور .B insert\-comment در \fBreadline\fP درج می‌کند. این دستور در حالت emacs به .B M\-# و در حالت دستور vi به .B # متصل شده است. .TP .B completion\-display\-width (\-1) تعداد ستون‌های صفحه نمایش که برای نمایش تطابق‌های احتمالی هنگام انجام تکمیل (completion) استفاده می‌شود. اگر این مقدار کمتر از 0 یا بزرگ‌تر از عرض صفحه ترمینال باشد، نادیده گرفته می‌شود. مقدار 0 باعث می‌شود که تطابق‌ها به‌صورت یک مورد در هر سطر نمایش داده شوند. مقدار پیش‌فرض \-1 است. .TP .B completion\-ignore\-case (Off) اگر روی \fBOn\fP تنظیم شود، \fBreadline\fP تطبیق نام فایل و تکمیل را بدون در نظر گرفتن بزرگی و کوچکی حروف (case\-insensitive) انجام می‌دهد. .TP .B completion\-map\-case (Off) اگر روی \fBOn\fP تنظیم شود، و \fBcompletion\-ignore\-case\fP فعال باشد، .B readline هنگام انجام تطبیق نام فایل و تکمیل بدون حساسیت به حروف، خط پیوند (\fI\-\fP) و زیرخط (\fI_\fP) را معادل یکدیگر در نظر می‌گیرد. .TP .B completion\-prefix\-display\-length (0) حداکثر طول (به نویسه/کاراکتر) از پیشوند مشترک یک فهرست از تکمیل‌های احتمالی که بدون تغییر نمایش داده می‌شود. هنگامی که روی مقداری بزرگ‌تر از صفر تنظیم شود، \fBreadline\fP پیشوندهای مشترک طولانی‌تر از این مقدار را هنگام نمایش تکمیل‌های احتمالی، با یک علامت تعلیق (...) جایگزین می‌کند. اگر یک تکمیل با نقطه آغاز شود، و \fBreadline\fP در حال تکمیل نام‌های فایل باشد، به جای علامت تعلیق از سه زیرخط (___) استفاده می‌کند. .TP .B completion\-query\-items (100) این متغیر تعیین می‌کند چه زمانی در مورد مشاهده تعداد تکمیل‌های احتمالی تولید شده توسط دستور \fBpossible\-completions\fP از کاربر سؤال پرسیده شود. می‌توان آن را روی هر مقدار عدد صحیح بزرگ‌تر یا مساوی با صفر تنظیم کرد. اگر تعداد تکمیل‌های احتمالی بزرگ‌تر یا مساوی با مقدار این متغیر باشد، \fBreadline\fP می‌پرسد که آیا کاربر مایل به مشاهده آن‌ها هست یا خیر؛ در غیر این صورت، \fBreadline\fP به‌سادگی آن‌ها را در ترمینال فهرست می‌کند. مقدار صفر به این معنی است که \fBreadline\fP هرگز نباید سؤال بپرسد؛ مقادیر منفی به عنوان صفر در نظر گرفته می‌شوند. .TP .B convert\-meta (On) اگر روی \fBOn\fP تنظیم شود، \fBreadline\fP نویسه‌های خوانده‌شده‌ای را که بیت هشتم آن‌ها تنظیم شده است، با پاک کردن بیت هشتم و پیشوند کردن آن با یک نویسه escape، به یک توالی کلید ASCII تبدیل می‌کند (نویسه را به داشتن پیشوند meta تبدیل می‌کند). مقدار پیش‌فرض \fIOn\fP است، اما اگر locale حاوی نویسه‌هایی باشد که رمزگذاری آن‌ها ممکن است شامل بایت‌هایی با بیت هشتم تنظیم‌شده باشد، \fBreadline\fP آن را روی \fIOff\fP قرار می‌دهد. این متغیر وابسته به دسته‌بندی محلی \fBLC_CTYPE\fP است، و ممکن است با تغییر locale تغییر کند. این متغیر همچنین بر پیوندهای کلیدها تأثیر می‌گذارد؛ توضیحات \fBforce\-meta\-prefix\fP را در زیر ببینید. .TP .B disable\-completion (Off) اگر روی \fBOn\fP تنظیم شود، \fBreadline\fP از تکمیل کلمات جلوگیری می‌کند. نویسه‌های تکمیل در خط درج می‌شوند، گویی به \fBself-insert\fP نگاشت شده‌اند. .TP .B echo\-control\-characters (On) هنگامی که روی \fBOn\fP تنظیم شود، در سیستم‌عامل‌هایی که پشتیبانی از آن را اعلام می‌کنند، \fBreadline\fP نویسه متناظر با سیگنال تولید شده از صفحه‌کلید را بازتاب (echo) می‌دهد. .TP .B editing\-mode (emacs) کنترل می‌کند که آیا \fBreadline\fP از مجموعه‌ای از پیوندهای کلید شبیه به \fIEmacs\fP استفاده می‌کند یا \fIvi\fP. .B editing\-mode می‌تواند روی .B emacs یا .BR vi تنظیم شود. .TP .B emacs\-mode\-string (@) اگر متغیر \fIshow\-mode\-in\-prompt\fP فعال باشد، این رشته بلافاصله پیش از آخرین خط از اعلان اصلی (primary prompt) در هنگام فعال بودن حالت ویرایش emacs نمایش داده می‌شود. این مقدار مانند یک پیوند کلید بسط داده می‌شود، بنابراین مجموعه استاندارد پیشوندهای meta\- و control\- و توالی‌های گریز backslash در دسترس است. توالی‌های گریز \e1 و \e2 توالی‌های نویسه‌های غیرقابل چاپ را آغاز و پایان می‌دهند، که می‌توان از آن‌ها برای تعبیه یک توالی کنترل ترمینال در رشته حالت استفاده کرد. .TP .B enable\-active\-region (On) هنگامی که این متغیر روی \fIOn\fP تنظیم شود، \fBreadline\fP به برخی دستورات اجازه می‌دهد ناحیه را به عنوان \fIفعال\fP (active) مشخص کنند. وقتی ناحیه فعال است، \fBreadline\fP متن موجود در آن ناحیه را با استفاده از مقدار متغیر .B active\-region\-start\-color برجسته (highlight) می‌کند، که پیش‌فرض آن رشته‌ای است که حالت standout ترمینال را فعال می‌سازد. ناحیه فعال، متن درج‌شده توسط bracketed-paste و هر متن مطابق یافت‌شده توسط جستجوهای افزایشی و غیر‌افزایشی تاریخچه را نشان می‌دهد. .TP .B enable\-bracketed\-paste (On) هنگامی که روی \fBOn\fP تنظیم شود، \fBreadline\fP ترمینال را طوری پیکربندی می‌کند که هر متن جای‌گذاری‌شده (paste) را به عنوان یک رشته واحد از نویسه‌ها در بافر ویرایش درج کند، به جای این‌که با هر نویسه طوری رفتار کند که گویی از صفحه‌کلید خوانده شده است. به این حالت، \fIbracketed\-paste mode\fP گفته می‌شود؛ این قابلیت از اجرای هرگونه دستور ویرایشی مقید شده به توالی‌های کلیدی که در متن جای‌گذاری‌شده ظاهر می‌شوند توسط \fBreadline\fP جلوگیری می‌کند. .TP .B enable\-keypad (Off) هنگامی که روی \fBOn\fP تنظیم شود، \fBreadline\fP هنگام فراخوانی تلاش می‌کند صفحه‌کلید عددی برنامه‌ای (application keypad) را فعال کند. برخی سیستم‌ها برای فعال‌سازی کلیدهای جهت‌نما به این گزینه نیاز دارند. .TP .B enable\-meta\-key (On) هنگامی که روی \fBOn\fP تنظیم شود، \fBreadline\fP تلاش می‌کند هر کلید تغییردهنده متا (meta) را که ترمینال مدعی پشتیبانی از آن است فعال کند. در بسیاری از ترمینال‌ها، کلید Meta برای ارسال نویسه‌های هشت‌بیتی استفاده می‌شود؛ این متغیر قابلیت ترمینال را بررسی می‌کند که آیا ترمینال می‌تواند حالتی را فعال و غیرفعال کند که در صورت نگه‌داشتن کلید Meta هنگام تایپ نویسه، بیت هشتم آن نویسه را روی یک تنظیم کند (0200) یا خیر (یک نویسه متا). .TP .B expand\-tilde (Off) اگر روی \fBOn\fP تنظیم شود، \fBreadline\fP هنگام تلاش برای کامل‌کردن کلمات، بسط تیلدا (tilde expansion) را انجام می‌دهد. .TP .B force\-meta\-prefix (Off) اگر روی \fBOn\fP تنظیم شود، \fBreadline\fP هنگام مقیدسازی توالی‌های کلیدی حاوی \eM- یا Meta- (به بخش \fBپیوندهای کلیدی (Key Bindings)\fP در بالا مراجعه کنید)، با تبدیل یک توالی کلیدی به فرم \eM\-\fIC\fP یا Meta\-\fIC\fP به توالی دو‌نویسه‌ای \fBESC\fP \fIC\fP (افزودن پیشوند متا)، رفتار خود را تغییر می‌دهد. اگر .B force\-meta\-prefix روی \fBOff\fP (پیش‌فرض) تنظیم شده باشد، \fBreadline\fP از مقدار متغیر .B convert\-meta برای تعیین اینکه آیا این تبدیل انجام شود یا خیر استفاده می‌کند: اگر \fBconvert\-meta\fP روی \fBOn\fP باشد، \fBreadline\fP تبدیل توصیف‌شده در بالا را انجام می‌دهد؛ اگر روی \fBOff\fP باشد، \fBreadline\fP نویسه \fIC\fP را با تنظیم کردن بیت هشتم (0200) به یک نویسه متا تبدیل می‌کند. .TP .B history\-preserve\-point (Off) اگر روی \fBOn\fP تنظیم شود، کد تاریخچه تلاش می‌کند در هر خط از تاریخچه که با \fBprevious-history\fP یا \fBnext-history\fP بازیابی می‌شود، نقطه مکان‌نما (point) را در همان مکان قبلی قرار دهد. .TP .B history\-size (unset) حداکثر تعداد مدخل‌های تاریخچه ذخیره‌شده در فهرست تاریخچه را تنظیم می‌کند. اگر روی صفر تنظیم شود، تمام مدخل‌های تاریخچه موجود حذف می‌شوند و هیچ مدخل جدیدی ذخیره نخواهد شد. اگر روی مقداری کمتر از صفر تنظیم شود، تعداد مدخل‌های تاریخچه محدود نخواهد بود. به‌طور پیش‌فرض، \fBbash\fP حداکثر تعداد مدخل‌های تاریخچه را روی مقدار متغیر پوسته \fBHISTSIZE\fP تنظیم می‌کند. تنظیم \fIhistory\-size\fP روی یک مقدار غیر‌عددی، حداکثر تعداد مدخل‌های تاریخچه را روی 500 قرار می‌دهد. .TP .B horizontal\-scroll\-mode (Off) تنظیم این متغیر روی \fBOn\fP باعث می‌شود \fBreadline\fP از یک خط واحد برای نمایش استفاده کند، و هنگامی که طول ورودی از عرض صفحه بیشتر می‌شود به جای شکستن خط به یک خط جدید، ورودی را به صورت افقی در یک خط صفحه پیمایش (اسکرول) کند. این تنظیم به‌طور خودکار برای ترمینال‌هایی با ارتفاع ۱ فعال می‌شود. .TP .B input\-meta (Off) اگر روی \fBOn\fP تنظیم شود، \fBreadline\fP ورودی هشت‌بیتی را فعال می‌کند (یعنی بیت هشتم را در نویسه‌هایی که می‌خواند پاک نمی‌کند)، بدون توجه به اینکه ترمینال ادعای پشتیبانی از چه چیزی را دارد. مقدار پیش‌فرض \fIOff\fP است، اما اگر لوکال (locale) شامل نویسه‌هایی باشد که کدگذاری آن‌ها ممکن است شامل بایت‌هایی با بیت هشتم فعال باشد، \fBreadline\fP آن را روی \fIOn\fP تنظیم می‌کند. این متغیر به دسته‌بندی محلی \fBLC_CTYPE\fP وابسته است و با تغییر لوکال، مقدار آن ممکن است تغییر کند. نام \fBmeta\-flag\fP مترادفی برای \fBinput\-meta\fP است. .TP .BR isearch\-terminators\ ( \c .Q \fBC\-[C\-j\fP \fB)\fP رشته‌ای از نویسه‌ها که باید بدون اجرای بعدی آن نویسه به عنوان یک دستور، به جستجوی افزایشی پایان دهند. اگر مقداری به این متغیر اختصاص داده نشده باشد، نویسه‌های \fIESC\fP و \fBC\-j\fP به یک جستجوی افزایشی پایان می‌دهند. .TP .B keymap (emacs) نقشه کلید (keymap) جاری \fBreadline\fP را تنظیم می‌کند. مجموعه نام‌های معتبر نقشه کلید عبارت است از \fIemacs, emacs\-standard, emacs\-meta, emacs\-ctlx, vi, vi\-command\fP، و .IR vi\-insert . \fIvi\fP معادل \fIvi\-command\fP است؛ \fIemacs\fP معادل \fIemacs\-standard\fP است. مقدار پیش‌فرض \fIemacs\fP است؛ مقدار .B editing\-mode نیز بر نقشه کلید پیش‌فرض تأثیر می‌گذارد. .TP .B keyseq\-timeout (500) مدت‌زمانی را مشخص می‌کند که \fBreadline\fP هنگام خواندن یک توالی کلید مبهم، برای یک نویسه منتظر می‌ماند (توالی کلیدی که می‌تواند با استفاده از ورودی خوانده‌شده تا کنون یک توالی کامل تشکیل دهد، یا می‌تواند ورودی بیشتری برای تکمیل یک توالی طولانی‌تر دریافت کند). اگر \fBreadline\fP در طول مدت زمان انقضا هیچ ورودی دریافت نکند، از توالی کلید کوتاه‌تر اما کامل استفاده می‌کند. این مقدار بر حسب میلی‌ثانیه مشخص می‌شود، بنابراین مقدار ۱۰۰۰ به این معنی است که \fBreadline\fP یک ثانیه برای ورودی اضافی منتظر خواهد ماند. اگر این متغیر روی مقداری کمتر یا مساوی صفر، یا یک مقدار غیرعددی تنظیم شود، \fBreadline\fP تا فشرده شدن کلید دیگری منتظر می‌ماند تا تصمیم بگیرد کدام توالی کلید را تکمیل کند. .TP .B mark\-directories (On) اگر روی \fBOn\fP تنظیم شود، به انتهای نام دایرکتوری‌های تکمیل‌شده یک اسلش افزوده می‌شود. .TP .B mark\-modified\-lines (Off) اگر روی \fBOn\fP تنظیم شود، \fBreadline\fP خطوط تاریخچه را که تغییر یافته‌اند با یک ستاره در ابتدا (\fB*\fP) نمایش می‌دهد. .TP .B mark\-symlinked\-directories (Off) اگر روی \fBOn\fP تنظیم شود، به انتهای نام‌های تکمیل‌شده‌ای که پیوندهای نمادین به دایرکتوری‌ها هستند یک اسلش افزوده می‌شود که تابع مقدار \fBmark\-directories\fP است. .TP .B match\-hidden\-files (On) این متغیر، هنگامی که روی \fBOn\fP تنظیم شود، \fBreadline\fP را وادار می‌کند تا هنگام تکمیل نام فایل، فایل‌هایی را که نامشان با یک .Q . شروع می‌شود (فایل‌های پنهان) تطبیق دهد. اگر روی \fBOff\fP تنظیم شود، کاربر باید .Q . ابتدایی را در نام فایل وارد کند تا تکمیل شود. .TP .B menu\-complete\-display\-prefix (Off) اگر روی \fBOn\fP تنظیم شود، تکمیل منویی پیشوند مشترک لیست تکمیل‌های ممکن را (که ممکن است خالی باشد) پیش از چرخش در میان لیست نمایش می‌دهد. .TP .B output\-meta (Off) اگر روی \fBOn\fP تنظیم شود، \fBreadline\fP نویسه‌های با بیت هشتم فعال را به‌جای یک توالی فرار با پیشوند متا، به‌طور مستقیم نمایش می‌دهد. پیش‌فرض \fIOff\fP است، اما اگر لوکال حاوی نویسه‌هایی باشد که ممکن است کدگذاری آن‌ها شامل بایت‌هایی با بیت هشتم فعال باشد، \fBreadline\fP آن را روی \fIOn\fP تنظیم می‌کند. این متغیر به دسته‌بندی محلی \fBLC_CTYPE\fP وابسته است و در صورت تغییر لوکال ممکن است مقدار آن تغییر کند. .TP .B page\-completions (On) اگر روی \fBOn\fP تنظیم شود، \fBreadline\fP از یک صفحه‌بند داخلی شبیه به .IR more (1) استفاده می‌کند تا در هر بار یک صفحه کامل از تکمیل‌های ممکن را نمایش دهد. .TP .B prefer\-visible\-bell ببینید \fBbell\-style\fP. .TP .B print\-completions\-horizontally (Off) اگر روی \fBOn\fP تنظیم شود، \fBreadline\fP موارد تکمیل‌شده را به‌جای ستونی رو به پایین صفحه، به‌صورت افقی و به ترتیب الفبایی نمایش می‌دهد. .TP .B revert\-all\-at\-newline (Off) اگر روی \fBOn\fP تنظیم شود، \fBreadline\fP هنگام اجرای \fBaccept\-line\fP پیش از بازگشت، تمام تغییرات اعمال‌شده روی خطوط تاریخچه را خنثی (undo) می‌کند. به‌طور پیش‌فرض، خطوط تاریخچه ممکن است تغییر کنند و لیست‌های لغو (undo) اختصاصی خود را در بین فراخوانی‌های \fBreadline\fP حفظ نمایند. .TP .B search\-ignore\-case (Off) اگر روی \fBOn\fP تنظیم شود، \fBreadline\fP جستجوهای افزایشی و غیرافزایشی در لیست تاریخچه را به‌صورت غیرحساس به حروف کوچک و بزرگ انجام می‌دهد. .TP .B show\-all\-if\-ambiguous (Off) این متغیر رفتار پیش‌فرض توابع تکمیل را تغییر می‌دهد. اگر روی .BR On تنظیم شود، کلماتی که بیش از یک تکمیل ممکن دارند باعث می‌شوند تا موارد منطبق بلافاصله به‌جای به صدا درآوردن زنگ هشدار لیست شوند. .TP .B show\-all\-if\-unmodified (Off) این گزینه رفتار پیش‌فرض توابع تکمیل را به شیوه‌ای مشابه با \fBshow\-all\-if\-ambiguous\fP تغییر می‌دهد. اگر روی .BR On تنظیم شود، کلماتی که بیش از یک تکمیل ممکن بدون هیچ‌گونه تکمیل جزئی ممکن دارند (تکمیل‌های ممکن پیشوند مشترکی ندارند) باعث می‌شوند به‌جای به صدا درآمدن زنگ، موارد منطبق بلافاصله فهرست شوند. .TP .B show\-mode\-in\-prompt (Off) اگر روی \fBOn\fP تنظیم شود، رشته‌ای به ابتدای خط اعلان اضافه می‌کند که حالت ویرایش را نشان می‌دهد: emacs، دستور vi، یا درج vi. رشته‌های حالت توسط کاربر قابل تنظیم هستند (مانند \fIemacs\-mode\-string\fP). .TP .B skip\-completed\-text (Off) اگر روی \fBOn\fP تنظیم شود، هنگام درج یک تطابق منفرد در خط، رفتار پیش‌فرض تکمیل را تغییر می‌دهد. این گزینه فقط هنگام انجام تکمیل در میانه یک کلمه فعال است. در صورت فعال بودن، \fBreadline\fP نویسه‌هایی از تکمیل را که با نویسه‌های بعد از مکان‌نما (point) در کلمه در حال تکمیل مطابقت دارند درج نمی‌کند، بنابراین بخش‌هایی از کلمه که پس از مکان‌نما قرار دارند تکرار نمی‌شوند. .TP .B vi\-cmd\-mode\-string ((cmd)) اگر متغیر \fIshow\-mode\-in\-prompt\fP فعال باشد، هنگامی که حالت ویرایش vi فعال بوده و در حالت دستوری باشد، این رشته بلافاصله پیش از آخرین خط اعلان اصلی نمایش داده می‌شود. مقدار آن مانند یک کلید مقیدشده (key binding) بسط می‌یابد، بنابراین مجموعه استاندارد پیشوندهای meta- و control- و توالی‌های گریز ممیز وارونه (backslash escape) در دسترس است. دنباله‌های گریز \e1 و \e2 توالی‌های نویسه‌های غیرقابل‌چاپ را آغاز کرده و پایان می‌دهند که می‌توان از آن‌ها برای گنجاندن یک توالی کنترل ترمینال در رشته حالت استفاده کرد. .TP .B vi\-ins\-mode\-string ((ins)) اگر متغیر \fIshow\-mode\-in\-prompt\fP فعال باشد، هنگامی که حالت ویرایش vi فعال بوده و در حالت درج باشد، این رشته بلافاصله پیش از آخرین خط اعلان اصلی نمایش داده می‌شود. مقدار آن مانند یک کلید مقیدشده (key binding) بسط می‌یابد، بنابراین مجموعه استاندارد پیشوندهای meta- و control- و توالی‌های گریز ممیز وارونه (backslash escape) در دسترس است. دنباله‌های گریز \e1 و \e2 توالی‌های نویسه‌های غیرقابل‌چاپ را آغاز کرده و پایان می‌دهند که می‌توان از آن‌ها برای گنجاندن یک توالی کنترل ترمینال در رشته حالت استفاده کرد. .TP .B visible\-stats (Off) اگر روی \fBOn\fP تنظیم شود، هنگام فهرست کردن تکمیل‌های ممکن، نویسه‌ای که نوع فایل را طبق گزارش \fIstat\fP(2) مشخص می‌کند، به نام فایل ضمیمه می‌شود. .PD .SS "ساختارهای شرطی خط خوان (Readline Conditional Constructs)" .B Readline امکانی مشابه با ویژگی‌های کامپایل شرطی پیش‌پردازنده C را پیاده‌سازی می‌کند که به مقیدسازی‌های کلید و تنظیمات متغیر اجازه می‌دهد بر اساس نتیجه آزمایش‌ها انجام شوند. چهار دستورالعمل تجزیه‌کننده (parser directive) در دسترس است. .TP .B $if ساختار .B $if اجازه می‌دهد مقیدسازی‌ها بر اساس حالت ویرایش، ترمینال در حال استفاده، یا برنامه‌ای که از \fBreadline\fP استفاده می‌کند انجام شوند. متن آزمایش، بعد از هر عملگر مقایسه، تا انتهای خط ادامه می‌یابد؛ مگر در مواردی که ذکر شده باشد، هیچ نویسه‌ای برای جداسازی آن لازم نیست. .RS .TP .B mode شکل \fBmode=\fP از دستورالعمل \fB$if\fP برای آزمایش این‌که آیا \fBreadline\fP در حالت emacs است یا vi به کار می‌رود. این ممکن است همراه با دستور \fBset keymap\fP استفاده شود، به عنوان مثال، برای تنظیم مقیدسازی‌ها در نگاشت‌های کلید \fIemacs\-standard\fP و \fIemacs\-ctlx\fP تنها در صورتی که \fBreadline\fP در حالت emacs شروع به کار کند. .TP .B term شکل \fBterm=\fP ممکن است برای گنجاندن مقیدسازی‌های کلید مخصوص ترمینال استفاده شود، شاید برای مقید کردن توالی‌های کلیدی خروجی داده‌شده توسط کلیدهای تابع ترمینال. کلمه سمت راست .B = هم در برابر نام کامل ترمینال و هم در برابر بخشی از نام ترمینال پیش از اولین \fB\-\fP آزمایش می‌شود. این به عنوان مثال اجازه می‌دهد .I xterm هم با .I xterm و هم با .IR xterm\-256color تطابق یابد. .TP .B version آزمون \fBversion\fP می‌تواند برای انجام مقایسه با نسخه‌های خاص \fBreadline\fP استفاده شود. \fBversion\fP به نسخه فعلی \fBreadline\fP بسط می‌یابد. مجموعه عملگرهای مقایسه شامل .BR = ، (و .BR == )، .BR != ، .BR <= ، .BR >= ، .BR < ، و .BR > است. شماره نسخه ارائه شده در سمت راست عملگر شامل یک شماره نسخه اصلی (major)، یک نقطه اعشار اختیاری، و یک نسخه فرعی (minor) اختیاری است (مثلاً \fB7.1\fP). اگر نسخه فرعی حذف شود، مقدار پیش‌فرض آن \fB0\fP خواهد بود. عملگر می‌تواند با نویسه فاصله (whitespace) از رشته \fBversion\fP و از آرگومان شماره نسخه جدا شود. .TP .I application ساختار \fIapplication\fP برای گنجاندن تنظیمات مختص به برنامه استفاده می‌شود. هر برنامه‌ای که از کتابخانه \fBreadline\fP استفاده می‌کند یک \fIapplication name\fP (نام برنامه) تنظیم می‌نماید، و یک فایل پیکربندی اولیه می‌تواند مقدار خاصی را بیازماید. این قابلیت می‌تواند برای نگاشت توالی کلیدها به توابع مفید برای یک برنامه خاص استفاده شود. به عنوان مثال، دستور زیر یک توالی کلید اضافه می‌کند که کلمه فعلی یا قبلی را در \fBbash\fP داخل نقل‌قول قرار می‌دهد: .PP .RS .EX .nf \fB$if\fP Bash # Quote the current or previous word \*"\eC-xq\*": \*"\eeb\e\*"\eef\e\*"\*" \fB$endif\fP .fi .EE .RE .TP .I variable ساختار \fIvariable\fP آزمون‌های برابری ساده‌ای را برای متغیرها و مقادیر \fBreadline\fP فراهم می‌کند. عملگرهای مقایسه‌ای مجاز عبارتند از \fI=\fP، \fI==\fP، و \fI!=\fP. نام متغیر باید با نویسه فاصله از عملگر مقایسه جدا شود؛ عملگر نیز می‌تواند با نویسه فاصله از مقدار سمت راست جدا شود. متغیرهای رشته‌ای و بولی را می‌توان مورد آزمایش قرار داد. متغیرهای بولی باید با مقادیر \fIon\fP و \fIoff\fP سنجیده شوند. .RE .TP .B $else دستورات این شاخه از دستورالعمل \fB$if\fP در صورتی که آزمون شکست بخورد اجرا می‌شوند. .TP .B $endif این دستور، همان‌طور که در مثال قبل دیده شد، به یک دستور \fB$if\fP خاتمه می‌دهد. .TP .B $include این دستورالعمل یک نام فایل واحد را به عنوان آرگومان می‌گیرد و دستورات و نگاشت‌های کلید را از آن فایل می‌خواند. به عنوان مثال، دستورالعمل زیر فایل .FN /etc/inputrc را می‌خواند: .PP .RS .nf \fB$include\fP \^ \fI/etc/inputrc\fP .fi .RE .SS جستجو (Searching) .B Readline دستوراتی را برای جستجو در تاریخچه دستورات (بخش .SM .B HISTORY در زیر را ببینید) برای یافتن خطوط حاوی یک رشته مشخص فراهم می‌کند. دو حالت جستجو وجود دارد: .I افزایشی (incremental) و .IR غیرافزایشی (non-incremental) . .PP جستجوهای افزایشی قبل از پایان تایپ رشته جستجو توسط کاربر آغاز می‌شوند. با تایپ هر نویسه از رشته جستجو، \fBreadline\fP ورودی بعدی از تاریخچه را که با رشته تایپ‌شده تا آن لحظه مطابقت دارد نمایش می‌دهد. یک جستجوی افزایشی تنها به همان تعداد نویسه نیاز دارد که برای یافتن ورودی مورد نظر در تاریخچه لازم است. هنگام استفاده از حالت ویرایش emacs، کلید \fBC\-r\fP را برای جستجوی رو به عقب در تاریخچه به دنبال یک رشته خاص فشار دهید. فشردن \fBC\-s\fP جستجو را رو به جلو در طول تاریخچه انجام می‌دهد. نویسه‌های موجود در مقدار متغیر \fBisearch-terminators\fP برای پایان دادن به یک جستجوی افزایشی استفاده می‌شوند. اگر مقداری به این متغیر اختصاص داده نشده باشد، \fIESC\fP و \fBC\-j\fP به جستجوی افزایشی پایان می‌دهند. \fBC\-g\fP یک جستجوی افزایشی را لغو کرده و خط اصلی را بازمی‌گرداند. هنگامی که جستجو پایان می‌یابد، ورودی تاریخچه‌ای که حاوی رشته جستجو است تبدیل به خط فعلی می‌شود. .PP برای یافتن دیگر ورودی‌های منطبق در فهرست تاریخچه، بسته به جهت جستجو \fBC\-r\fP یا \fBC\-s\fP را وارد کنید. این کار در تاریخچه به سمت عقب یا جلو به دنبال ورودی بعدی منطبق با رشته جستجوی تایپ‌شده تا این لحظه می‌گردد. هر توالی کلید دیگری که به یک دستور \fBreadline\fP مقید شده باشد، جستجو را پایان می‌دهد و آن دستور را اجرا می‌کند. برای نمونه، یک نویسه خط جدید (newline) جستجو را پایان داده و خط را می‌پذیرد، و در نتیجه دستور مربوطه را از فهرست تاریخچه اجرا می‌کند. یک دستور جابه‌جایی نیز جستجو را خاتمه می‌دهد، آخرین خط یافت‌شده را به خط فعلی تبدیل می‌کند و ویرایش را آغاز می‌نماید. .PP ابزار .B Readline آخرین رشته جستجوی افزایشی را به خاطر می‌سپارد. اگر دو کلید \fBC\-r\fP بدون هیچ نویسه مداخله‌گری برای تعریف یک رشته جستجوی جدید تایپ شوند، \fBreadline\fP از همان رشته جستجوی ذخیره‌شده استفاده می‌کند. .PP جستجوهای غیرافزایشی، پیش از آغاز جستجو برای ورودی‌های منطبق در تاریخچه، کل رشته جستجو را می‌خوانند. رشته جستجو می‌تواند توسط کاربر تایپ شود یا بخشی از محتوای خط فعلی باشد. .SS "نام‌های دستورات Readline" در ادامه فهرستی از نام‌های دستورات و توالی‌های کلید پیش‌فرضی که این دستورات به آن‌ها مقید شده‌اند آورده شده است. نام‌های دستوری که بدون توالی کلید هستند، به‌طور پیش‌فرض به هیچ کلیدی مقید نشده‌اند. .PP در توضیحات زیر، \fIpoint\fP به موقعیت فعلی مکان‌نما اشاره دارد، و \fImark\fP به موقعیت مکان‌نمایی اشاره می‌کند که با دستور \fBset\-mark\fP ذخیره شده است. به متن بین point و mark اصطلاحاً \fIregion\fP (ناحیه) گفته می‌شود. .B Readline دارای مفهوم \fIactive region\fP (ناحیه فعال) است: هنگامی که ناحیه فعال باشد، بازنمایش \fBreadline\fP این ناحیه را با استفاده از مقدار متغیر .B active\-region\-start\-color برجسته (highlight) می‌کند. متغیر \fBenable\-active\-region\fP در \fBreadline\fP این قابلیت را فعال و غیرفعال می‌کند. چندین دستور ناحیه را در حالت فعال قرار می‌دهند؛ این موارد در ادامه ذکر شده‌اند. .SS دستورات جابه‌جایی .PD 0 .TP .B beginning\-of\-line (C\-a) رفتن به ابتدای خط فعلی. این دستور ممکن است در برخی صفحه‌کلیدها به کلید Home نیز مقید شده باشد. .TP .B end\-of\-line (C\-e) رفتن به انتهای خط. این دستور ممکن است در برخی صفحه‌کلیدها به کلید End نیز مقید شده باشد. .TP .B forward\-char (C\-f) حرکت به اندازه یک نویسه به جلو. این دستور ممکن است در برخی صفحه‌کلیدها به کلید جهت‌نمای راست نیز مقید شده باشد. .TP .B backward\-char (C\-b) حرکت به اندازه یک نویسه به عقب. این دستور ممکن است در برخی صفحه‌کلیدها به کلید جهت‌نمای چپ نیز مقید شده باشد. .TP .B forward\-word (M\-f) حرکت به جلو تا انتهای کلمه بعدی. کلمات از نویسه‌های الفبایی\-عددی (حروف و ارقام) تشکیل شده‌اند. .TP .B backward\-word (M\-b) حرکت به عقب تا ابتدای کلمه فعلی یا قبلی. کلمات از نویسه‌های الفبایی\-عددی (حروف و ارقام) تشکیل شده‌اند. .TP .B shell\-forward\-word (M\-C\-f) حرکت به جلو تا انتهای کلمه بعدی. کلمات با فرا\-نویسه‌های (metacharacters) نقل‌قول‌نشده پوسته از یکدیگر جدا می‌شوند. .TP .B shell\-backward\-word (M\-C\-b) حرکت به عقب تا ابتدای کلمه فعلی یا قبلی. کلمات با فرا\-نویسه‌های (metacharacters) نقل‌قول‌نشده پوسته از یکدیگر جدا می‌شوند. .TP .B previous\-screen\-line تلاش برای جابه‌جایی point به همان ستون فیزیکی صفحه در سطر فیزیکی قبلی نمایشگر. اگر خط فعلی \fBreadline\fP بیش از یک سطر فیزیکی را اشغال نکرده باشد یا اگر مقدار point بزرگ‌تر از مجموع طول خط اعلان (prompt) و عرض صفحه نباشد، این دستور اثر مورد نظر را نخواهد داشت. .TP .B next\-screen\-line تلاش برای جابه‌جایی point به همان ستون فیزیکی صفحه در سطر فیزیکی بعدی نمایشگر. اگر خط فعلی \fBreadline\fP بیش از یک سطر فیزیکی را اشغال نکرده باشد یا اگر طول خط فعلی \fBreadline\fP بزرگ‌تر از مجموع طول خط اعلان و عرض صفحه نباشد، این دستور اثر مورد نظر را نخواهد داشت. .TP .B clear\-display (M\-C\-l) پاک کردن صفحه و، در صورت امکان، بافر پیمایش به عقب (scrollback buffer) ترمینال، سپس رسم دوباره خط فعلی، به‌گونه‌ای که خط فعلی در بالای صفحه باقی بماند. .TP .B clear\-screen (C\-l) پاک کردن صفحه، سپس ترسیم مجدد سطر جاری، به‌طوری که سطر جاری در بالای صفحه قرار گیرد. با یک آرگومان عددی، سطر جاری بدون پاک کردن صفحه نوسازی می‌شود. .TP .B redraw\-current\-line نوسازی سطر جاری. .PD .SS دستورات مربوط به دستکاری تاریخچه .PD 0 .TP .B accept\-line (Newline, Return) پذیرش سطر صرف‌نظر از این‌که مکان‌نما کجاست. اگر این سطر غیرخالی باشد، با توجه به وضعیت متغیرهای .SM .B HISTCONTROL و .B HISTIGNORE به فهرست تاریخچه افزوده می‌شود. اگر سطر یک سطر تغییریافته از تاریخچه باشد، سطر تاریخچه به حالت اولیه‌اش بازگردانده می‌شود. .TP .B previous\-history (C\-p) واکشی دستور قبلی از فهرست تاریخچه با حرکت به سمت عقب در فهرست. این دستور ممکن است در برخی صفحه‌کلیدها به کلید پیکان رو به بالا نیز مقید شده باشد. .TP .B next\-history (C\-n) واکشی دستور بعدی از فهرست تاریخچه با حرکت به سمت جلو در فهرست. این دستور ممکن است در برخی صفحه‌کلیدها به کلید پیکان رو به پایین نیز مقید شده باشد. .TP .B beginning\-of\-history (M\-<) حرکت به نخستین سطر در تاریخچه. .TP .B end\-of\-history (M\->) حرکت به انتهای تاریخچه ورودی، یعنی سطری که هم‌اکنون در حال وارد شدن است. .TP .B operate\-and\-get\-next (C\-o) پذیرش سطر جاری برای اجرا درست مانند این‌که یک خط جدید (newline) وارد شده باشد، و واکشی سطر بعدی نسبت به سطر جاری از تاریخچه جهت ویرایش. یک آرگومان عددی، در صورت ارائه، مدخل تاریخچه مورد استفاده را به‌جای سطر جاری مشخص می‌کند. .TP .B fetch\-history با یک آرگومان عددی، واکشی آن مدخل از فهرست تاریخچه و قرار دادن آن به‌عنوان سطر جاری. بدون آرگومان، حرکت به عقب تا نخستین مدخل در فهرست تاریخچه. .TP .B reverse\-search\-history (C\-r) جست‌وجو به سمت عقب با شروع از سطر جاری و حرکت .Q به سمت بالا در طول تاریخچه در صورت نیاز. این یک جست‌وجوی افزایشی است. این دستور ناحیه انتخاب را روی متن منطبق‌شده قرار داده و آن ناحیه را فعال می‌کند. .TP .B forward\-search\-history (C\-s) جست‌وجو به سمت جلو با شروع از سطر جاری و حرکت .Q به سمت پایین در طول تاریخچه در صورت نیاز. این یک جست‌وجوی افزایشی است. این دستور ناحیه انتخاب را روی متن منطبق‌شده قرار داده و آن ناحیه را فعال می‌کند. .TP .B non\-incremental\-reverse\-search\-history (M\-p) جست‌وجو به سمت عقب در تاریخچه با شروع از سطر جاری با استفاده از یک جست‌وجوی غیر‌افزایشی برای رشته‌ای که کاربر ارائه می‌دهد. رشته جست‌وجو می‌تواند در هر کجای یک سطر تاریخچه تطابق یابد. .TP .B non\-incremental\-forward\-search\-history (M\-n) جست‌وجو به سمت جلو در تاریخچه با استفاده از یک جست‌وجوی غیر‌افزایشی برای رشته‌ای که کاربر ارائه می‌دهد. رشته جست‌وجو می‌تواند در هر کجای یک سطر تاریخچه تطابق یابد. .TP .B history\-search\-backward جست‌وجو به سمت عقب در تاریخچه برای رشته نویسه‌های بین ابتدای سطر جاری و مکان جاری نشانگر (point). رشته جست‌وجو باید در ابتدای یک سطر تاریخچه تطابق یابد. این یک جست‌وجوی غیر‌افزایشی است. این دستور ممکن است در برخی صفحه‌کلیدها به کلید Page Up مقید شده باشد. .TP .B history\-search\-forward جست‌وجو به سمت جلو در تاریخچه برای رشته نویسه‌های بین ابتدای سطر جاری و مکان جاری نشانگر (point). رشته جست‌وجو باید در ابتدای یک سطر تاریخچه تطابق یابد. این یک جست‌وجوی غیر‌افزایشی است. این دستور ممکن است در برخی صفحه‌کلیدها به کلید Page Down مقید شده باشد. .TP .B history\-substring\-search\-backward جستجوی رو به عقب در تاریخچه برای رشته نویسه‌های موجود بین ابتدای خط فعلی و مکان‌نما (point). رشته مورد جستجو ممکن است در هر کجای یک خط از تاریخچه مطابقت یابد. این یک جستجوی غیر افزایشی (non-incremental) است. .TP .B history\-substring\-search\-forward جستجوی رو به جلو در تاریخچه برای رشته نویسه‌های موجود بین ابتدای خط فعلی و مکان‌نما (point). رشته مورد جستجو ممکن است در هر کجای یک خط از تاریخچه مطابقت یابد. این یک جستجوی غیر افزایشی (non-incremental) است. .TP .B yank\-nth\-arg (M\-C\-y) درج نخستین آرگومان دستور قبلی (معمولاً کلمه دوم در خط قبلی) در محل مکان‌نما. با ارائه یک آرگومان .IR n ، کلمه \fIn\fPام از دستور قبلی درج می‌شود (کلمات در دستور قبلی با کلمه ۰ آغاز می‌شوند). یک آرگومان منفی، کلمه \fIn\fPام از انتهای دستور قبلی را درج می‌کند. پس از محاسبه آرگومان \fIn\fP، این دستور از امکانات بسط تاریخچه برای استخراج کلمه \fIn\fPام استفاده می‌کند، گویی که بسط تاریخچه .Q !\fIn\fP مشخص شده است. .TP .B yank\-last\-arg (M\-.\^, M\-_\^) درج آخرین آرگومان دستور قبلی (آخرین کلمه از مدخل قبلی در تاریخچه). با یک آرگومان عددی، دقیقاً مانند \fByank\-nth\-arg\fP رفتار می‌کند. فراخوانی‌های پیاپی \fByank\-last\-arg\fP در فهرست تاریخچه به عقب حرکت کرده و آخرین کلمه (یا کلمه مشخص‌شده توسط آرگومان نخستین فراخوانی) هر خط را به نوبت درج می‌کند. هر آرگومان عددی ارائه شده به این فراخوانی‌های پیاپی، جهت حرکت در تاریخچه را تعیین می‌کند. یک آرگومان منفی جهت حرکت در تاریخچه را تغییر می‌دهد (رو به عقب یا جلو). این دستور از امکانات بسط تاریخچه برای استخراج آخرین کلمه استفاده می‌کند، گویی که بسط تاریخچه .Q !$ مشخص شده است. .TP .B shell\-expand\-line (M\-C\-e) بسط خط با اجرای بسط‌های کلمات پوسته. این عملیات بسط نام‌های مستعار و تاریخچه، نقل‌قول‌های \fB$\fP\*'\fIstring\fP\*' و \fB$\fP\*"\fIstring\fP\*"، بسط مدک (tilde expansion)، بسط پارامتر و متغیر، بسط حسابی، جایگزینی دستور و فرایند، تفکیک کلمات و حذف نقل‌قول را اجرا می‌کند. یک آرگومان صریح مانع از جایگزینی دستور و فرایند می‌شود. بخش .SM .B "بسط تاریخچه (HISTORY EXPANSION)" را در ادامه برای شرح بسط تاریخچه ببینید. .TP .B history\-expand\-line (M\-\*^) اجرای بسط تاریخچه بر روی خط فعلی. بخش .SM .B "بسط تاریخچه (HISTORY EXPANSION)" را در ادامه برای شرح بسط تاریخچه ببینید. .TP .B magic\-space اجرای بسط تاریخچه بر روی خط فعلی و درج یک فاصله (space). بخش .SM .B "بسط تاریخچه (HISTORY EXPANSION)" را در ادامه برای شرح بسط تاریخچه ببینید. .TP .B alias\-expand\-line اجرای بسط نام مستعار بر روی خط فعلی. بخش .SM .B "نامهای مستعار (ALIASES)" را در بالا برای شرح بسط نام مستعار ببینید. .TP .B history\-and\-alias\-expand\-line اجرای بسط تاریخچه و نام مستعار بر روی خط فعلی. .TP .B insert\-last\-argument (M\-.\^, M\-_\^) مترادفی برای \fByank\-last\-arg\fP. .TP .B edit\-and\-execute\-command (C\-x C\-e) فراخوانی یک ویرایشگر بر روی خط فرمان فعلی و اجرای نتیجه به عنوان دستورات پوسته. \fBBash\fP تلاش می‌کند تا به ترتیب .SM .BR $VISUAL ، .SM .BR $EDITOR و \fIemacs\fP را به عنوان ویرایشگر فراخوانی کند. .PD .SS دستورات مربوط به تغییر متن .PD 0 .TP .B \fIend\-of\-file\fP (معمولاً C\-d) نویسه نشان‌دهنده پایان فایل (end-of-file) همان‌طور که مثلاً توسط .IR stty (1) تنظیم شده است. اگر این نویسه هنگامی خوانده شود که هیچ نویسه‌ای روی سطر وجود ندارد و مکان‌نما (point) در ابتدای سطر باشد، \fBreadline\fP آن را به عنوان پایان ورودی تفسیر کرده و .SM .BR EOF را برمی‌گرداند. .TP .B delete\-char (C\-d) حذف نویسه در موقعیت مکان‌نما. اگر این تابع به همان نویسه‌ای مقید (bound) شده باشد که نویسه \fBEOF\fP در tty است، همان‌طور که معمولاً \fBC\-d\fP چنین است، برای مشاهده اثرات آن به بالا مراجعه کنید. این دستور ممکن است در برخی صفحه‌کلیدها به کلید Delete نیز مقید شده باشد. .TP .B backward\-delete\-char (Rubout) حذف نویسه پشت مکان‌نما. هنگامی که یک آرگومان عددی داده شود، متن حذف‌شده را در حلقه حذف (kill ring) ذخیره می‌کند. .TP .B forward\-backward\-delete\-char حذف نویسه زیر مکان‌نما، مگر اینکه مکان‌نما در انتهای سطر باشد که در این صورت نویسه پشت مکان‌نما حذف می‌شود. .TP .B quoted\-insert (C\-q, C\-v) افزودن نویسه بعدی تایپ‌شده به سطر به صورت تحت‌اللفظی و عیناً. به عنوان مثال، برای درج نویسه‌هایی مانند \fBC\-q\fP از این روش استفاده می‌شود. .TP .B tab\-insert (C\-v TAB) درج یک نویسه تب (tab). .TP .B "self\-insert (a, b, A, 1, !, \fR.\|.\|.\fP)" درج نویسه تایپ‌شده. .TP .B bracketed\-paste\-begin این تابع برای پیوند به توالی فرار (escape sequence) موسوم به .Q "bracketed paste" که توسط برخی پایانه‌ها ارسال می‌شود در نظر گرفته شده است، و چنین قیدی به‌طور پیش‌فرض اختصاص داده شده است. این قابلیت به \fBreadline\fP اجازه می‌دهد تا متن جای‌گذاری‌شده (pasted) را به عنوان یک واحد منفرد درج کند بدون اینکه با هر نویسه طوری رفتار شود که گویی از صفحه‌کلید خوانده شده است. نویسه‌های جای‌گذاری‌شده به‌گونه‌ای درج می‌شوند که گویی هر یک به جای اجرای دستورات ویرایشی، به \fBself\-insert\fP مقید شده‌اند. .IP قابلیت bracketed paste محدوده (region) را روی متن درج‌شده قرار داده و محدوده را فعال می‌کند. .TP .B transpose\-chars (C\-t) کشیدن نویسه قبل از مکان‌نما به جلو و روی نویسه در موقعیت مکان‌نما، و همچنین حرکت مکان‌نما به سمت جلو. اگر مکان‌نما در انتهای سطر باشد، دو نویسه قبل از مکان‌نما را با هم جابه‌جا می‌کند. آرگومان‌های منفی هیچ اثری ندارند. .TP .B transpose\-words (M\-t) کشیدن کلمه قبل از مکان‌نما به بعد از کلمه بعد از مکان‌نما، و همچنین حرکت مکان‌نما به بعد از آن کلمه. اگر مکان‌نما در انتهای سطر باشد، دو کلمه آخر روی سطر را جابه‌جا می‌کند. .TP .B shell\-transpose\-words (M-C-t) کشیدن کلمه قبل از مکان‌نما به بعد از کلمه بعد از مکان‌نما، و همچنین حرکت مکان‌نما به بعد از آن کلمه. اگر نقطه درج در انتهای سطر باشد، دو کلمه آخر روی سطر را جابه‌جا می‌کند. مرزهای کلمات همانند \fBshell\-forward\-word\fP و \fBshell\-backward\-word\fP هستند. .TP .B upcase\-word (M\-u) بزرگ کردن حروف کلمه فعلی (یا کلمه بعدی). با یک آرگومان منفی، حروف کلمه قبلی را بزرگ می‌کند، اما مکان‌نما را جابه‌جا نمی‌کند. .TP .B downcase\-word (M\-l) کوچک کردن حروف کلمه فعلی (یا کلمه بعدی). با یک آرگومان منفی، حروف کلمه قبلی را کوچک می‌کند، اما مکان‌نما را جابه‌جا نمی‌کند. .TP .B capitalize\-word (M\-c) بزرگ کردن حرف اول کلمه فعلی (یا کلمه بعدی). با یک آرگومان منفی، حرف اول کلمه قبلی را بزرگ می‌کند، اما مکان‌نما را جابه‌جا نمی‌کند. .TP .B overwrite\-mode تغییر وضعیت حالت بازنویسی (overwrite mode). با یک آرگومان عددی صریح مثبت، به حالت بازنویسی سوئیچ می‌کند. با یک آرگومان عددی صریح غیرمثبت، به حالت درج (insert mode) سوئیچ می‌کند. این دستور تنها روی حالت \fBemacs\fP تأثیر می‌گذارد؛ حالت \fBvi\fP بازنویسی را به شیوه متفاوتی انجام می‌دهد. هر فراخوانی به \fIreadline()\fP در حالت درج آغاز می‌شود. .IP در حالت بازنویسی، نویسه‌های مقید به \fBself\-insert\fP به جای هل دادن متن به سمت راست، متن در موقعیت مکان‌نما را جایگزین می‌کنند. نویسه‌های مقید به \fBbackward\-delete\-char\fP نویسه قبل از مکان‌نما را با یک فاصله (space) جایگزین می‌کنند. به‌طور پیش‌فرض، این دستور نامقید (unbound) است، اما در برخی صفحه‌کلیدها ممکن است به کلید Insert مقید شده باشد. .PD .SS برش و چسباندن (Killing and Yanking) .PD 0 .TP .B kill\-line (C\-k) برش متن از مکان‌نما (point) تا انتهای خط جاری. با یک آرگومان عددی منفی، برش رو به عقب از مکان‌نما تا ابتدای خط انجام می‌شود. .TP .B backward\-kill\-line (C\-x Rubout) برش رو به عقب تا ابتدای خط جاری. با یک آرگومان عددی منفی، برش رو به جلو از مکان‌نما تا انتهای خط انجام می‌شود. .TP .B unix\-line\-discard (C\-u) برش رو به عقب از مکان‌نما تا ابتدای خط، و ذخیره کردن متن بریده‌شده در حلقه برش (kill-ring). .\" There is no real difference between this and backward-kill-line .TP .B kill\-whole\-line برش تمام نویسه‌های خط جاری، صرف‌نظر از این‌که مکان‌نما کجاست. .TP .B kill\-word (M\-d) برش از مکان‌نما تا انتهای کلمه جاری، یا در صورتی که بین کلمات باشد، تا انتهای کلمه بعدی. مرزهای کلمه همان مرزهای استفاده‌شده توسط \fBforward\-word\fP هستند. .TP .B backward\-kill\-word (M\-Rubout) برش کلمه ماقبل مکان‌نما. مرزهای کلمه همان مرزهای استفاده‌شده توسط \fBbackward\-word\fP هستند. .TP .B shell\-kill\-word (M\-C\-d) برش از مکان‌نما تا انتهای کلمه جاری، یا در صورتی که بین کلمات باشد، تا انتهای کلمه بعدی. مرزهای کلمه همان مرزهای استفاده‌شده توسط \fBshell\-forward\-word\fP هستند. .TP .B shell\-backward\-kill\-word برش کلمه ماقبل مکان‌نما. مرزهای کلمه همان مرزهای استفاده‌شده توسط \fBshell\-backward\-word\fP هستند. .TP .B unix\-word\-rubout (C\-w) برش کلمه ماقبل مکان‌نما با استفاده از فاصله خالی (white space) به عنوان مرز کلمه، و ذخیره کردن متن بریده‌شده در حلقه برش (kill-ring). .TP .B unix\-filename\-rubout برش کلمه ماقبل مکان‌نما با استفاده از فاصله خالی و نویسه ممیز (slash) به عنوان مرزهای کلمه، و ذخیره کردن متن بریده‌شده در حلقه برش (kill-ring). .TP .B delete\-horizontal\-space (M\-\e) حذف تمام فاصله‌ها و تب‌های اطراف مکان‌نما. .TP .B kill\-region برش متن موجود در ناحیه (region) جاری. .TP .B copy\-region\-as\-kill کپی کردن متن موجود در ناحیه به میان‌گیر برش (kill buffer)، به‌طوری‌که بتوان بلافاصله آن را چسباند (yank کرد). .TP .B copy\-backward\-word کپی کردن کلمه ماقبل مکان‌نما به میان‌گیر برش. مرزهای کلمه همانند \fBbackward\-word\fP هستند. .TP .B copy\-forward\-word کپی کردن کلمه مابعد مکان‌نما به میان‌گیر برش. مرزهای کلمه همانند \fBforward\-word\fP هستند. .TP .B yank (C\-y) چسباندن متن بالای حلقه برش به میان‌گیر در محل مکان‌نما. .TP .B yank\-pop (M\-y) چرخش حلقه برش، و چسباندن متن جدید بالای آن. فقط پس از .B yank یا .BR yank\-pop عمل می‌کند. .PD .SS آرگومان‌های عددی (Numeric Arguments) .PD 0 .TP .B digit\-argument (M\-0, M\-1, \fR.\|.\|.\fP, M\-\-) افزودن این رقم به آرگومانی که از قبل در حال انباشت است، یا شروع یک آرگومان جدید. M\-\- یک آرگومان منفی را آغاز می‌کند. .TP .B universal\-argument این روش دیگری برای مشخص کردن یک آرگومان است. اگر پس از این دستور یک یا چند رقم بیاید، که می‌تواند اختیاری همراه با علامت منفی در ابتدا باشد، آن ارقام آرگومان را تعیین می‌کنند. اگر پس از دستور ارقامی بیاید، اجرای مجدد .B universal\-argument به آرگومان عددی پایان می‌دهد، اما در غیر این صورت نادیده گرفته می‌شود. به عنوان یک حالت خاص، اگر بلافاصله پس از این دستور نویسه‌ای بیاید که نه رقم باشد و نه علامت منفی، شمارش آرگومان برای دستور بعدی در چهار ضرب می‌شود. شمارش آرگومان در ابتدا یک است، بنابراین اجرای این تابع برای بار نخست شمارش آرگومان را چهار می‌کند، بار دوم شمارش آرگومان را شانزده می‌کند، و به همین ترتیب ادامه می‌یابد. .PD .SS تکمیل کردن (Completing) .PD 0 .TP .B complete (TAB) تلاش برای انجام تکمیل روی متن قبل از مکان‌نما (point). .B Bash تکمیل را ابتدا با بررسی هرگونه تکمیل برنامه‌پذیر برای کلمه دستور آغاز می‌کند (به \fBProgrammable Completion\fP در زیر مراجعه کنید)، در غیر این صورت به نوبت با متن به عنوان یک متغیر (اگر متن با \fB$\fP شروع شود)، نام کاربری (اگر متن با \fB\*~\fP شروع شود)، نام میزبان (اگر متن با \fB@\fP شروع شود)، یا دستور (شامل نام‌های مستعار، توابع و دستورات توکار) رفتار می‌کند. اگر هیچ‌کدام از این‌ها تطابقی ایجاد نکند، به تکمیل نام فایل برمی‌گردد. .TP .B possible\-completions (M\-?) تکمیل‌های ممکن برای متن قبل از مکان‌نما را فهرست می‌کند. هنگام نمایش تکمیل‌ها، \fBreadline\fP تعداد ستون‌های مورد استفاده برای نمایش را به ترتیب اولویت با مقدار \fBcompletion-display-width\fP، مقدار متغیر پوسته .SM .BR COLUMNS ، یا عرض صفحه نمایش تنظیم می‌کند. .TP .B insert\-completions (M\-*) تمام تکمیل‌های متن قبل از مکان‌نما را که توسط \fBpossible\-completions\fP تولید می‌شدند، با فاصله (space) از یکدیگر درج می‌کند. .TP .B menu\-complete مشابه \fBcomplete\fP است، اما کلمه‌ای را که باید تکمیل شود با یک تطابق واحد از فهرست تکمیل‌های ممکن جایگزین می‌کند. اجرای مکرر \fBmenu\-complete\fP در فهرست تکمیل‌های ممکن گام برمی‌دارد و هر تطابق را به نوبت درج می‌کند. در انتهای فهرست تکمیل‌ها، \fBmenu\-complete\fP زنگ را به صدا درمی‌آورد (بسته به تنظیمات \fBbell\-style\fP) و متن اصلی را بازیابی می‌کند. یک آرگومان \fIn\fP به اندازه \fIn\fP موقعیت در فهرست تطابق‌ها به جلو می‌رود؛ یک آرگومان منفی در فهرست به عقب حرکت می‌کند. این دستور برای انتساب به کلید \fBTAB\fP در نظر گرفته شده است، اما به طور پیش‌فرض منتسب نشده است. .TP .B menu\-complete\-backward مشابه \fBmenu\-complete\fP است، اما در فهرست تکمیل‌های ممکن به عقب حرکت می‌کند، گویی به \fBmenu\-complete\fP یک آرگومان منفی داده شده است. این دستور به طور پیش‌فرض منتسب نشده است. .TP .B export\-completions تکمیل را روی کلمه قبل از مکان‌نما همان‌طور که در بالا توضیح داده شد انجام می‌دهد و فهرست تکمیل‌های ممکن را در جریان خروجی \fBreadline\fP با قالب زیر و نوشتن اطلاعات در خطوط جداگانه می‌نویسد: .RS .PD .IP \(bu .PD 0 تعداد تطابق‌ها \fIN\fP؛ .IP \(bu کلمه‌ای که در حال تکمیل است؛ .IP \(bu \fIS\fP:\fIE\fP، که در آن \fIS\fP و \fIE\fP آفست‌های شروع و پایان کلمه در بافر خط \fBreadline\fP هستند؛ سپس .IP \(bu هر تطابق، یک مورد در هر خط .RE .PD .IP اگر تطابقی وجود نداشته باشد، اولین خط .Q 0 خواهد بود و این دستور هیچ خروجی دیگری بعد از \fIS\fP:\fIE\fP چاپ نمی‌کند. اگر فقط یک تطابق وجود داشته باشد، یک خط شامل آن چاپ می‌کند. اگر بیش از یک تطابق وجود داشته باشد، پیشوند مشترک تطابق‌ها را که ممکن است خالی باشد، در اولین خط بعد از \fIS\fP:\fIE\fP چاپ می‌کند، سپس تطابق‌ها را در خطوط بعدی قرار می‌دهد. در این حالت، \fIN\fP شامل خط اول با پیشوند مشترک خواهد بود. .IP کاربر یا برنامه کاربردی باید بتواند احتمال وجود یک خط خالی را مدیریت کند. هدف این است که کاربر یا برنامه کاربردی \fIN\fP خط را پس از خط حاوی \fIS\fP:\fIE\fP برای دریافت فهرست تطابق بخواند. این دستور به طور پیش‌فرض منتسب نشده است. .TP .B delete\-char\-or\-list اگر در ابتدا یا انتهای خط نباشد، کاراکتر زیر مکان‌نما را حذف می‌کند (مانند \fBdelete\-char\fP). در انتهای خط، دقیقاً مانند \fBpossible\-completions\fP رفتار می‌کند. این دستور به طور پیش‌فرض منتسب نشده است. .TP .B complete\-filename (M\-/) برای تکمیل نام فایل روی متن قبل از مکان‌نما تلاش می‌کند. .TP .B possible\-filename\-completions (C\-x /) فهرستی از تکمیل‌های ممکن را برای متن قبل از مکان‌نما، با در نظر گرفتن آن به‌عنوان نام فایل، نمایش می‌دهد. .TP .B complete\-username (M\-\*~) برای تکمیل متن قبل از مکان‌نما، با در نظر گرفتن آن به‌عنوان نام کاربری، تلاش می‌کند. .TP .B possible\-username\-completions (C\-x \*~) فهرستی از تکمیل‌های ممکن را برای متن قبل از مکان‌نما، با در نظر گرفتن آن به‌عنوان نام کاربری، نمایش می‌دهد. .TP .B complete\-variable (M\-$) برای تکمیل متن قبل از مکان‌نما، با در نظر گرفتن آن به‌عنوان یک متغیر پوسته، تلاش می‌کند. .TP .B possible\-variable\-completions (C\-x $) فهرستی از تکمیل‌های ممکن را برای متن قبل از مکان‌نما، با در نظر گرفتن آن به‌عنوان یک متغیر پوسته، نمایش می‌دهد. .TP .B complete\-hostname (M\-@) برای تکمیل متن قبل از مکان‌نما، با در نظر گرفتن آن به‌عنوان نام میزبان (hostname)، تلاش می‌کند. .TP .B possible\-hostname\-completions (C\-x @) فهرستی از تکمیل‌های ممکن را برای متن قبل از مکان‌نما، با در نظر گرفتن آن به‌عنوان نام میزبان، نمایش می‌دهد. .TP .B complete\-command (M\-!) برای تکمیل متن قبل از مکان‌نما، با در نظر گرفتن آن به‌عنوان نام دستور، تلاش می‌کند. تکمیل دستور تلاش می‌کند تا متن را به‌ترتیب با نام‌های مستعار، کلمات رزرو شده، توابع پوسته، دستورات توکار پوسته و در نهایت نام فایل‌های اجرایی تطبیق دهد. .TP .B possible\-command\-completions (C\-x !) فهرستی از تکمیل‌های ممکن را برای متن قبل از مکان‌نما، با در نظر گرفتن آن به‌عنوان نام دستور، نمایش می‌دهد. .TP .B dynamic\-complete\-history (M\-TAB) برای تکمیل متن قبل از مکان‌نما با مقایسه متن با مدخل‌های فهرست تاریخچه جهت یافتن تطابق‌های احتمالی تکمیل، تلاش می‌کند. .TP .B dabbrev\-expand برای تکمیل منویی (menu completion) روی متن قبل از مکان‌نما با مقایسه متن با خطوطی از فهرست تاریخچه جهت یافتن تطابق‌های احتمالی تکمیل، تلاش می‌کند. .TP .B complete\-into\-braces (M\-{) تکمیل نام فایل را انجام داده و فهرست تکمیل‌های ممکن را درون آکولادها قرار می‌دهد تا این فهرست در دسترس پوسته قرار گیرد (بخش .B "بسط آکولاد (Brace Expansion)" در بالا را ببینید). .PD .SS "ماکروهای صفحه‌کلید (Keyboard Macros)" .PD 0 .TP .B start\-kbd\-macro (C\-x (\^) شروع به ذخیره نویسه‌های تایپ‌شده در ماکروی صفحه‌کلید فعلی می‌کند. .TP .B end\-kbd\-macro (C\-x )\^) ذخیره نویسه‌های تایپ‌شده در ماکروی صفحه‌کلید فعلی را متوقف کرده و تعریف آن را ذخیره می‌کند. .TP .B call\-last\-kbd\-macro (C\-x e) آخرین ماکروی صفحه‌کلید تعریف‌شده را مجدداً اجرا می‌کند، به‌گونه‌ای که نویسه‌های موجود در ماکرو مانند نویسه‌های تایپ‌شده از صفحه‌کلید عمل می‌کنند. .TP .B print\-last\-kbd\-macro () آخرین ماکروی صفحه‌کلید تعریف‌شده را در قالبی مناسب برای فایل \fIinputrc\fP چاپ می‌کند. .PD .SS "متفرقه (Miscellaneous)" .PD 0 .TP .B re\-read\-init\-file (C\-x C\-r) محتویات فایل \fIinputrc\fP را می‌خواند و هرگونه کلید مقیدشده (bindings) یا انتساب متغیر موجود در آن را اعمال می‌کند. .TP .B abort (C\-g) دستور ویرایشی فعلی را لغو کرده و زنگ ترمینال را به صدا درمی‌آورد (بسته به تنظیمات .BR bell\-style ). .TP .B do\-lowercase\-version (M\-A, M\-B, M\-\fIx\fP, \fR.\|.\|.\fP) اگر نویسه متا شده \fIx\fP بزرگ باشد، دستوری را اجرا می‌کند که به نویسه کوچک متای متناظر مقید شده است. اگر \fIx\fP از قبل کوچک باشد، رفتار تعریف‌نشده است. .TP .B prefix\-meta (ESC) کاراکتر تایپ‌شده بعدی را مِتا (Metafy) می‌کند. .SM .B ESC .B f معادل است با .BR Meta\-f . .TP .B undo (C\-_, C\-x C\-u) واگردانی (undo) گام‌به‌گام، که به‌طور جداگانه برای هر خط به‌خاطر سپرده می‌شود. .TP .B revert\-line (M\-r) واگردانی تمام تغییرات ایجادشده در این خط. این عمل مانند اجرای دستور .B undo به تعداد دفعات کافی است تا خط به حالت اولیه خود بازگردد. .TP .B tilde\-expand (M\-&) انجام بسط تیلدا روی کلمه جاری. .TP .B set\-mark (C\-@, M\-) تنظیم علامت (mark) در موقعیت مکان‌نما (point). اگر یک آرگومان عددی ارائه شود، علامت روی آن موقعیت تنظیم می‌شود. .TP .B exchange\-point\-and\-mark (C\-x C\-x) جابجایی مکان‌نما با علامت. موقعیت فعلی مکان‌نما روی موقعیت ذخیره‌شده تنظیم می‌شود، سپس علامت روی موقعیت قبلی مکان‌نما قرار می‌گیرد. .TP .B character\-search (C\-]) یک کاراکتر را می‌خواند و مکان‌نما را به وقوع بعدی آن کاراکتر منتقل می‌کند. یک آرگومان منفی، وقوع‌های قبلی را جستجو می‌کند. .TP .B character\-search\-backward (M\-C\-]) یک کاراکتر را می‌خواند و مکان‌نما را به وقوع قبلی آن کاراکتر منتقل می‌کند. یک آرگومان منفی، وقوع‌های بعدی را جستجو می‌کند. .TP .B skip\-csi\-sequence به تعداد کافی کاراکتر می‌خواند تا یک توالی چندکلیدی مانند توالی‌های تعریف‌شده برای کلیدهایی نظیر Home و End را مصرف کند. توالی‌های CSI با یک نشانگر توالی کنترلی (CSI) آغاز می‌شوند، معمولاً .IR "ESC [" . اگر این توالی به .Q \ee[ مقید (bound) شده باشد، کلیدهایی که توالی‌های CSI تولید می‌کنند هیچ تأثیری نخواهند داشت مگر اینکه صراحتاً به یک دستور \fBreadline\fP مقید شده باشند، به‌جای اینکه کاراکترهای سرگردان را وارد بافر ویرایش کنند. این دستور به‌طور پیش‌فرض مقید نشده است، اما معمولاً به .IR "ESC [" مقید می‌شود. .TP .B insert\-comment (M\-#) بدون یک آرگومان عددی، مقدار متغیر .B comment\-begin در \fBreadline\fP را در ابتدای خط جاری درج می‌کند. اگر یک آرگومان عددی ارائه شود، این دستور به‌صورت یک کلید دومنظوره (toggle) عمل می‌کند: اگر کاراکترهای ابتدای خط با مقدار \fBcomment\-begin\fP مطابقت نداشته باشند، مقدار را درج می‌کند؛ در غیر این صورت کاراکترهای موجود در \fBcomment-begin\fP را از ابتدای خط حذف می‌کند. در هر دو حالت، خط به‌گونه‌ای پذیرفته می‌شود که گویی یک نویسه خط‌جدید (newline) تایپ شده است. مقدار پیش‌فرض \fBcomment\-begin\fP باعث می‌شود این دستور خط جاری را به یک توضیح (کامنت) پوسته تبدیل کند. اگر یک آرگومان عددی باعث حذف کاراکتر توضیح شود، خط توسط پوسته اجرا خواهد شد. .TP .B spell\-correct\-word (C\-x s) تصحیح املایی را روی کلمه جاری انجام می‌دهد، و با آن به‌عنوان یک دایرکتوری یا نام فایل رفتار می‌کند، دقیقاً به همان روش گزینه پوسته‌ای \fBcdspell\fP. مرزهای کلمات همان‌هایی هستند که توسط \fBshell\-forward\-word\fP استفاده می‌شوند. .TP .B glob\-complete\-word (M\-g) با کلمه قبل از مکان‌نما به‌عنوان یک الگو برای بسط نام مسیر رفتار می‌کند، در حالی که یک علامت ستاره به‌طور ضمنی به آن اضافه شده است، سپس از این الگو برای ایجاد فهرستی از نام‌های فایل منطبق جهت تکمیل‌های ممکن استفاده می‌کند. .TP .B glob\-expand\-word (C\-x *) با کلمه قبل از مکان‌نما به‌عنوان یک الگو برای بسط نام مسیر رفتار می‌کند، و فهرست نام‌های فایل منطبق را درج کرده، و آن را جایگزین کلمه می‌کند. اگر یک آرگومان عددی ارائه شود، قبل از بسط نام مسیر، یک \fB*\fP به آن اضافه می‌کند. .TP .B glob\-list\-expansions (C\-x g) فهرست بسط‌هایی که توسط .B glob\-expand\-word تولید می‌شدند را نمایش می‌دهد و خط را مجدداً بازنمایی می‌کند. اگر یک آرگومان عددی ارائه شود، قبل از بسط نام مسیر، یک \fB*\fP به آن اضافه می‌کند. .TP .B dump\-functions چاپ تمام توابع و کلیدهای مقید به آن‌ها در جریان خروجی \fBreadline\fP. اگر یک آرگومان عددی ارائه شود، خروجی به گونه‌ای قالب‌بندی می‌شود که بتوان آن را بخشی از یک فایل \fIinputrc\fP قرار داد. .TP .B dump\-variables تمام متغیرهای قابل تنظیم \fBreadline\fP و مقادیر آن‌ها را در جریان خروجی \fBreadline\fP چاپ می‌کند. اگر یک آرگومان عددی ارائه شود، خروجی به گونه‌ای قالب‌بندی می‌شود که بتواند بخشی از یک فایل \fIinputrc\fP قرار گیرد. .TP .B dump\-macros تمام توالی‌های کلیدی \fBreadline\fP مقید شده به ماکروها و رشته‌هایی که خروجی می‌دهند را در جریان خروجی \fBreadline\fP چاپ می‌کند. اگر یک آرگومان عددی ارائه شود، خروجی به گونه‌ای قالب‌بندی می‌شود که بتواند بخشی از یک فایل \fIinputrc\fP قرار گیرد. .TP .B execute\-named\-command (M-x) یک نام دستور قابل پیوند \fBreadline\fP را از ورودی خوانده و تابعی را که به آن پیوند خورده است اجرا می‌کند، گویی که توالی کلیدی مقید شده به آن در ورودی ظاهر شده است. اگر به این تابع یک آرگومان عددی داده شود، آن آرگومان را به تابعی که اجرا می‌کند پاس می‌دهد. .TP .B display\-shell\-version (C\-x C\-v) اطلاعات نسخه نمونه فعلی .BR bash را نمایش می‌دهد. .PD .SS "تکمیل برنامه‌پذیر (Programmable Completion)" هنگامی که یک کاربر اقدام به تکمیل کلمه برای یک دستور یا یک آرگومان برای دستوری می‌کند که یک مشخصه تکمیل (یک \fIcompspec\fP) برای آن با استفاده از دستور توکار \fBcomplete\fP تعریف شده است (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" در زیر را ببینید)، \fBreadline\fP امکانات تکمیل برنامه‌پذیر را فراخوانی می‌کند. .PP نخست، \fBbash\fP نام دستور را شناسایی می‌کند. اگر یک compspec برای آن دستور تعریف شده باشد، آن compspec برای تولید فهرست تکمیل‌های ممکن برای کلمه استفاده می‌شود. اگر کلمه دستور یک رشته خالی باشد (تلاش برای تکمیل در ابتدای یک خط خالی انجام شود)، \fBbash\fP از هر compspec تعریف شده با گزینه \fB\-E\fP برای \fBcomplete\fP استفاده می‌کند. گزینه \fB\-I\fP برای \fBcomplete\fP نشان می‌دهد که کلمه دستور، نخستین کلمه غیر از انتساب در خط، یا پس از یک جداکننده دستور مانند \fB;\fP یا \fB|\fP است. این مورد معمولاً نشان‌دهنده تکمیل نام دستور است. .PP اگر کلمه دستور یک نام مسیر کامل باشد، \fBbash\fP ابتدا به دنبال یک compspec برای نام مسیر کامل می‌گردد. اگر هیچ compspecای برای نام مسیر کامل وجود نداشته باشد، \fBbash\fP تلاش می‌کند یک compspec برای بخشِ پس از اسلش نهایی بیابد. اگر این جستجوها به یک compspec منجر نشوند، یا اگر هیچ compspecای برای کلمه دستور وجود نداشته باشد، \fBbash\fP از هر compspec تعریف شده با گزینه \fB\-D\fP برای \fBcomplete\fP به عنوان پیش‌فرض استفاده می‌کند. اگر هیچ compspec پیش‌فرضی وجود نداشته باشد، \fBbash\fP به عنوان آخرین راهکار بسط نام مستعار (alias) را روی کلمه دستور انجام می‌دهد، و تلاش می‌کند یک compspec برای کلمه دستورِ حاصل از هرگونه بسط موفقیت‌آمیز پیدا کند. .PP اگر یک compspec پیدا نشود، \fBbash\fP تکمیل پیش‌فرض خود را مطابق آنچه در بالا ذیل \fBتکمیل (Completing)\fP شرح داده شد انجام می‌دهد. در غیر این صورت، پس از پیدا شدن یک compspec، \fBbash\fP از آن برای تولید فهرست کلمات منطبق استفاده می‌کند. .PP نخست، \fBbash\fP \fIکنش‌ها\fP (actions) مشخص‌شده توسط compspec را اجرا می‌کند. این کار فقط مواردی را برمی‌گرداند که پیشوند کلمه در حال تکمیل باشند. هنگامی که گزینه .B \-f یا .B \-d برای تکمیل نام فایل یا نام دایرکتوری استفاده می‌شود، \fBbash\fP از متغیر پوسته .SM .B FIGNORE برای فیلتر کردن تطابق‌ها استفاده می‌کند. .PP سپس، تکمیل برنامه‌پذیر تطابق‌های مشخص‌شده توسط یک الگوی بسط مسیر ارائه‌شده به عنوان یک آرگومان به گزینه \fB\-G\fP را تولید می‌کند. کلمات تولید شده توسط الگو لزومی ندارد با کلمه در حال تکمیل مطابقت داشته باشند. \fBBash\fP از متغیر .SM .B FIGNORE برای فیلتر کردن تطابق‌ها استفاده می‌کند، اما از متغیر پوسته .SM .B GLOBIGNORE استفاده نمی‌کند. .PP سپس، تکمیل خودکار رشتهٔ مشخص‌شده به‌عنوان آرگومان گزینهٔ \fB\-W\fP را بررسی می‌کند. این رشته ابتدا با استفاده از نویسه‌های موجود در متغیر ویژهٔ .SM .B IFS به‌عنوان جداکننده، تفکیک می‌شود. این کار از نقل‌قول‌های پوسته درون رشته پیروی می‌کند تا سازوکاری فراهم کند که کلمات بتوانند شامل فرانویسه‌های پوسته یا نویسه‌های موجود در مقدار .SM .BR IFS باشند. سپس هر کلمه با استفاده از بسط قلاب، بسط مدک (تیلدا)، بسط پارامتر و متغیر، جایگزینی دستور و بسط حسابی، همان‌طور که در بالا تحت عنوان .SM .BR "بسط (EXPANSION)" توضیح داده شد، بسط می‌یابد. نتایج با استفاده از قواعد شرح داده شده در بالا ذیل \fBتفکیک کلمات (Word Splitting)\fP تفکیک می‌شوند. نتایج بسط با کلمهٔ در حال تکمیل به‌صورت پیشوندی تطبیق داده می‌شوند، و کلمات منطبق به تکمیل‌های ممکن تبدیل می‌گردند. .PP پس از ایجاد این تطابق‌ها، \fBbash\fP هر تابع یا دستور پوسته‌ای را که با گزینه‌های \fB\-F\fP و \fB\-C\fP مشخص شده باشد اجرا می‌کند. هنگامی که دستور یا تابع فراخوانی می‌شود، \fBbash\fP مقدارهایی را به متغیرهای .SM .BR COMP_LINE ، .SM .BR COMP_POINT ، .SM .BR COMP_KEY ، و .SM .B COMP_TYPE همان‌طور که در بالا ذیل \fBمتغیرهای پوسته (Shell Variables)\fP توضیح داده شد، تخصیص می‌دهد. اگر یک تابع پوسته در حال فراخوانی باشد، \fBbash\fP همچنین متغیرهای .SM .B COMP_WORDS و .SM .B COMP_CWORD را تنظیم می‌کند. هنگام فراخوانی تابع یا دستور، اولین آرگومان (\fB$1\fP) نام دستوری است که آرگومان‌های آن در حال تکمیل است، دومین آرگومان (\fB$2\fP) کلمهٔ در حال تکمیل است، و سومین آرگومان (\fB$3\fP) کلمهٔ پیش از کلمهٔ در حال تکمیل در خط فرمان فعلی است. هیچ فیلتر کردنی روی تکمیل‌های تولیدشده در برابر کلمهٔ در حال تکمیل انجام نمی‌شود؛ تابع یا دستور آزادی کامل در تولید تطابق‌ها دارد و نیازی نیست که آنها با پیشوندی از کلمه مطابقت داشته باشند. .PP هر تابعی که با \fB\-F\fP مشخص شده باشد ابتدا فراخوانی می‌شود. تابع ممکن است از هر یک از امکانات پوسته، از جمله دستورات توکار \fBcompgen\fP و \fBcompopt\fP که در ادامه شرح داده شده‌اند، برای تولید تطابق‌ها استفاده کند. این تابع باید تکمیل‌های ممکن را در متغیر آرایه‌ای .SM .B COMPREPLY قرار دهد، هر تکمیل در یک عنصر از آرایه. .PP سپس، هر دستوری که با گزینهٔ \fB\-C\fP مشخص شده باشد، در محیطی معادل جایگزینی دستور فراخوانی می‌شود. این دستور باید فهرستی از تکمیل‌ها را، هر کدام در یک خط، در خروجی استاندارد چاپ کند. یک بک‌اسلش در صورت لزوم خط جدید را اسکیپ (بی‌اثر) خواهد کرد. این موارد به مجموعهٔ تکمیل‌های ممکن اضافه می‌شوند. .PP پس از تولید تمام تکمیل‌های ممکن، \fBbash\fP هر فیلتری را که با گزینهٔ \fB\-X\fP مشخص شده باشد روی تکمیل‌های موجود در فهرست اعمال می‌کند. این فیلتر الگویی است همان‌طور که برای بسط نام مسیر استفاده می‌شود؛ یک \fB&\fP در الگو با متن کلمهٔ در حال تکمیل جایگزین می‌شود. یک \fB&\fP واقعی را می‌توان با یک بک‌اسلش اسکیپ کرد؛ بک‌اسلش پیش از اقدام به تطبیق حذف می‌شود. هر تکمیلی که با الگو مطابقت داشته باشد از فهرست حذف می‌شود. یک \fB!\fP در ابتدای الگو آن را نقیض می‌کند؛ در این حالت \fBbash\fP هر تکمیلی را که با الگو مطابقت نداشته باشد حذف می‌کند. اگر گزینهٔ پوستهٔ .B nocasematch فعال باشد، \fBbash\fP تطبیق را بدون در نظر گرفتن بزرگی و کوچکی حروف الفبا انجام می‌دهد. .PP در نهایت، تکمیل برنامه‌پذیر هر پیشوند و پسوند مشخص‌شده با گزینه‌های \fB\-P\fP و \fB\-S\fP را به ترتیب به هر مورد تکمیل اضافه می‌کند، و نتیجه را به عنوان فهرست تکمیل‌های احتمالی به \fBreadline\fP بازمی‌گرداند. .PP اگر اقداماتی که قبلاً اعمال شده‌اند هیچ تطابقی ایجاد نکنند، و گزینه \fB\-o dirnames\fP هنگام تعریف compspec به \fBcomplete\fP داده شده باشد، \fBbash\fP تکمیل نام دایرکتوری را امتحان می‌کند. .PP اگر گزینه \fB\-o plusdirs\fP هنگام تعریف compspec به \fBcomplete\fP داده شده باشد، \fBbash\fP تکمیل نام دایرکتوری را امتحان می‌کند و هرگونه تطابق را به مجموعه تکمیل‌های احتمالی اضافه می‌کند. .PP به‌طور پیش‌فرض، اگر یک compspec پیدا شود، هر آنچه که تولید کند به عنوان مجموعه کامل تکمیل‌های احتمالی به کد تکمیل بازگردانده می‌شود. تکمیل‌های پیش‌فرض \fBbash\fP و پیش‌فرض \fBreadline\fP برای تکمیل نام فایل غیرفعال می‌شوند. اگر گزینه \fB\-o bashdefault\fP هنگام تعریف compspec به \fBcomplete\fP داده شده باشد، و compspec هیچ تطابقی ایجاد نکند، \fBbash\fP تکمیل‌های پیش‌فرض خود را امتحان می‌کند. اگر compspec و (در صورت امتحان شدن) تکمیل‌های پیش‌فرض \fBbash\fP هیچ تطابقی ایجاد نکنند، و گزینه \fB\-o default\fP هنگام تعریف compspec به \fBcomplete\fP داده شده باشد، تکمیل برنامه‌پذیر، تکمیل پیش‌فرض \fBreadline\fP را انجام می‌دهد. .PP گزینه‌های داده‌شده به \fBcomplete\fP و \fBcompopt\fP می‌توانند نحوه رفتار \fBreadline\fP با تکمیل‌ها را کنترل کنند. به عنوان مثال، گزینه \fI\-o fullquote\fP به \fBreadline\fP می‌گوید که موارد تطابق را طوری نقل‌قول کند که گویی نام فایل هستند. برای جزئیات بیشتر به توضیحات مربوط به \fBcomplete\fP در زیر مراجعه کنید. .PP هنگامی که یک compspec مشخص می‌کند که خواستار تکمیل نام دایرکتوری است، توابع تکمیل برنامه‌پذیر، \fBreadline\fP را وادار می‌کنند تا به نام‌های تکمیل‌شده‌ای که پیوندهای نمادین به دایرکتوری‌ها هستند یک اسلش الحاق کند، که این تابع مقدار متغیر \fBreadline\fP به نام \fBmark\-directories\fP است، صرف‌نظر از تنظیم متغیر \fBreadline\fP به نام \fBmark-symlinked\-directories\fP. .PP پشتیبانی‌هایی برای تغییر پویا در تکمیل‌ها وجود دارد. این قابلیت بیشترین کاربرد را در ترکیب با یک تکمیل پیش‌فرض دارد که با \fBcomplete \-D\fP مشخص شده است. این امکان برای توابع پوسته‌ای که به عنوان توابع تکمیل اجرا می‌شوند وجود دارد که با بازگرداندن وضعیت خروج 124 نشان دهند که تکمیل باید دوباره امتحان شود. اگر یک تابع پوسته 124 را بازگرداند، و compspec مرتبط با دستوری را که تکمیل روی آن در حال امتحان است تغییر دهد (که به عنوان اولین آرگومان هنگام اجرای تابع ارسال می‌شود)، تکمیل برنامه‌پذیر از ابتدا مجدداً آغاز می‌شود و تلاش می‌کند تا یک compspec جدید برای آن دستور پیدا کند. از این ویژگی می‌توان برای ساخت پویا یک مجموعه تکمیل هنگام تلاش برای تکمیل استفاده کرد، به‌جای اینکه همه آنها یک‌باره بارگذاری شوند. .PP به عنوان مثال، با فرض وجود کتابخانه‌ای از compspecها، که هر کدام در فایلی متناظر با نام دستور نگهداری می‌شوند، تابع تکمیل پیش‌فرض زیر تکمیل‌ها را به‌صورت پویا بارگذاری می‌کند: .RS .EX .nf _completion_loader() { . \*"/etc/bash_completion.d/$1.sh\*" \c .if \n(LL<80n \{\ \e .br .ti +4n .\} >/dev/null 2>&1 && return 124 } complete \-D \-F _completion_loader \c .if \n(LL<80n \{\ \e .br .ti +4n .\} \-o bashdefault \-o default .fi .EE .RE .SH "تاریخچه (HISTORY)" هنگامی که گزینه .B \-o history برای دستور توکار .B set فعال باشد، پوسته دسترسی به \fIتاریخچه دستورات\fP، یعنی فهرست دستوراتی که پیش‌تر تایپ شده‌اند را فراهم می‌کند. مقدار متغیر .SM .B HISTSIZE به عنوان تعداد دستورات جهت ذخیره در فهرست تاریخچه استفاده می‌شود: پوسته متن آخرین دستورات به تعداد .SM .B HISTSIZE را ذخیره می‌کند (پیش‌فرض 500). پوسته هر دستور را قبل از بسط پارامتر و متغیر (به .SM .B EXPANSION در بالا مراجعه کنید) اما پس از انجام بسط تاریخچه، و با در نظر گرفتن مقادیر متغیرهای پوسته .SM .B HISTIGNORE و .SM .BR HISTCONTROL ، در فهرست تاریخچه ذخیره می‌کند. .PP هنگام راه‌اندازی، \fBbash\fP فهرست تاریخچه را با خواندن مدخل‌های تاریخچه از فایلی که نام آن در متغیر .SM .B HISTFILE مشخص شده است (پیش‌فرض .FN \*~/.bash_history ) مقداردهی اولیه می‌کند. به این فایل \fIفایل تاریخچه\fP (history file) گفته می‌شود. فایل تاریخچه در صورت نیاز کوتاه (truncate) می‌شود تا تعداد مدخل‌های تاریخچه موجود در آن از مقداری که توسط متغیر .SM .B HISTFILESIZE مشخص شده است بیشتر نباشد. اگر .SM .B HISTFILESIZE تنظیم نشده باشد، یا روی مقدار تهی (null)، یک مقدار غیرعددی، یا یک مقدار عددی کمتر از صفر تنظیم شده باشد، فایل تاریخچه کوتاه نمی‌شود. .PP هنگام خواندن فایل تاریخچه، خطوطی که با نویسه کامنت تاریخچه آغاز شده و بلافاصله پس از آن یک رقم آمده باشد، به عنوان برچسب زمانی برای خط تاریخچه بعدی تفسیر می‌شوند. این برچسب‌های زمانی بسته به مقدار متغیر .SM .B HISTTIMEFORMAT به صورت اختیاری نمایش داده می‌شوند. در صورت وجود، برچسب‌های زمانی تاریخچه مدخل‌های تاریخچه را از یکدیگر تفکیک می‌کنند و امکان مدخل‌های چندخطی را فراهم می‌سازند. .PP هنگامی که یک پوسته با تاریخچه فعال خارج می‌شود، \fBbash\fP آخرین .SM .B $HISTSIZE مدخل را از فهرست تاریخچه در .SM .BR $HISTFILE کپی می‌کند. اگر گزینه پوسته .B histappend فعال باشد (توضیحات مربوط به .B shopt را در بخش .SM .B "SHELL BUILTIN COMMANDS" در ادامه ببینید)، \fBbash\fP مدخل‌ها را به انتهای فایل تاریخچه می‌افزاید (append می‌کند)، در غیر این صورت فایل تاریخچه را رونویسی (overwrite) می‌کند. اگر .SM .B HISTFILE تنظیم نشده یا تهی باشد، یا اگر فایل تاریخچه غیرقابل نوشتن باشد، تاریخچه ذخیره نمی‌شود. پس از ذخیره تاریخچه، \fBbash\fP فایل تاریخچه را طبق آنچه در بالا توضیح داده شد کوتاه می‌کند تا خطوط آن بیشتر از .SM .B HISTFILESIZE نباشد. .PP اگر متغیر .SM .B HISTTIMEFORMAT تنظیم شده باشد، پوسته اطلاعات برچسب زمانی مرتبط با هر مدخل تاریخچه را درون فایل تاریخچه می‌نویسد، که با نویسه کامنت تاریخچه نشانه‌گذاری می‌شود تا برچسب‌های زمانی در میان نشست‌های پوسته حفظ شوند. این کار از نویسه کامنت تاریخچه برای تشخیص برچسب‌های زمانی از سایر خطوط تاریخچه استفاده می‌کند. همان‌طور که در بالا ذکر شد، هنگام استفاده از .SM .BR HISTTIMEFORMAT ، برچسب‌های زمانی مدخل‌های تاریخچه چندخطی را محدود و تفکیک می‌کنند. .PP دستور توکار .B fc (بخش .SM .B "SHELL BUILTIN COMMANDS" را در ادامه ببینید) بخشی از فهرست تاریخچه را لیست کرده یا ویرایش و دوباره اجرا می‌کند. دستور توکار .B history می‌تواند فهرست تاریخچه را نمایش دهد یا اصلاح کند و فایل تاریخچه را دستکاری نماید. هنگام استفاده از ویرایش خط فرمان، دستورات جستجو در هر حالت ویرایش در دسترس هستند که دسترسی به فهرست تاریخچه را فراهم می‌کنند. .PP پوسته امکان کنترل روی اینکه کدام دستورات در فهرست تاریخچه ذخیره شوند را فراهم می‌کند. متغیرهای .SM .B HISTCONTROL و .SM .B HISTIGNORE برای ذخیره تنها زیرمجموعه‌ای از دستورات وارد شده به کار می‌روند. اگر گزینه پوسته .B cmdhist فعال باشد، پوسته تلاش می‌کند تا هر خط از یک دستور چندخطی را در همان مدخل تاریخچه ذخیره کند، و در صورت نیاز نقطه‌ویرگول‌ها (semicolons) را برای حفظ صحت ساختاری (نحوی) اضافه می‌کند. گزینه پوسته .B lithist عملکرد \fBcmdhist\fP را با ذخیره کردن دستور همراه با نویسه‌های خط جدید جاسازی‌شده به‌جای نقطه‌ویرگول‌ها تغییر می‌دهد. برای اطلاعات بیشتر در مورد تنظیم و لغو تنظیم گزینه‌های پوسته، توضیحات دستور توکار .B shopt را در ادامه زیر عنوان .SM .B "SHELL BUILTIN COMMANDS" ببینید. .SH "بسط تاریخچه (HISTORY EXPANSION)" پوسته از قابلیت بسط تاریخچه پشتیبانی میکند که شبیه به بسط تاریخچه در .BR csh است. این بخش ویژگیهای نحوی موجود را شرح میدهد. .PP بسط تاریخچه بهطور پیشفرض برای پوستههای تعاملی فعال است، و میتوان آن را با استفاده از گزینهٔ .B +H در دستور توکار .B set غیرفعال کرد (بخش .SM .B "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" را در زیر ببینید). پوستههای غیرتعاملی بهطور پیشفرض بسط تاریخچه را انجام نمیدهند، اما میتوان آن را با .Q "set -H" فعال نمود. .PP بسطهای تاریخچه، کلماتی را از فهرست تاریخچه وارد جریان ورودی میکنند، که تکرار دستورات، درج آرگومانهای یک دستور قبلی در خط ورودی فعلی، یا تصحیح سریع خطاها در دستورات پیشین را آسان میسازد. .PP بسط تاریخچه بلافاصله پس از خوانده شدن یک خط کامل، پیش از آنکه پوسته آن را به کلمات تجزیه کند، و بهصورت جداگانه روی هر خط انجام میشود. پوسته تلاش میکند تا توابع بسط تاریخچه را از نقلقیلهایی که هنوز از خطوط قبلی برقرار هستند مطلع سازد. .PP این فرآیند در دو بخش صورت میگیرد. بخش اول تعیین این است که از کدام مدخل فهرست تاریخچه هنگام جایگزینی استفاده شود. بخش دوم انتخاب قسمتهایی از آن مدخل برای گنجاندن در مدخل فعلی است. .PP مدخل انتخابشده از تاریخچه، \fIرویداد\fP (\fIevent\fP) است، و قسمتهایی از آن مدخل که تحت عملیات قرار میگیرند، \fIکلمات\fP (\fIwords\fP) نامیده میشوند. \fIاصلاحکنندهها\fP (\fImodifiers\fP) گوناگونی برای دستکاری کلمات انتخابشده در دسترس هستند. مدخل به همان شیوهای که هنگام خواندن ورودی انجام میشود به کلمات تقسیم میگردد، بهطوریکه چندین کلمهٔ جداشده با \fIنویسهٔ متا\fP (\fImetacharacter\fP) که با نقلقولها احاطه شدهاند، یک کلمه بهحساب میآیند. \fIتعیینکنندهٔ رویداد\fP (\fIevent designator\fP) رویداد را انتخاب میکند، \fIتعیینکنندهٔ کلمه\fP (\fIword designator\fP) اختیاری کلمات را از رویداد برمیگزیند، و \fIاصلاحکنندههای\fP (\fImodifiers\fP) اختیاری مختلفی برای دستکاری کلمات انتخابشده موجود هستند. .PP بسطهای تاریخچه با ظهور نویسهٔ بسط تاریخچه آغاز میشوند، که بهطور پیشفرض \^\fB!\fP\^ است. بسطهای تاریخچه ممکن است در هر جای ورودی ظاهر شوند، اما تودرتو نمیشوند. .PP تنها بکاسلش (\^\fB\e\fP\^) و نقلقولهای تکی میتوانند نویسهٔ بسط تاریخچه را نقلقول (کوتیشنبندی) کنند، اما اگر نویسهٔ بسط تاریخچه بلافاصله پیش از نقلقول دوتایی پایانی در یک رشته با نقلقول دوتایی بیاید نیز بهعنوان نقلقولشده تلقی میشود. .PP چندین نویسه اگر بلافاصله پس از نویسهٔ بسط تاریخچه دیده شوند، حتی اگر بدون نقلقول باشد، مانع از بسط تاریخچه میشوند: فاصله (space)، تب (tab)، خط جدید (newline)، بازگشت به ابتدای خط (carriage return)، \fB=\fP، و دیگر نویسههای متای پوسته که در بالا تعریف شدهاند. .PP یک اختصار ویژه برای جایگزینی وجود دارد که زمانی فعال میشود که نویسهٔ \fIجایگزینی سریع\fP (\fIquick substitution\fP) (که در بالا ذیل .BR histchars توضیح داده شده است) اولین نویسه در خط باشد. این اختصار مدخل قبلی فهرست تاریخچه را با استفاده از تعیینکنندهٔ رویداد معادل با \fB!!\fP انتخاب میکند، و یک رشته را جایگزین رشتهٔ دیگری در آن مدخل مینماید. این ویژگی در ادامه ذیل \fBتعیینکنندههای رویداد (Event Designators)\fP شرح داده شده است. این تنها بسط تاریخچهای است که با نویسهٔ بسط تاریخچه شروع نمیشود. .PP چندین گزینهٔ پوسته که با دستور توکار .B shopt قابل تنظیم هستند، رفتار بسط تاریخچه را تغییر میدهند (توضیحات مربوط به دستور توکار .B shopt را در زیر ببینید). اگر گزینهٔ پوستهٔ .B histverify فعال باشد و از .B readline استفاده شود، جایگزینیهای تاریخچه بلافاصله به تجزیهکنندهٔ پوسته تحویل داده نمیشوند. در عوض، خط بسطیافته برای تغییرات بیشتر مجدداً در بافر ویرایش .B readline بارگذاری میشود. اگر از .B readline استفاده شود و گزینهٔ پوستهٔ .B histreedit فعال باشد، یک جایگزینی تاریخچهٔ ناموفق برای اصلاح، دوباره در بافر ویرایش .B readline بارگذاری میگردد. .PP گزینهٔ .B \-p در دستور توکار .B history نشان میدهد که بسط تاریخچه قبل از اعمال چه کاری انجام خواهد داد. گزینهٔ .B \-s در دستور توکار .B history دستورات را بدون اجرای واقعی به انتهای فهرست تاریخچه اضافه میکند، بهطوری که برای فراخوانیهای بعدی در دسترس باشند. .PP پوسته امکان کنترل کاراکترهای مختلف مورد استفاده توسط سازوکار بسط تاریخچه را فراهم میکند (توضیحات .B histchars در بالا زیر بخش .BR "متغیرهای پوسته (Shell Variables)" را ببینید). پوسته هنگام نوشتن فایل تاریخچه، از کاراکتر توضیح تاریخچه برای علامتگذاری مهر زمانی تاریخچه استفاده میکند. .SS تعیینکنندههای رخداد (Event Designators) یک تعیینکنندهٔ رخداد ارجاعی به یک مدخل در فهرست تاریخچه است. تعیینکنندهٔ رخداد شامل بخشی از کلمه است که با کاراکتر بسط تاریخچه آغاز میشود و با تعیینکنندهٔ کلمه (در صورت وجود) یا انتهای کلمه پایان میپذیرد. مگر اینکه ارجاع مطلق باشد، رخدادها نسبت به موقعیت فعلی در فهرست تاریخچه سنجیده میشوند. .PP .PD 0 .TP .B ! آغاز یک جایگزینی تاریخچه، مگر زمانی که به دنبال آن یک .BR blank ، خط جدید، carriage return، =، یا هنگامی که گزینهٔ پوسته \fBextglob\fP با استفاده از دستور توکار \fBshopt\fP فعال شده باشد، ( بیاید. .TP .B !\fIn\fP ارجاع به مدخل شمارهٔ .IR n در فهرست تاریخچه. .TP .B !\-\fIn\fP ارجاع به مدخل فعلی منهای .IR n . .TP .B !! ارجاع به مدخل قبلی. این مترادفی برای .Q !\-1 است. .TP .B !\fIstring\fP ارجاع به تازه‌ترین دستوری قبل از موقعیت فعلی در فهرست تاریخچه که با .IR string آغاز میشود. .TP .B !?\fIstring\fR\fB[?]\fP ارجاع به تازه‌ترین دستوری قبل از موقعیت فعلی در فهرست تاریخچه که حاوی .IR string است. در صورتی که بلافاصله پس از .I string یک خط جدید بیاید، \fB?\fP انتهایی ممکن است حذف شود. اگر \fIstring\fP درج نشود، از رشتهٔ آخرین جستجو استفاده میشود؛ اگر جستجوی قبلی وجود نداشته باشد، خطا محسوب میشود. .TP .B \d\s+2\*^\s-2\u\fIstring1\fP\d\s+2\*^\s-2\u\fIstring2\fP\d\s+2\*^\s-2\u جایگزینی سریع. تکرار دستور قبلی با جایگزین کردن .I string1 با .IR string2 . معادل با .Q !!:s\d\s+2\*^\s-2\u\fIstring1\fP\d\s+2\*^\s-2\u\fIstring2\fP\d\s+2\*^\s-2\u (بخش \fBتغییردهندهها (Modifiers)\fP در زیر را ببینید). .TP .B !# کل خط فرمانی که تاکنون تایپ شده است. .PD .SS تعیینکنندههای کلمه (Word Designators) تعیینکنندههای کلمه برای انتخاب کلمات مورد نظر از رخداد استفاده میشوند. آنها اختیاری هستند؛ اگر تعیینکنندهٔ کلمه ارائه نشود، بسط تاریخچه از کل رخداد استفاده میکند. یک .B : مشخصهٔ رخداد را از تعیینکنندهٔ کلمه جدا میکند. اگر تعیینکنندهٔ کلمه با یک .BR \*^ ، .BR $ ، .BR * ، .BR \- ، یا .BR % شروع شود، ممکن است حذف گردد. کلمات از ابتدای خط شمارهگذاری میشوند، بهطوری که کلمهٔ نخست با 0 (صفر) نشان داده میشود. کلمات در حالی که با یک فاصله از یکدیگر جدا شدهاند، در خط فعلی درج میشوند. .PP .PD 0 .TP .B 0 (zero) کلمه صفرم. برای پوسته، این کلمه همان کلمه دستور است. .TP .I n کلمه \fIn\fPام. .TP .B \*^ اولین آرگومان: کلمه ۱. .TP .B $ آخرین کلمه. این معمولاً آخرین آرگومان است، اما اگر تنها یک کلمه در خط وجود داشته باشد، به کلمه صفرم بسط می‌یابد. .TP .B % اولین کلمه تطبیق‌یافته توسط جدیدترین جستجوی .Q ?\fIstring\fP? ، به شرطی که رشته جستجو با نویسه‌ای آغاز شود که بخشی از یک کلمه است. به‌طور پیش‌فرض، جستجوها از انتهای هر خط آغاز شده و به سمت ابتدا پیش می‌روند، بنابراین اولین کلمه منطبق‌شده، نزدیک‌ترین کلمه به انتهای خط است. .TP .I x\fB\-\fPy محدوده‌ای از کلمات؛ .Q \-\fIy\fP حالت اختصاری .Q 0\-\fIy\fP است. .TP .B * همه کلمات به جز کلمه صفرم. این مترادفی برای .Q \fI1\-$\fP است. استفاده از .B * اگر فقط یک کلمه در رخداد وجود داشته باشد خطا نیست؛ در این حالت به یک رشته خالی بسط می‌یابد. .TP .B x* حالت اختصاری \fIx\-$\fP است. .TP .B x\- مانند \fBx*\fP حالت اختصاری \fIx\-$\fP است، اما کلمه آخر را حذف می‌کند. اگر \fBx\fP وجود نداشته باشد، مقدار پیش‌فرض آن 0 است. .PD .PP اگر یک تعیین‌کننده کلمه بدون مشخص کردن رخداد ارائه شود، دستور قبلی به‌عنوان رخداد استفاده می‌شود که معادل \fB!!\fP است. .SS اصلاح‌کننده‌ها (Modifiers) پس از تعیین‌کننده اختیاری کلمه، بسط می‌تواند شامل دنباله‌ای از یک یا چند اصلاح‌کننده زیر باشد که پیش از هر یک، یک .Q : قرار می‌گیرد. این‌ها کلمه یا کلمات انتخاب‌شده از رخداد تاریخچه را اصلاح یا ویرایش می‌کنند. .PP .PD 0 .TP .B h بخش انتهایی مسیر (trailing pathname component) را حذف کرده و فقط سر (head) را باقی می‌گذارد. .TP .B t تمام بخش‌های ابتدایی مسیر را حذف کرده و فقط دم (tail) را باقی می‌گذارد. .TP .B r پسوند انتهایی به شکل \fI.xxx\fP را حذف کرده و نام پایه (basename) را باقی می‌گذارد. .TP .B e همه چیز را به جز پسوند انتهایی حذف می‌کند. .TP .B p دستور جدید را چاپ می‌کند ولی آن را اجرا نمی‌کند. .TP .B q کلمات جایگزین‌شده را نقل‌قول می‌کند و مانع از جایگزینی‌های بعدی می‌شود. .TP .B x کلمات جایگزین‌شده را مانند .BR q نقل‌قول می‌کند، اما آن‌ها را در محل نویسه‌های .B خالی (blanks) و خطوط جدید به کلمات مجزا می‌شکند. اصلاح‌کننده‌های \fBq\fP و \fBx\fP مانعة‌الجمع هستند؛ بسط از آخرین موردی که ارائه شده استفاده می‌کند. .TP .B s/\fIold\fP/\fInew\fP/ مقدار .I new را به جای اولین رخداد .I old در خط رخداد جایگزین می‌کند. هر نویسه‌ای می‌تواند به‌عنوان جداکننده به جای / استفاده شود. اگر جداکننده پایانی آخرین نویسه خط رخداد باشد، اختیاری است. یک تک‌بک‌اسلش جداکننده را در .I old و .IR new نقل‌قول (اسکیپ) می‌کند. اگر & در .IR new ظاهر شود، با .IR old جایگزین می‌گردد. یک تک‌بک‌اسلش نویسه & را نقل‌قول می‌کند. اگر .I old تهی (null) باشد، برابر با آخرین .I old جایگزین‌شده قرار می‌گیرد، یا اگر پیش از این هیچ جایگزینی تاریخچه‌ای صورت نگرفته باشد، برابر با آخرین .I string در یک جستجوی .B !?\fIstring\fP[?] قرار می‌گیرد. اگر .I new تهی باشد، هر .I old منطبق حذف می‌شود. .TP .B & جایگزینی قبلی را تکرار می‌کند. .TP .B g باعث می‌شود تغییرات بر روی کل خط رخداد (event line) اعمال شوند. این اصلاح‌گر در ترکیب با .Q \fB:s\fP (مانند .Q \fB:gs/\fIold\fP/\fInew\fP/\fR ) یا .Q \fB:&\fP استفاده می‌شود. در صورت استفاده با .Q \fB:s\fP ، می‌توان از هر جداکننده‌ای به‌جای / استفاده کرد، و اگر جداکننده پایانی آخرین نویسه خط رخداد باشد، اختیاری خواهد بود. از \fBa\fP می‌توان به‌عنوان مترادفی برای \fBg\fP استفاده کرد. .TP .B G اصلاح‌گر بعدی .Q \fBs\fP یا .Q \fB&\fP را یک‌بار برای هر کلمه در خط رخداد اعمال می‌کند. .PD .SH "دستورات داخلی پوسته (SHELL BUILTIN COMMANDS)" .\" start of bash_builtins .zZ .PP مگر در مواردی که خلاف آن ذکر شده باشد، هر دستور توکار مستندشده در این بخش که گزینه‌هایی با پیشوند .B \- می‌پذیرد، .B \-\- را نیز برای مشخص کردن پایان گزینه‌ها می‌پذیرد. دستورات توکار \fB:\fP، \fBtrue\fP، \fBfalse\fP، و \fBtest\fP/\fB[\fP هیچ گزینه‌ای را نمی‌پذیرند و با \fB\-\-\fP رفتار ویژه‌ای ندارند. دستورات توکار \fBexit\fP، \fBlogout\fP، \fBreturn\fP، \fBbreak\fP، \fBcontinue\fP، \fBlet\fP، و \fBshift\fP آرگومان‌هایی را که با \fB\-\fP شروع می‌شوند بدون نیاز به \fB\-\-\fP پذیرفته و پردازش می‌کنند. سایر دستورات توکار که آرگومان می‌پذیرند اما صراحتاً به‌عنوان پذیرنده گزینه مشخص نشده‌اند، آرگومان‌هایی را که با \fB\-\fP شروع می‌شوند به‌عنوان گزینه‌های نامعتبر تفسیر می‌کنند و برای جلوگیری از این تفسیر به \fB\-\-\fP نیاز دارند. .PP .PD 0 .TP \fB:\fP [\fIarguments\fP] .PD بدون اثر؛ این دستور کاری جز بسط .I arguments و انجام هرگونه تغییر مسیر مشخص‌شده انجام نمی‌دهد. وضعیت بازگشتی صفر است. .TP \fB\&.\&\fP [\fB\-p\fP \fIpath\fP] \fIfilename\fP [\fIarguments\fP] .PD 0 .TP \fBsource\fP [\fB\-p\fP \fIpath\fP] \fIfilename\fP [\fIarguments\fP] .PD دستور \fB\&.\&\fP (\fBsource\fP) دستورات را از .I filename در محیط پوسته فعلی خوانده و اجرا می‌کند و وضعیت خروج آخرین دستور اجراشده از .IR filename را بازمی‌گرداند. .IP اگر \fIfilename\fP حاوی اسلش نباشد، \fB\&.\&\fP به جستجوی آن می‌پردازد. اگر گزینه \fB\-p\fP داده شده باشد، \fB\&.\&\fP با \fIpath\fP مانند فهرستی از دایرکتوری‌ها که با دونقطه از هم جدا شده‌اند رفتار می‌کند تا \fIfilename\fP را بیابد؛ در غیر این صورت، \fB\&.\&\fP از ورودی‌های .SM .B PATH برای یافتن دایرکتوری حاوی .IR filename استفاده می‌کند. نیازی نیست که \fIfilename\fP قابل اجرا باشد. هنگامی که \fBbash\fP در حالت posix نیست، چنانچه \fIfilename\fP در .SM .BR PATH یافت نشود، دایرکتوری فعلی را جستجو می‌کند، اما اگر \fB\-p\fP داده شده باشد، دایرکتوری فعلی را جستجو نمی‌کند. اگر گزینه .B sourcepath برای دستور توکار .B shopt غیرفعال شده باشد، \fB\&.\&\fP متغیر .SM .BR PATH را جستجو نمی‌کند. .IP اگر هرگونه \fIarguments\fP عرضه شود، هنگام اجرای \fIfilename\fP به پارامترهای مکانی تبدیل می‌شوند. در غیر این صورت، پارامترهای مکانی بدون تغییر می‌مانند. .IP اگر گزینه \fB\-T\fP فعال باشد، \fB.\fP هرگونه تله (trap) روی \fBDEBUG\fP را به ارث می‌برد؛ در غیر این صورت، هر رشته تله \fBDEBUG\fP پیرامون فراخوانی \fB.\fP ذخیره و سپس بازیابی می‌شود، و \fB.\fP هنگام اجرا، تله \fBDEBUG\fP را لغو می‌کند. اگر \fB\-T\fP تنظیم نشده باشد و فایل فراخوانی‌شده (sourced) تله \fBDEBUG\fP را تغییر دهد، مقدار جدید پس از اتمام \fB.\fP باقی می‌ماند. وضعیت بازگشتی، وضعیت آخرین دستور اجراشده از \fIfilename\fP است (اگر دستوری اجرا نشود، 0)، و چنانچه .I filename یافت نشود یا خوانده نشود، مقداری غیرصفر خواهد بود. .TP \fBalias\fP [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] .\|.\|.] بدون هیچ آرگومانی یا همراه با گزینهٔ .B \-p دستور \fBalias\fP فهرست نام‌های مستعار را در قالب \fBalias\fP \fIname\fP=\fIvalue\fP در خروجی استاندارد چاپ می‌کند. هنگامی که آرگومان‌هایی ارائه شوند، برای هر \fIname\fP که \fIvalue\fP آن مشخص شده باشد یک نام مستعار تعریف می‌شود. وجود یک فاصله در انتهای \fIvalue\fP باعث می‌شود کلمهٔ بعدی نیز در هنگام بسط نام مستعار طی تجزیهٔ دستور، جهت جایگزینی نام مستعار بررسی شود. به ازای هر \fIname\fP در فهرست آرگومان‌ها که هیچ مقداری (\fIvalue\fP) برای آن ارائه نشده باشد، نام و مقدار نام مستعارِ \fIname\fP چاپ می‌شود. \fBalias\fP مقدار درست (true) برمی‌گرداند مگر اینکه نامی (\fIname\fP) بدون =\fIvalue\fP متناظر ارائه شده باشد که هیچ نام مستعاری برای آن تعریف نشده باشد. .TP \fBbg\fP [\fIjobspec\fP .\|.\|.] هر کار معلق‌شدهٔ \fIjobspec\fP را در پس‌زمینه از سر می‌گیرد، گویی با .BR & آغاز شده باشد. اگر .I jobspec ارائه نشود، پوسته از مفهوم «کار فعلی» (\fIcurrent job\fP) خود استفاده می‌کند. .B bg .I jobspec مقدار 0 برمی‌گرداند، مگر آنکه در وضعیتی اجرا شود که مدیریت کارها غیرفعال باشد، یا در صورتی که با مدیریت کارهای فعال اجرا شود، هر یک از \fIjobspec\fPهای مشخص‌شده یافت نشود یا بدون مدیریت کارها آغاز شده باشد. .TP \fBbind\fP [\fB\-m\fP \fIkeymap\fP] [\fB\-lsvSVX\fP] .PD 0 .TP \fBbind\fP [\fB\-m\fP \fIkeymap\fP] [\fB\-q\fP \fIfunction\fP] [\fB\-u\fP \fIfunction\fP] [\fB\-r\fP \fIkeyseq\fP] .TP \fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fB\-f\fP \fIfilename\fP .TP \fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fB\-x\fP \fIkeyseq\fP[:] \fIshell\-command\fP .TP \fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fIkeyseq\fP:\fIfunction\-name\fP .TP \fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fB\-p\fP|\fB\-P\fP [\fIreadline\-command\fP] .TP \fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fIkeyseq\fP:\fIreadline\-command\fP .TP \fBbind\fP \fIreadline-command-line\fP .PD پیوندهای کنونی کلید و توابع .B readline را نمایش می‌دهد، یک توالی کلید را به یک تابع یا ماکروی .B readline یا به یک دستور پوسته پیوند می‌دهد، یا یک متغیر .B readline را مقداردهی می‌کند. هر آرگومان غیرگزینه‌ای یک پیوند کلید یا دستور است همان‌گونه که در فایل راه‌اندازی .B readline مانند .IR .inputrc ظاهر می‌شود، اما هر پیوند یا دستور باید به صورت یک آرگومان جداگانه ارسال شود؛ مانند: \*'\*"\eC\-x\eC\-r\*": re\-read\-init\-file\*'. در توضیحات زیر، خروجی‌هایی که قابلیت خوانده‌شدن مجدد دارند، در قالب دستوراتی قالب‌بندی شده‌اند که در فایل راه‌اندازی .B readline ظاهر می‌شوند یا به صورت آرگومان‌های مجزا به یک دستور .B bind ارائه می‌گردند. گزینه‌ها در صورت ارائه، معانی زیر را دارند: .RS .PD 0 .TP .B \-m \fIkeymap\fP استفاده از .I keymap به عنوان نگاشت کلیدی که باید تحت تأثیر پیوندهای بعدی قرار گیرد. نام‌های قابل قبول برای .I keymap عبارتند از: \fIemacs, emacs\-standard, emacs\-meta, emacs\-ctlx, vi, vi\-move, vi\-command\fP و .IR vi\-insert . \fIvi\fP معادل \fIvi\-command\fP است (\fIvi\-move\fP نیز یک مترادف است)؛ \fIemacs\fP معادل \fIemacs\-standard\fP است. .TP .B \-l فهرست کردن نام‌های تمام توابع \fBreadline\fP. .TP .B \-p نمایش نام توابع و پیوندهای \fBreadline\fP به شیوه‌ای که بتوان آن‌ها را به عنوان یک آرگومان برای دستور بعدی \fBbind\fP یا در فایل راه‌اندازی \fBreadline\fP استفاده کرد. اگر پس از پردازش گزینه‌ها آرگومان‌هایی باقی بماند، \fBbind\fP با آن‌ها به عنوان نام دستورات \fBreadline\fP رفتار کرده و خروجی را به آن نام‌ها محدود می‌کند. .TP .B \-P فهرست نام‌های توابع و انتساب‌های کنونی \fBreadline\fP را نمایش می‌دهد. اگر پس از پردازش گزینه‌ها، آرگومان‌هایی باقی بماند، \fBbind\fP با آن‌ها به‌عنوان نام دستورات \fBreadline\fP رفتار کرده و خروجی را به آن نام‌ها محدود می‌کند. .TP .B \-s توالی کلیدهای \fBreadline\fP که به ماکروها منتسب شده‌اند و رشته‌هایی که تولید می‌کنند را به گونه‌ای نمایش می‌دهد که بتوان از آن‌ها به‌عنوان آرگومان برای یک دستور بعدی \fBbind\fP یا در یک فایل راه‌اندازی \fBreadline\fP استفاده کرد. .TP .B \-S توالی کلیدهای \fBreadline\fP منتسب‌شده به ماکروها و رشته‌هایی که تولید می‌کنند را نمایش می‌دهد. .TP .B \-v نام‌ها و مقادیر متغیرهای \fBreadline\fP را به گونه‌ای نمایش می‌دهد که بتوان از آن‌ها به‌عنوان آرگومان برای یک دستور بعدی \fBbind\fP یا در یک فایل راه‌اندازی \fBreadline\fP استفاده کرد. .TP .B \-V فهرست نام‌ها و مقادیر کنونی متغیرهای \fBreadline\fP را نمایش می‌دهد. .TP .B \-f \fIfilename\fP انتساب‌های کلیدها را از \fIfilename\fP می‌خواند. .TP .B \-q \fIfunction\fP توالی کلیدهایی که \fIfunction\fP نام‌برده‌شدهٔ \fBreadline\fP را فرامی‌خوانند، نمایش می‌دهد. .TP .B \-u \fIfunction\fP تمام توالی کلیدهای منتسب‌شده به \fIfunction\fP نام‌برده‌شدهٔ \fBreadline\fP را لغو انتساب می‌کند. .TP .B \-r \fIkeyseq\fP هرگونه انتساب کنونی برای \fIkeyseq\fP را حذف می‌کند. .TP .B \-x \fIkeyseq\fP[: ]\fIshell\-command\fP باعث می‌شود هر زمان که \fIkeyseq\fP وارد شد، \fIshell\-command\fP اجرا شود. جداکننده میان \fIkeyseq\fP و \fIshell\-command\fP یا فاصله خالی است یا دونقطه که اختیاری به دنبال آن فاصله خالی می‌آید. اگر جداکننده فاصله خالی باشد، \fIshell\-command\fP باید در نقل‌قول دوگانه (double quotes) قرار گیرد و \fBreadline\fP پیش از ذخیره‌سازی، هرگونه فرار با بک‌اسلشِ ویژهٔ خود را در \fIshell\-command\fP بسط می‌دهد. اگر جداکننده دونقطه باشد، قرار دادن در نقل‌قول دوگانه اختیاری است و \fBreadline\fP رشته دستور را پیش از ذخیره‌سازی بسط نمی‌دهد. از آنجا که کل عبارت انتساب کلید باید یک آرگومان واحد باشد، باید درون نقل‌قول تکی (single quotes) محصور شود. هنگامی که \fIshell\-command\fP اجرا می‌شود، پوسته متغیر .SM .B READLINE_LINE را برابر با محتویات بافر خط \fBreadline\fP و متغیرهای .SM .B READLINE_POINT و .SM .B READLINE_MARK را به ترتیب برابر با مکان کنونی نقطه درج و نقطه درج ذخیره‌شده (علامت یا mark) قرار می‌دهد. پوسته هر آرگومان عددی را که کاربر ارائه کرده باشد به متغیر .SM .B READLINE_ARGUMENT اختصاص می‌دهد. اگر آرگومانی وجود نداشته باشد، آن متغیر مقداردهی نمی‌شود. اگر دستور اجراشده مقدار هر یک از .SM .BR READLINE_LINE ، .SM .BR READLINE_POINT ، یا .SM .BR READLINE_MARK را تغییر دهد، آن مقادیر جدید در وضعیت ویرایش اعمال خواهند شد. .TP .B \-X تمام توالی کلیدهای منتسب‌شده به دستورات پوسته و دستورات مرتبط را در قالبی فهرست می‌کند که بتواند مجدداً به‌عنوان آرگومان برای یک دستور بعدی \fBbind\fP استفاده شود. .PD .PP مقدار بازگشتی 0 است مگر اینکه یک گزینه ناشناخته ارائه شود یا خطایی رخ دهد. .RE .TP \fBbreak\fP [\fIn\fP] خروج از درون یک حلقه .BR for ، .BR while ، .BR until ، یا .BR select . اگر \fIn\fP مشخص شده باشد، \fBbreak\fP از \fIn\fP حلقه دربرگیرنده خارج می‌شود. .I n باید \(>= 1 باشد. اگر .I n بزرگ‌تر از تعداد حلقه‌های دربرگیرنده باشد، از تمام حلقه‌های دربرگیرنده خارج می‌شود. مقدار بازگشتی 0 است مگر اینکه \fIn\fP بزرگ‌تر یا مساوی 1 نباشد. .TP \fBbuiltin\fP \fIshell\-builtin\fP [\fIarguments\fP] دستور توکار پوسته مشخص‌شده با \fIshell\-builtin\fP را با ارسال .IR arguments به آن اجرا کرده و وضعیت خروج آن را برمی‌گرداند. این قابلیت هنگام تعریف تابعی که نام آن هم‌نام با یکی از دستورات توکار پوسته است، جهت حفظ کارایی دستور توکار در درون تابع بسیار کاربردی است. دستور توکار \fBcd\fP معمولاً به این شکل بازتعریف می‌شود. اگر .I shell\-builtin یک دستور توکار پوسته نباشد، وضعیت بازگشتی نادرست (false) خواهد بود. .TP \fBcaller\fP [\fIexpr\fP] بافتار (context) هر فراخوانی زیرروال فعال (یک تابع پوسته یا اسکریپت اجرا شده با دستورات توکار \fB.\fP یا \fBsource\fP) را بازمی‌گرداند. .IP بدون \fIexpr\fP، دستور \fBcaller\fP شماره خط و نام فایل مبدأ فراخوانی زیرروال جاری را نمایش می‌دهد. اگر یک عدد صحیح غیرمنفی به عنوان \fIexpr\fP ارائه شود، \fBcaller\fP شماره خط، نام زیرروال و فایل مبدأ متناظر با آن موقعیت را در پشته فراخوانی اجرای فعلی نمایش می‌دهد. از این اطلاعات اضافی می‌توان به عنوان مثال برای چاپ ردیابی پشته (stack trace) استفاده کرد. فریم جاری، فریم 0 است. .IP مقدار بازگشتی 0 است مگر اینکه پوسته در حال اجرای یک فراخوانی زیرروال نباشد یا \fIexpr\fP متناظر با موقعیت معتبری در پشته فراخوانی نباشد. .TP .PD 0 \fBcd\fP [\fB\-L\fP] [\fB\-@\fP] [\fIdir\fP] .TP \fBcd\fP \fB\-P\fP [\fB\-e\fP] [\fB\-@\fP] [\fIdir\fP] .PD دایرکتوری جاری را به \fIdir\fP تغییر می‌دهد. اگر \fIdir\fP ارائه نشود، مقدار متغیر پوسته‌ای .SM .B HOME به عنوان \fIdir\fP استفاده می‌شود. اگر متغیر .SM .B CDPATH وجود داشته باشد، و \fIdir\fP با یک اسلش (/) شروع نشود، \fBcd\fP از آن به عنوان یک مسیر جستجو استفاده می‌کند: پوسته برای یافتن \fIdir\fP، هر نام دایرکتوری درون .SM .B CDPATH را جستجو می‌کند. نام‌های دایرکتوری جایگزین در .SM .B CDPATH با یک دونقطه (:) جدا می‌شوند. یک نام دایرکتوری تهی (null) در .SM .B CDPATH همان دایرکتوری جاری است، یعنی .Q .\& . .IP گزینه .B \-P باعث می‌شود \fBcd\fP با حل کردن پیوندهای نمادین در حین پیمایش \fIdir\fP و پیش از پردازش موارد .FN .\|.\& در \fIdir\fP، از ساختار فیزیکی دایرکتوری استفاده کند (همچنین گزینه .B \-P را در دستور توکار .B set ببینید). .IP گزینه .B \-L دستور \fBcd\fP را ملزم می‌کند که پیوندهای نمادین را با حل کردن پیوند پس از پردازش موارد .FN .\|.\& در \fIdir\fP دنبال کند. اگر .FN .\|.\& در \fIdir\fP ظاهر شود، \fBcd\fP آن را با حذف مؤلفه بلافاصله پیشین نام مسیر از \fIdir\fP تا یک اسلش یا ابتدای \fIdir\fP پردازش می‌کند، و بررسی می‌کند بخشی از \fIdir\fP که تا آن نقطه پردازش کرده است، پس از حذف مؤلفه نام مسیر همچنان یک نام دایرکتوری معتبر باشد. اگر نام دایرکتوری معتبری نباشد، \fBcd\fP وضعیتی غیرصفر بازمی‌گرداند. اگر هیچ‌کدام از گزینه‌های .B \-L یا .B \-P ارائه نشوند، .B cd طوری رفتار می‌کند که گویی گزینه .B \-L ارائه شده است. .IP اگر گزینه .B \-e به همراه .BR \-P ارائه شود، و \fBcd\fP نتواند پس از یک تغییر موفقیت‌آمیز دایرکتوری، دایرکتوری کاری جاری را با موفقیت تعیین کند، وضعیتی غیرصفر بازمی‌گرداند. .IP در سیستم‌هایی که از آن پشتیبانی می‌کنند، گزینه \fB\-@\fP ویژگی‌های گسترش‌یافته (extended attributes) مرتبط با یک فایل را به صورت یک دایرکتوری ارائه می‌دهد. .IP یک شناسه به صورت .B \- پیش از اقدام به تغییر دایرکتوری، به .SM .B $OLDPWD تبدیل می‌شود. .IP اگر \fBcd\fP از یک نام دایرکتوری غیرخالی از .SM .BR CDPATH استفاده کند، یا اگر \fB\-\fP اولین شناسه باشد و تغییر دایرکتوری با موفقیت انجام شود، \fBcd\fP نام مسیر مطلق دایرکتوری کاری جدید را در خروجی استاندارد می‌نویسد. .IP اگر تغییر دایرکتوری موفقیت‌آمیز باشد، \fBcd\fP مقدار متغیر محیطی \fBPWD\fP را برابر با نام دایرکتوری جدید قرار می‌دهد، و متغیر محیطی \fBOLDPWD\fP را برابر با مقدار دایرکتوری کاری جاری پیش از تغییر تنظیم می‌کند. .IP اگر دایرکتوری با موفقیت تغییر یابد، مقدار بازگشتی درست (true) است؛ در غیر این صورت نادرست (false) خواهد بود. .TP \fBcommand\fP [\fB\-pVv\fP] \fIcommand\fP [\fIarg\fP .\|.\|.] دستور توکار \fBcommand\fP، دستور .I command را به همراه .I arg\fRها\fP با نادیده گرفتن و صرف‌نظر از جستجوی معمول توابع پوسته برای \fIcommand\fP اجرا می‌کند. تنها دستورات توکار یا دستوراتی با نام \fIcommand\fP که در .SM .B PATH یافت شوند اجرا می‌گردند. اگر گزینهٔ .B \-p داده شود، جستجو برای .I command با استفاده از مقدار پیش‌فرض .SM .B PATH انجام می‌شود که یافتن تمام ابزارهای استاندارد را تضمین می‌کند. .IP اگر هر یک از گزینه‌های .B \-V یا .B \-v مشخص شوند، \fBcommand\fP توصیفی از .I command چاپ می‌کند. گزینهٔ .B \-v یک کلمهٔ منفرد را نمایش می‌دهد که دستور یا نام فایلِ استفاده‌شده برای فراخوانیِ .I command را نشان می‌دهد؛ گزینهٔ .B \-V توصیف مفصل‌تری تولید می‌کند. .IP اگر گزینهٔ .B \-V یا .B \-v مشخص شود، وضعیت خروج در صورتی که .I command یافت شده باشد صفر، و در غیر این صورت غیرصفر است. اگر هیچ‌کدام از این گزینه‌ها مشخص نشده باشند و خطایی رخ دهد یا .I command پیدا نشود، وضعیت خروج ۱۲۷ است. در غیر این صورت، وضعیت خروج دستور توکار .B command همان وضعیت خروج .I command خواهد بود. .TP \fBcompgen\fP [\fB\-V\fP \fIvarname\fP] [\fIoption\fP] [\fIword\fP] تطابق‌های ممکن برای تکمیلِ \fIword\fP را با توجه به \fIoption\fPها، که می‌توانند هر گزینه‌ای باشند که توسط دستور توکار .B complete پذیرفته می‌شود، به استثنای .BR \-p ، .BR \-r ، .BR \-D ، .BR \-E و .BR \-I ، تولید می‌کند و تطابق‌ها را در خروجی استاندارد می‌نویسد. .IP اگر گزینهٔ \fB\-V\fP مشخص شود، \fBcompgen\fP تکمیل‌های تولیدشده را به جای نوشتن در خروجی استاندارد، در متغیر آرایهٔ اندیس‌دارِ \fIvarname\fP ذخیره می‌کند. .IP هنگام استفاده از گزینه‌های \fB\-F\fP یا \fB\-C\fP، متغیرهای گوناگون پوسته که توسط امکانات تکمیل برنامه‌پذیر تنظیم می‌شوند، اگرچه در دسترس خواهند بود، ولی دارای مقادیر مفیدی نیستند. .IP تطابق‌ها به همان شیوه‌ای تولید می‌شوند که گویی کد تکمیل برنامه‌پذیر آن‌ها را مستقیماً از یک مشخصات تکمیل با همان فلگ‌ها تولید کرده است. اگر \fIword\fP مشخص شده باشد، تنها آن دسته از تکمیل‌هایی که با \fIword\fP مطابقت دارند نمایش داده شده یا ذخیره می‌شوند. .IP مقدار بازگشتی درست (true) است، مگر اینکه یک گزینهٔ نامعتبر داده شود، یا هیچ تطابقی تولید نشده باشد. .TP \fBcomplete\fP [\fB\-abcdefgjksuv\fP] [\fB\-o\fP \fIcomp-option\fP] [\fB\-DEI\fP] [\fB\-A\fP \fIaction\fP] .br [\fB\-G\fP \fIglobpat\fP] [\fB\-W\fP \fIwordlist\fP] [\fB\-F\fP \fIfunction\fP] [\fB\-C\fP \fIcommand\fP] .br [\fB\-X\fP \fIfilterpat\fP] [\fB\-P\fP \fIprefix\fP] \ [\fB\-S\fP \fIsuffix\fP] \fIname\fP [\fIname\fP .\|.\|.] .PD 0 .TP \fBcomplete\fP \fB\-pr\fP [\fB\-DEI\fP] [\fIname\fP .\|.\|.] .PD مشخص می‌کند که آرگومان‌های هر \fIname\fP چگونه باید تکمیل شوند. .IP اگر گزینهٔ \fB\-p\fP داده شود، یا اگر هیچ گزینه یا \fIname\fPای مشخص نشود، مشخصات تکمیل موجود را به گونه‌ای چاپ می‌کند که بتوان مجدداً از آن‌ها به عنوان ورودی استفاده کرد. گزینهٔ \fB\-r\fP مشخصات تکمیل را برای هر \fIname\fP حذف می‌کند، یا در صورتی که هیچ \fIname\fPای داده نشده باشد، تمام مشخصات تکمیل را حذف می‌نماید. .IP گزینهٔ \fB\-D\fP نشان می‌دهد که سایر گزینه‌ها و اقدامات ارائه‌شده باید بر تکمیل دستور .Q پیش‌فرض (default) اعمال شوند؛ یعنی تکمیلی که برای دستوری انجام می‌شود که پیش از این هیچ تکمیلی برای آن تعریف نشده است. گزینهٔ \fB\-E\fP نشان می‌دهد که سایر گزینه‌ها و اقدامات ارائه‌شده باید بر تکمیل دستور .Q خالی (empty) اعمال شوند؛ یعنی تکمیلی که روی یک خط خالی انجام می‌گیرد. گزینهٔ \fB\-I\fP نشان می‌دهد که سایر گزینه‌ها و اقدامات ارائه‌شده باید بر تکمیل روی نخستین کلمهٔ غیرتخصیصی در خط، یا پس از یک جداکنندهٔ دستور مانند \fB;\fP یا \fB|\fP اعمال شوند، که معمولاً تکمیل نام دستور است. اگر چند گزینه مشخص شوند، گزینهٔ \fB\-D\fP نسبت به \fB\-E\fP اولویت دارد، و هر دو بر \fB\-I\fP تقدم دارند. اگر هر یک از گزینه‌های \fB\-D\fP، \fB\-E\fP یا \fB\-I\fP مشخص شوند، هر آرگومانِ \fIname\fP دیگری نادیده گرفته می‌شود؛ این تکمیل‌ها فقط بر حالت مشخص‌شده توسط گزینه اعمال می‌شوند. .IP فرایند اعمال این مشخصات تکمیل هنگام تلاش برای تکمیل کلمه .ie \n(zZ=1 در \fIbash\fP(1) شرح داده شده است. .el در بالا ذیل بخش \fBتکمیل برنامه‌پذیر (Programmable Completion)\fP شرح داده شده است. .IP سایر گزینه‌ها، در صورت تعیین، دارای معانی زیر هستند. آرگومان‌های گزینه‌های \fB\-G\fP، \fB\-W\fP و \fB\-X\fP (و در صورت نیاز، گزینه‌های \fB\-P\fP و \fB\-S\fP) باید نقل‌قول (quote) شوند تا قبل از فراخوانی دستور توکار .B complete از بسط داده شدن آن‌ها محافظت شود. .IP .RS .PD 0 .TP 8 \fB\-o\fP \fIcomp-option\fP گزینه \fIcomp-option\fP جنبه‌های متعددی از رفتار compspec را فراتر از تولید ساده کامل‌سازی‌ها کنترل می‌کند. \fIcomp-option\fP می‌تواند یکی از موارد زیر باشد: .RS .TP 8 .B bashdefault اگر compspec هیچ تطابقی تولید نکند، بقیه کامل‌سازی‌های پیش‌فرض \fBbash\fP را انجام می‌دهد. .TP 8 .B default اگر compspec هیچ تطابقی تولید نکند، از کامل‌سازی پیش‌فرض نام فایل در \fBreadline\fP استفاده می‌کند. .TP 8 .B dirnames اگر compspec هیچ تطابقی تولید نکند، کامل‌سازی نام دایرکتوری را انجام می‌دهد. .TP 8 .B filenames به \fBreadline\fP اعلام می‌کند که compspec نام‌های فایل را تولید می‌کند، تا بتواند هرگونه پردازش مخصوص نام فایل را انجام دهد (مانند افزودن اسلش به نام‌های دایرکتوری، نقل‌قول کردن نویسه‌های خاص، یا جلوگیری از فاصله‌های انتهایی). این مورد برای استفاده به همراه توابع پوسته در نظر گرفته شده است. .TP 8 .B fullquote به \fBreadline\fP اعلام می‌کند که تمام کلمات کامل‌شده را در نقل‌قول قرار دهد، حتی اگر نام فایل نباشند. .TP 8 .B noquote به \fBreadline\fP اعلام می‌کند که در صورتی که کلمات کامل‌شده نام فایل باشند، آنها را در نقل‌قول قرار ندهد (قرار دادن نام فایل‌ها در نقل‌قول حالت پیش‌فرض است). .TP 8 .B nosort به \fBreadline\fP اعلام می‌کند که فهرست کامل‌سازی‌های ممکن را بر حسب حروف الفبا مرتب نکند. .TP 8 .B nospace به \fBreadline\fP اعلام می‌کند که به کلمات کامل‌شده در انتهای خط یک فاصله (حالت پیش‌فرض) اضافه نکند. .TP 8 .B plusdirs پس از تولید هرگونه تطابق تعریف‌شده توسط compspec، کامل‌سازی نام دایرکتوری را امتحان می‌کند و هرگونه تطابق را به نتایج سایر کنش‌ها اضافه می‌نماید. .RE .TP 8 \fB\-A\fP \fIaction\fP کنش \fIaction\fP ممکن است یکی از موارد زیر برای تولید فهرستی از کامل‌سازی‌های ممکن باشد: .RS .TP 8 .B alias نام‌های مستعار. همچنین می‌تواند به صورت \fB\-a\fP مشخص شود. .TP 8 .B arrayvar نام متغیرهای آرایه‌ای. .TP 8 .B binding نام‌های کلیدهای مقیدشده در \fBReadline\fP. .TP 8 .B builtin نام‌های دستورات توکار پوسته. همچنین می‌تواند به صورت \fB\-b\fP مشخص شود. .TP 8 .B command نام‌های دستور. همچنین می‌تواند به صورت \fB\-c\fP مشخص شود. .TP 8 .B directory نام‌های دایرکتوری. همچنین می‌تواند به صورت \fB\-d\fP مشخص شود. .TP 8 .B disabled نام‌های دستورات توکار غیرفعال‌شده پوسته. .TP 8 .B enabled نام‌های دستورات توکار فعال‌شده پوسته. .TP 8 .B export نام‌های متغیرهای صادرشده (exportشده) پوسته. همچنین می‌تواند به صورت \fB\-e\fP مشخص شود. .TP 8 .B file نام‌های فایل و دایرکتوری، مشابه با کامل‌سازی نام فایل در \fBreadline\fP. همچنین می‌تواند به صورت \fB\-f\fP مشخص شود. .TP 8 .B function نام‌های توابع پوسته. .TP 8 .B group نام‌های گروه. همچنین می‌تواند به صورت \fB\-g\fP مشخص شود. .TP 8 .B helptopic موضوعات راهنما به شکلی که توسط دستور توکار \fBhelp\fP پذیرفته میشوند. .TP 8 .B hostname نامهای میزبان، بهگونهای که از فایل مشخصشده توسط متغیر پوستهٔ .SM .B HOSTFILE گرفته شدهاند. .TP 8 .B job نامهای کار، در صورتی که مدیریت کارها فعال باشد. همچنین میتواند به صورت \fB\-j\fP مشخص شود. .TP 8 .B keyword کلمات رزرو شدهٔ پوسته. همچنین میتواند به صورت \fB\-k\fP مشخص شود. .TP 8 .B running نامهای کارهای در حال اجرا، در صورتی که مدیریت کارها فعال باشد. .TP 8 .B service نامهای سرویس. همچنین میتواند به صورت \fB\-s\fP مشخص شود. .TP 8 .B setopt آرگومانهای معتبر برای گزینهٔ \fB\-o\fP در دستور توکار \fBset\fP. .TP 8 .B shopt نامهای گزینهٔ پوسته بهگونهای که توسط دستور توکار \fBshopt\fP پذیرفته میشوند. .TP 8 .B signal نامهای سیگنال. .TP 8 .B stopped نامهای کارهای متوقفشده، در صورتی که مدیریت کارها فعال باشد. .TP 8 .B user نامهای کاربری. همچنین میتواند به صورت \fB\-u\fP مشخص شود. .TP 8 .B variable نامهای همهٔ متغیرهای پوسته. همچنین میتواند به صورت \fB\-v\fP مشخص شود. .RE .TP 8 \fB\-C\fP \fIcommand\fP دستور \fIcommand\fP در یک محیط زیرپوسته اجرا میشود و خروجی آن به عنوان کاملکردنهای ممکن استفاده میشود. آرگومانها همانند گزینهٔ \fB\-F\fP ارسال میشوند. .TP 8 \fB\-F\fP \fIfunction\fP تابع پوستهٔ \fIfunction\fP در محیط پوستهٔ فعلی اجرا میشود. هنگامی که تابع اجرا میشود، نخستین آرگومان (\fB$1\fP) نام دستوری است که آرگومانهایش در حال کامل شدن هستند، دومین آرگومان (\fB$2\fP) کلمهای است که در حال کامل شدن است، و سومین آرگومان (\fB$3\fP) کلمهٔ پیش از کلمهٔ در حال کامل شدن در خط فرمان فعلی است. هنگامی که \fIfunction\fP پایان مییابد، کاملکردن برنامه‌پذیر، کاملکردنهای ممکن را از مقدار متغیر آرایهای .SM .B COMPREPLY بازیابی میکند. .TP 8 \fB\-G\fP \fIglobpat\fP الگوی بسط نام مسیر \fIglobpat\fP را برای تولید کاملکردنهای ممکن بسط میدهد. .TP 8 \fB\-P\fP \fIprefix\fP پس از اعمال همهٔ گزینههای دیگر، \fIprefix\fP را به آغاز هر کاملکردن ممکن میافزاید. .TP 8 \fB\-S\fP \fIsuffix\fP پس از اعمال همهٔ گزینههای دیگر، \fIsuffix\fP را به انتهای هر کاملکردن ممکن الحاق میکند. .TP 8 \fB\-W\fP \fIwordlist\fP فهرست کلمات \fIwordlist\fP را با استفاده از نویسههای موجود در متغیر ویژهٔ .SM .B IFS به عنوان جداکننده تفکیک کرده و هر کلمهٔ حاصل را بسط میدهد. نقلقول پوسته درون \fIwordlist\fP رعایت میشود تا سازوکاری فراهم آید که کلمات بتوانند شامل فرا‌نویسه‌های پوسته یا نویسههای موجود در مقدار .SM .BR IFS باشند. کاملکردنهای ممکن، اعضایی از فهرست حاصل هستند که با پیشوندی از کلمهٔ در حال کامل شدن مطابقت دارند. .TP 8 \fB\-X\fP \fIfilterpat\fP الگوی \fIfilterpat\fP الگویی همانند الگوهای بسط نام مسیر است. این الگو بر روی فهرست تکمیل‌های احتمالی تولیدشده توسط گزینه‌ها و آرگومان‌های پیشین اعمال می‌شود و هر تکمیلی که با \fIfilterpat\fP تطابق داشته باشد از فهرست حذف می‌گردد. وجود یک \fB!\fP در ابتدای \fIfilterpat\fP الگو را نقیض می‌کند؛ در این حالت، هر تکمیلی که با \fIfilterpat\fP تطابق نداشته باشد حذف خواهد شد. .PD .PP مقدار بازگشتی درست (true) است مگر اینکه یک گزینه نامعتبر ارائه شود، گزینه‌ای غیر از .BR \-p ، .BR \-r ، .BR \-D ، .BR \-E ، یا .B \-I بدون آرگومان \fIname\fP ارائه گردد، تلاشی برای حذف مشخصات تکمیل برای یک \fIname\fP که هیچ مشخصاتی برای آن وجود ندارد انجام شود، یا خطایی هنگام افزودن مشخصات تکمیل رخ دهد. .RE .TP \fBcompopt\fP [\fB\-o\fP \fIoption\fP] [\fB\-DEI\fP] [\fB+o\fP \fIoption\fP] [\fIname\fP] گزینه‌های تکمیل را برای هر \fIname\fP بر اساس \fIoption\fPها، یا در صورت ارائه نشدن \fIname\fP برای تکمیل در حال اجرای فعلی تغییر می‌دهد. اگر هیچ \fIoption\fPی ارائه نشود، گزینه‌های تکمیل را برای هر \fIname\fP یا تکمیل فعلی نمایش می‌دهد. مقادیر احتمالی برای \fIoption\fP همان مواردی هستند که برای دستور توکار \fBcomplete\fP که پیش‌تر توضیح داده شد، معتبرند. .IP گزینه \fB\-D\fP نشان می‌دهد که سایر گزینه‌های ارائه شده باید بر روی تکمیل .Q پیشفرض دستور اعمال شوند؛ گزینه \fB\-E\fP نشان می‌دهد که سایر گزینه‌های ارائه شده باید بر روی تکمیل دستور .Q خالی اعمال شوند؛ و گزینه \fB\-I\fP نشان می‌دهد که سایر گزینه‌های ارائه شده باید بر روی تکمیل کلمه ابتدایی خط اعمال گردند. این موارد به همان روش دستور توکار \fBcomplete\fP تعیین می‌شوند. .IP اگر گزینه‌های چندگانه ارائه شوند، گزینه \fB\-D\fP بر \fB\-E\fP اولویت دارد و هر دو بر \fB\-I\fP تقدم دارند. .IP مقدار بازگشتی درست (true) است مگر اینکه یک گزینه نامعتبر ارائه شود، تلاشی برای تغییر گزینه‌ها برای یک \fIname\fP که هیچ مشخصات تکمیلی برای آن وجود ندارد صورت گیرد، یا خطایی در خروجی رخ دهد. .TP \fBcontinue\fP [\fIn\fP] دستور \fBcontinue\fP تکرار بعدی حلقه دربرگیرنده .BR for ، .BR while ، .BR until ، یا .B select را از سر می‌گیرد. اگر .I n مشخص شده باشد، \fBbash\fP حلقه دربرگیرنده \fIn\fPام را از سر می‌گیرد. .I n باید \(>= 1 باشد. اگر .I n بزرگتر از تعداد حلقه‌های دربرگیرنده باشد، پوسته آخرین حلقه دربرگیرنده (حلقه .Q بالاترین سطح یا top-level) را از سر می‌گیرد. مقدار بازگشتی 0 است مگر اینکه \fIn\fP بزرگتر یا مساوی 1 نباشد. .TP \fBdeclare\fP [\fB\-aAfFgiIlnrtux\fP] [\fB\-p\fP] \ [\fIname\fP[=\fIvalue\fP] .\|.\|.] .PD 0 .TP \fBtypeset\fP [\fB\-aAfFgiIlnrtux\fP] [\fB\-p\fP] \ [\fIname\fP[=\fIvalue\fP] .\|.\|.] .PD متغیرها را تعریف کرده و/یا به آن‌ها صفت (ویژگی) می‌دهد. اگر هیچ \fIname\fPی داده نشود، مقادیر متغیرها یا توابع را نمایش می‌دهد. گزینه .B \-p صفت‌ها و مقادیر هر .IR name را نمایش خواهد داد. هنگامی که .B \-p با آرگومان‌های \fIname\fP استفاده شود، گزینه‌های اضافی، به جز \fB\-f\fP و \fB\-F\fP، نادیده گرفته می‌شوند. .IP هنگامی که .B \-p بدون آرگومان‌های \fIname\fP ارائه شود، \fBdeclare\fP صفت‌ها و مقادیر تمام متغیرهایی که صفت‌های مشخص‌شده توسط گزینه‌های اضافی را دارند، نمایش خواهد داد. اگر گزینه دیگری همراه با \fB\-p\fP ارائه نشود، \fBdeclare\fP صفت‌ها و مقادیر تمام متغیرهای پوسته را نمایش می‌دهد. گزینه \fB\-f\fP نمایش را به توابع پوسته محدود می‌کند. .IP گزینه .B \-F از نمایش تعاریف توابع جلوگیری می‌کند؛ فقط نام تابع و صفت‌های آن چاپ می‌شوند. اگر گزینه پوسته \fBextdebug\fP با استفاده از \fBshopt\fP فعال شده باشد، نام فایل منبع و شماره خطی که هر \fIname\fP در آن تعریف شده است نیز نمایش داده می‌شود. گزینه .B \-F به معنای اعمال ضمنی .B \-f است. .IP گزینه .B \-g متغیرها را مجبور می‌کند در حوزه سراسری (global scope) ایجاد یا ویرایش شوند، حتی اگر \fBdeclare\fP درون یک تابع پوسته اجرا گردد. هنگامی که \fBdeclare\fP درون یک تابع پوسته اجرا نشود، این گزینه نادیده گرفته می‌شود. .IP گزینه .B \-I باعث می‌شود متغیرهای محلی، صفت‌ها (به جز صفت \fInameref\fP) و مقدار هر متغیر موجود با همان \fIname\fP در حوزه دربرگیرنده پیرامون را به ارث ببرند. اگر متغیر موجودی وجود نداشته باشد، متغیر محلی در ابتدا بدون مقدار (unset) خواهد بود. .IP گزینه‌های زیر می‌توانند برای محدود کردن خروجی به متغیرهایی با صفت مشخص یا دادن صفت‌ها به متغیرها استفاده شوند: .RS .PD 0 .TP .B \-a هر \fIname\fP یک متغیر آرایه ایندکس‌شده (نمایه‌ای) است (بخش .B Arrays .ie \n(zZ=1 در \fIbash\fP(1) را ببینید). .el در بالا را ببینید). .TP .B \-A هر \fIname\fP یک متغیر آرایه انجمنی (متناظر) است (بخش .B Arrays .ie \n(zZ=1 در \fIbash\fP(1) را ببینید). .el در بالا را ببینید). .TP .B \-f هر \fIname\fP به یک تابع پوسته اشاره دارد. .TP .B \-i متغیر به عنوان یک عدد صحیح در نظر گرفته می‌شود؛ ارزیابی حسابی (بخش .SM .B "ARITHMETIC EVALUATION" .ie \n(zZ=1 در \fIbash\fP(1) .el در بالا را ببینید) هنگامی که مقداری به متغیر انتساب داده می‌شود، انجام می‌گیرد. .TP .B \-l هنگامی که مقداری به متغیر انتساب داده می‌شود، تمام حروف بزرگ به حروف کوچک تبدیل می‌شوند. صفت حروف بزرگ غیرفعال می‌شود. .TP .B \-n به هر \fIname\fP صفت \fInameref\fP را می‌دهد، و آن را به یک ارجاع نامی (name reference) به متغیری دیگر تبدیل می‌کند. آن متغیر دیگر با مقدار \fIname\fP تعریف می‌شود. تمام ارجاعات، انتساب‌ها، و تغییرات صفت‌ها روی \fIname\fP، به جز مواردی که از خود صفت \fB\-n\fP استفاده می‌کنند یا آن را تغییر می‌دهند، بر روی متغیری انجام می‌شود که مقدار \fIname\fP به آن ارجاع دارد. صفت nameref را نمی‌توان برای متغیرهای آرایه‌ای به کار برد. .TP .B \-r \fIname\fPها را فقط‌خواندنی (readonly) می‌کند. سپس نمی‌توان با دستورات انتساب بعدی مقداری به این نام‌ها اختصاص داد یا آن‌ها را با unset حذف کرد. .TP .B \-t به هر \fIname\fP صفت \fItrace\fP را می‌دهد. توابع ردگیری‌شده، تله‌های (traps) \fBDEBUG\fP و \fBRETURN\fP را از پوسته فراخواننده به ارث می‌برند. صفت trace معنای خاصی برای متغیرها ندارد. .TP .B \-u هنگامی که مقداری به متغیر انتساب داده می‌شود، تمام حروف کوچک به حروف بزرگ تبدیل می‌شوند. صفت حروف کوچک غیرفعال می‌شود. .TP .B \-x هر \fIname\fP را برای صدور (export) به دستورات بعدی از طریق محیط علامت‌گذاری می‌کند. .PD .PP استفاده از .Q + به جای .Q \- صفت مشخص‌شده را خاموش (غیرفعال) می‌کند، با این استثناها که \fB+a\fP و \fB+A\fP را نمی‌توان برای نابود کردن متغیرهای آرایه‌ای استفاده کرد و \fB+r\fP صفت فقط‌خواندنی را حذف نخواهد کرد. .PP هنگامی که در یک تابع استفاده شوند، .B declare و .B typeset مانند دستور .B local هر \fIname\fP را محلی می‌کنند، مگر اینکه گزینه \fB\-g\fP ارائه شده باشد. اگر به دنبال نام یک متغیر =\fIvalue\fP بیاید، مقدار متغیر برابر با \fIvalue\fP قرار می‌گیرد. هنگام استفاده از \fB\-a\fP یا \fB\-A\fP و ساختار انتساب مرکب برای ایجاد متغیرهای آرایه‌ای، صفت‌های اضافی تا انتساب‌های بعدی اعمال نخواهند شد. .PP مقدار بازگشتی 0 است مگر اینکه یک گزینه نامعتبر دریافت شود، تلاشی برای تعریف یک تابع با استفاده از .Q "\-f foo=bar" صورت گیرد، تلاشی برای انتساب یک مقدار به یک متغیر فقط‌خواندنی صورت گیرد، تلاشی برای انتساب یک مقدار به یک متغیر آرایه‌ای بدون استفاده از ساختار انتساب مرکب صورت گیرد (بخش .B Arrays .ie \n(zZ=1 در \fIbash\fP(1) را ببینید)، .el در بالا را ببینید)، یکی از \fIname\fPها یک نام متغیر معتبر در پوسته نباشد، تلاشی برای خاموش کردن وضعیت فقط‌خواندنی برای یک متغیر فقط‌خواندنی صورت گیرد، تلاشی برای خاموش کردن وضعیت آرایه‌ای برای یک متغیر آرایه‌ای صورت گیرد، یا تلاشی برای نمایش یک تابع ناموجود با \fB\-f\fP انجام شود. .RE .TP .B dirs [\fB\-clpv\fP] [+\fIn\fP] [\-\fIn\fP] بدون گزینهها، فهرست دایرکتوریهای بهخاطرسپردهشده کنونی را نمایش میدهد. نمایش پیشفرض در یک خط واحد است که نام دایرکتوریها در آن با فاصله از هم جدا شدهاند. دایرکتوریها با دستور .B pushd به فهرست افزوده میشوند؛ دستور .B popd مدخلهایی را از فهرست حذف میکند. دایرکتوری جاری همیشه اولین دایرکتوری در پشته است. .IP گزینهها در صورت ارائه، معانی زیر را دارند: .RS .PD 0 .TP .B \-c پشته دایرکتوری را با حذف تمام مدخلها پاک میکند. .TP .B \-l فهرستی با استفاده از نام کامل مسیرها تولید میکند؛ قالب پیشفرض فهرستنویسی از یک تیلدا (علامت مد) برای نمایش دایرکتوری خانگی استفاده میکند. .TP .B \-p پشته دایرکتوری را با یک مدخل در هر خط چاپ میکند. .TP .B \-v پشته دایرکتوری را با یک مدخل در هر خط چاپ میکند، و در ابتدای هر مدخل شاخص (اندیس) آن در پشته را درج میکند. .TP \fB+\fP\fIn\fP مدخل \fIn\fPام را با شمارش از سمت چپ فهرستی که توسط .B dirs هنگام فراخوانی بدون گزینه نشان داده شده است نمایش میدهد، با شروع از صفر. .TP \fB\-\fP\fIn\fP مدخل \fIn\fPام را با شمارش از سمت راست فهرستی که توسط .B dirs هنگام فراخوانی بدون گزینه نشان داده شده است نمایش میدهد، با شروع از صفر. .PD .PP مقدار بازگشتی 0 است مگر اینکه گزینه نامعتبری ارائه شود یا \fIn\fP به فراتر از انتهای پشته دایرکتوری اشاره کند. .RE .TP \fBdisown\fP [\fB\-ar\fP] [\fB\-h\fP] [\fIid\fP .\|.\|.] بدون گزینهها، هر .I id را از جدول کارهای فعال حذف میکند. هر \fIid\fP میتواند مشخصه کار \fIjobspec\fP یا شناسه فرآیند \fIpid\fP باشد؛ اگر \fIid\fP یک \fIpid\fP باشد، \fBdisown\fP از کاری که شامل آن \fIpid\fP است به عنوان \fIjobspec\fP استفاده میکند. .IP اگر گزینه \fB\-h\fP مشخص شده باشد، \fBdisown\fP کارهای متناظر با هر .I id را از جدول کارها حذف نمیکند، بلکه آنها را علامتگذاری میکند تا در صورتی که پوسته سیگنال .SM .B SIGHUP را دریافت کرد، آن را به این کار ارسال نکند .SM .BR SIGHUP . .IP اگر هیچ .I id مشخص نشده باشد، گزینه .B \-a به معنای حذف یا علامتگذاری همه کارها است؛ گزینه .B \-r بدون آرگومان .I id کارهای در حال اجرا را حذف یا علامتگذاری میکند. اگر هیچ .I id مشخص نشده باشد و هیچیک از گزینههای \fB\-a\fP و \fB\-r\fP نیز ارائه نشده باشند، \fBdisown\fP کار جاری را حذف یا علامتگذاری میکند. .IP مقدار بازگشتی 0 است مگر اینکه یک .I id یک کار معتبر را مشخص نکند. .TP \fBecho\fP [\fB\-neE\fP] [\fIarg\fP .\|.\|.] آرگومانهای \fIarg\fP را با فاصله از یکدیگر و به دنبال آن یک خط جدید خروجی میدهد. وضعیت بازگشتی 0 است مگر اینکه خطای نوشتن رخ دهد. اگر \fB\-n\fP مشخص شده باشد، خط جدید پایانی چاپ نمیشود. .IP اگر گزینه \fB\-e\fP داده شود، \fBecho\fP نویسههای گریز با بکاسلش زیر را تفسیر میکند. گزینه .B \-E تفسیر این نویسههای گریز را حتی در سیستمهایی که بهطور پیشفرض تفسیر میشوند، غیرفعال میکند. گزینه پوسته \fBxpg_echo\fP تعیین میکند که آیا \fBecho\fP هیچیک از گزینهها را تفسیر کرده و این نویسههای گریز را بسط میدهد یا خیر. دستور .B echo عبارت \fB\-\-\fP را به معنای پایان گزینهها تفسیر نمیکند. .IP .B echo توالیهای گریز زیر را تفسیر میکند: .RS .PD 0 .TP .B \ea هشدار (زنگ اخبار یا bell) .TP .B \eb پس‌بر (backspace) .TP .B \ec جلوگیری از ادامه خروجی .TP .B \ee .TP .B \eE نویسه گریز (escape) .TP .B \ef برگ‌خور (form feed) .TP .B \en خط جدید (new line) .TP .B \er بازگشت به ابتدای سطر (carriage return) .TP .B \et تب افقی .TP .B \ev تب عمودی .TP .B \e\e بک‌اسلش (ممیز وارونه) .TP .B \e0\fInnn\fP نویسه هشت‌بیتی که مقدار آن برابر با مقدار هشت‌هشتی (اکتال) \fInnn\fP است (صفر تا سه رقم در مبنای ۸). .TP .B \ex\fIHH\fP نویسه هشت‌بیتی که مقدار آن برابر با مقدار شانزده‌شانزدهی (هگزادسیمال) \fIHH\fP است (یک یا دو رقم در مبنای ۱۶). .TP .B \eu\fIHHHH\fP نویسه یونیکد (ISO/IEC 10646) که مقدار آن برابر با مقدار شانزده‌شانزدهی \fIHHHH\fP است (یک تا چهار رقم در مبنای ۱۶). .TP .B \eU\fIHHHHHHHH\fP نویسه یونیکد (ISO/IEC 10646) که مقدار آن برابر با مقدار شانزده‌شانزدهی \fIHHHHHHHH\fP است (یک تا هشت رقم در مبنای ۱۶). .PD .PP دستور \fBecho\fP هر نویسه مهارشده با بک‌اسلشِ ناشناخته را بدون تغییر می‌نویسد. .RE .TP \fBenable\fP [\fB\-a\fP] [\fB\-dnps\fP] [\fB\-f\fP \fIfilename\fP] \ [\fIname\fP .\|.\|.] فعال و غیرفعال کردن دستورات توکار پوسته. غیرفعال کردن یک دستور توکار اجازه می‌دهد یک فایل اجرایی که همنام با یک دستور توکار پوسته است، بدون تعیین مسیر کامل آن اجرا شود، اگرچه پوسته معمولاً پیش از فایل‌ها، به دنبال دستورات توکار می‌گردد. .IP اگر \fB\-n\fP ارائه شود، هر \fIname\fP غیرفعال می‌شود؛ در غیر این صورت، \fIname\fPها فعال می‌شوند. برای مثال، جهت استفاده از فایل دودویی .B test یافت‌شده با استفاده از .SM .B PATH به جای نسخه توکار پوسته، این دستور را اجرا کنید: .QN "enable \-n test" . .IP اگر هیچ آرگومان \fIname\fPای مشخص نشود، یا اگر گزینه .B \-p داده شود، فهرستی از دستورات توکار پوسته چاپ می‌شود. بدون آرگومان‌های گزینه‌ای دیگر، این فهرست شامل تمام دستورات توکار فعال پوسته خواهد بود. اگر \fB\-n\fP ارائه شود، تنها دستورات توکار غیرفعال را چاپ می‌کند. اگر \fB\-a\fP ارائه شود، فهرست چاپ‌شده شامل تمام دستورات توکار خواهد بود، همراه با نشانگری مبنی بر اینکه آیا هر کدام فعال هستند یا خیر. گزینه \fB\-s\fP به معنای محدود کردن خروجی به دستورات توکار \fIspecial\fP در استاندارد .SM POSIX است. .IP گزینه .B \-f به معنای بارگذاری دستور توکار جدید .I name از شیء اشتراکی (shared object) .IR filename است، در سیستم‌هایی که از بارگذاری پویا پشتیبانی می‌کنند. اگر \fIfilename\fP شامل اسلش نباشد، \fBBash\fP از مقدار متغیر \fBBASH_LOADABLES_PATH\fP به عنوان فهرستی از دایرکتوری‌های جداشده با دونقطه (:) برای جستجوی \fIfilename\fP استفاده خواهد کرد. مقدار پیش‌فرض \fBBASH_LOADABLES_PATH\fP وابسته به سیستم است، و ممکن است شامل .Q .\& باشد تا جستجو در دایرکتوری جاری را اجباری کند. گزینه .B \-d دستور توکاری را که پیش‌تر با \fB\-f\fP بارگذاری شده بود، حذف خواهد کرد. اگر \fI\-s\fP همراه با \fI\-f\fP استفاده شود، دستور توکار جدید به یک دستور توکار ویژه در .SM POSIX تبدیل می‌شود. .IP اگر هیچ گزینه‌ای داده نشود و یک \fIname\fP دستور توکار پوسته نباشد، \fBenable\fP تلاش خواهد کرد تا \fIname\fP را از یک شیء اشتراکی به نام \fIname\fP بارگذاری کند، گویی که دستور بدین صورت اجرا شده است: .QN "enable \-f \fIname name\fP" . .IP مقدار بازگشتی 0 است مگر آنکه یک .I name دستور توکار پوسته نباشد یا خطایی در بارگذاری یک دستور توکار جدید از یک شیء اشتراکی رخ دهد. .TP \fBeval\fP [\fIarg\fP .\|.\|.] آرگومان‌های \fIarg\fP را با قرار دادن فاصله بین آن‌ها به یک دستور واحد متصل می‌کند. سپس \fBBash\fP این دستور را خوانده و اجرا می‌نماید، و وضعیت خروج آن را به عنوان وضعیت بازگشتی \fBeval\fP برمی‌گرداند. اگر هیچ .IR arg یا تنها آرگومان‌های تهی وجود داشته باشد، .B eval مقدار 0 را برمی‌گرداند. .TP \fBexec\fP [\fB\-cl\fP] [\fB\-a\fP \fIname\fP] [\fIcommand\fP [\fIarguments\fP]] اگر .I command مشخص شده باشد، بدون ایجاد یک فرایند جدید جایگزین پوسته می‌شود. \fIcommand\fP نمی‌تواند یک تابع یا دستور توکار پوسته باشد. شناسه‌های .I arguments به عنوان آرگومان‌های \fIcommand\fP به آن داده می‌شوند. اگر گزینهٔ .B \-l ارائه شده باشد، پوسته یک خط تیره (dash) در ابتدای آرگومان صفرم ارسال‌شده به .IR command قرار می‌دهد. این همان کاری است که .IR login (1) انجام می‌دهد. گزینهٔ .B \-c باعث می‌شود که .I command با یک محیط (environment) خالی اجرا شود. اگر .B \-a ارائه شود، پوسته .I name را به عنوان آرگومان صفرم به دستور اجراشده ارسال می‌کند. .IP اگر .I command به دلیلی قابل اجرا نباشد، یک پوسته غیرتعاملی خارج می‌شود، مگر اینکه گزینهٔ پوسته .B execfail فعال باشد. در این صورت، وضعیتی غیرصفر برمی‌گرداند. اگر فایل قابل اجرا نباشد، یک پوسته تعاملی وضعیتی غیرصفر برمی‌گرداند. در صورت شکست خوردن \fBexec\fP، زیرپوسته (subshell) بدون قید و شرط خارج می‌شود. .IP اگر .I command مشخص نشده باشد، هرگونه تغییر مسیر بر روی پوسته جاری اعمال می‌شود، و وضعیت بازگشتی 0 خواهد بود. اگر خطایی در تغییر مسیر رخ دهد، وضعیت بازگشتی 1 است. .TP \fBexit\fP [\fIn\fP] باعث خروج پوسته با وضعیت \fIn\fP می‌شود. اگر .I n حذف شود، وضعیت خروج برابر با وضعیت آخرین دستور اجراشده خواهد بود. هرگونه تله (trap) بر روی .SM .B EXIT پیش از خاتمه یافتن پوسته اجرا می‌شود. .TP \fBexport\fP [\fB\-fn\fP\^] [\fIname\fP[=\fIvalue\fP]] .\|.\|. .PD 0 .TP .B export \-p [\fB\-f\fP\^] .PD نام‌های .I names ارائه‌شده برای صدور خودکار (export) به محیط دستوراتی که متعاقباً اجرا می‌شوند، علامت‌گذاری می‌شوند. اگر گزینهٔ .B \-f داده شود، .I names به توابع اشاره دارند. .IP گزینهٔ .B \-n صفت صدور (export) را از هر \fIname\fP حذف کرده یا آن را از حالت صادرشده خارج می‌سازد. اگر هیچ .I names داده نشود، یا اگر تنها گزینهٔ .B \-p ارائه گردد، \fBexport\fP فهرستی از نام‌های تمام متغیرهای صادرشده را در خروجی استاندارد نمایش می‌دهد. استفاده هم‌زمان از \fB\-p\fP و \fB\-f\fP توابع صادرشده را نمایش می‌دهد. گزینهٔ \fB\-p\fP خروجی را در قالبی نمایش می‌دهد که می‌تواند مجدداً به عنوان ورودی استفاده شود. .IP \fBexport\fP این امکان را فراهم می‌کند که مقدار متغیر هنگام صدور یا لغو صدور، با قرار دادن =\fIvalue\fP پس از نام متغیر تنظیم شود. این کار در حین تغییر صفت صدور (export)، مقدار متغیر را روی \fIvalue\fP تنظیم می‌کند. دستور .B export وضعیت خروج 0 را برمی‌گرداند مگر آنکه یک گزینهٔ نامعتبر دریافت شود، یکی از .I names یک نام معتبر برای متغیرهای پوسته نباشد، یا .B \-f همراه با یک .I name که یک تابع نیست ارائه گردد. .TP \fBfalse\fP کاری انجام نمیدهد؛ یک وضعیت غیرصفر (شکست) برمیگرداند. .TP \fBfc\fP [\fB\-e\fP \fIename\fP] [\fB\-lnr\fP] [\fIfirst\fP] [\fIlast\fP] .PD 0 .TP \fBfc\fP \fB\-s\fP [\fIpat\fP=\fIrep\fP] [\fIcmd\fP] .PD شکل اول محدودهای از دستورات را از .I first تا .I last از فهرست تاریخچه انتخاب کرده و آنها را نمایش میدهد یا ویرایش و دوباره اجرا میکند. .I First و .I last میتوانند به عنوان یک رشته (برای یافتن آخرین دستوری که با آن رشته آغاز میشود) یا به عنوان یک عدد (یک نمایه در فهرست تاریخچه، که در آن یک عدد منفی به عنوان فاصله از شماره دستور فعلی استفاده میشود) مشخص شوند. .IP هنگام فهرست کردن، مقدار 0 برای \fIfirst\fP یا \fIlast\fP معادل \-1 است و \-0 معادل دستور فعلی است (معمولاً دستور \fBfc\fP)؛ در غیر این صورت 0 معادل \-1 بوده و \-0 نامعتبر است. اگر .I last مشخص نشده باشد، برای فهرست کردن روی دستور فعلی تنظیم میشود (به طوری که .QN "fc \-l \-10" ۱۰ دستور آخر را چاپ میکند) و در غیر این صورت روی .I first تنظیم میشود. اگر .I first مشخص نشده باشد، برای ویرایش روی دستور قبلی و برای فهرست کردن روی \-16 تنظیم میشود. .IP اگر گزینه .B \-l ارائه شود، دستورات در خروجی استاندارد فهرست میشوند. گزینه .B \-n شماره دستورات را هنگام فهرست کردن حذف میکند. گزینه .B \-r ترتیب دستورات را معکوس میکند. .IP در غیر این صورت، \fBfc\fP ویرایشگر نامبرده‌شده توسط .I ename را روی فایلی حاوی آن دستورات فراخوانی میکند. اگر .I ename ارائه نشده باشد، \fBfc\fP از مقدار متغیر .SM .B FCEDIT استفاده میکند، و از مقدار .SM .B EDITOR در صورتی که .SM .B FCEDIT تنظیم نشده باشد. اگر هیچ‌یک از متغیرها تنظیم نشده باشند، \fBfc\fP از .FN vi. استفاده میکند. هنگامی که ویرایش کامل شد، \fBfc\fP فایل حاوی دستورات ویرایش‌شده را میخواند و آنها را چاپ کرده و اجرا میکند. .IP در شکل دوم، \fBfc\fP پس از جایگزینی هر نمونه از \fIpat\fP با \fIrep\fP، دستور \fIcommand\fP را مجدداً اجرا میکند. \fICommand\fP همانند \fIfirst\fP در بالا تفسیر میشود. .IP یک نام مستعار کاربردی برای استفاده با \fBfc\fP عبارت است از .Q "r=\*"fc \-s\*"" , به طوری که تایپ کردن .Q "r cc" آخرین دستوری را که با .Q cc آغاز میشود اجرا میکند و تایپ کردن .Q r آخرین دستور را مجدداً اجرا مینماید. .IP اگر از شکل اول استفاده شود، مقدار بازگشتی صفر است مگر اینکه با یک گزینه نامعتبر مواجه شود یا .I first یا .I last خطوطی از تاریخچه را مشخص کنند که خارج از محدوده باشد. هنگام ویرایش و اجرای مجدد یک فایل حاوی دستورات، مقدار بازگشتی برابر با مقدار آخرین دستور اجرا شده خواهد بود یا در صورت بروز خطا در فایل موقت، نشان‌دهنده شکست است. اگر از شکل دوم استفاده شود، وضعیت بازگشتی همان وضعیت دستور بازاجراشده است، مگر اینکه .I cmd یک مدخل معتبر در تاریخچه را مشخص نکند، که در این صورت .B fc یک وضعیت غیرصفر برمیگرداند. .TP \fBfg\fP [\fIjobspec\fP] ادامه دادن اجرای .I jobspec در پیش‌زمینه، و تبدیل آن به کار جاری. اگر .I jobspec مشخص نشده باشد، \fBfg\fP از مفهوم پوسته برای \fIکار جاری\fP استفاده می‌کند. مقدار بازگشتی برابر با مقدار بازگشتی دستوری است که در پیش‌زمینه قرار گرفته، یا در صورت اجرا در حالتی که کنترل کارها غیرفعال است، یا در زمان اجرا با کنترل کارهای فعال، اگر .I jobspec یک کار معتبر را مشخص نکند یا .I jobspec کاری را مشخص کند که بدون کنترل کارها شروع شده است، نشان‌دهنده شکست است. .TP \fBgetopts\fP \fIoptstring\fP \fIname\fP [\fIarg\fP .\|.\|.] دستور .B getopts توسط اسکریپت‌ها و توابع پوسته برای تجزیه پارامترهای مکانی و به‌دست آوردن گزینه‌ها و آرگومان‌های آن‌ها استفاده می‌شود. .I optstring شامل نویسه‌های گزینه‌ای است که باید شناسایی شوند؛ اگر پس از یک نویسه یک دونقطه (colon) بیاید، انتظار می‌رود که آن گزینه یک آرگومان داشته باشد، که باید با فضای خالی (whitespace) از آن جدا شود. نویسه‌های دونقطه و علامت سؤال نباید به‌عنوان نویسه‌های گزینه استفاده شوند. .IP با هر بار فراخوانی، .B getopts گزینه بعدی را در متغیر پوسته .IR name قرار می‌دهد و در صورتی که .I name وجود نداشته باشد، آن را مقداردهی اولیه می‌کند، و شاخص آرگومان بعدی را که باید پردازش شود در متغیر .SM .BR OPTIND می‌گذارد. .SM .B OPTIND هر بار که پوسته یا یک اسکریپت پوسته فراخوانی می‌شود با مقدار 1 مقداردهی اولیه می‌شود. هنگامی که یک گزینه به یک آرگومان نیاز دارد، .B getopts آن آرگومان را در متغیر .SM .BR OPTARG قرار می‌دهد. .IP پوسته مقدار .SM .B OPTIND را به‌طور خودکار بازنشانی نمی‌کند؛ برای استفاده از یک مجموعه پارامتر جدید، باید آن را به‌صورت دستی بین چندین فراخوانی .B getopts در همان فراخوانی پوسته بازنشانی کرد. .IP هنگامی که به پایان گزینه‌ها می‌رسد، \fBgetopts\fP با یک مقدار بازگشتی بزرگ‌تر از صفر خارج می‌شود. .SM .B OPTIND روی شاخص اولین آرگومان غیرگزینه‌ای تنظیم می‌شود، و \fIname\fP روی ? تنظیم می‌گردد. .IP .B getopts معمولاً پارامترهای مکانی را تجزیه می‌کند، اما اگر آرگومان‌های بیشتری به‌عنوان مقادیر .I arg ارائه شوند، .B getopts آن‌ها را به‌جای آن تجزیه می‌کند. .IP دستور .B getopts می‌تواند خطاها را به دو روش گزارش کند. اگر اولین نویسه .I optstring یک دونقطه باشد، \fBgetopts\fP از گزارش خطای .I بی‌صدا (silent) استفاده می‌کند. در عملکرد عادی، \fBgetopts\fP هنگام برخورد با گزینه‌های نامعتبر یا آرگومان‌های مفقود گزینه، پیام‌های تشخیصی چاپ می‌کند. اگر متغیر .SM .B OPTERR روی 0 تنظیم شده باشد، .B getopts هیچ پیام خطایی نمایش نمی‌دهد، حتی اگر اولین نویسه .I optstring دونقطه نباشد. .IP اگر .B getopts یک گزینه نامعتبر شناسایی کند، ? را در .I name قرار می‌دهد و در صورتی که بی‌صدا نباشد، یک پیام خطا چاپ کرده و متغیر .SM .BR OPTARG را حذف (unset) می‌کند. اگر .B getopts بی‌صدا باشد، نویسه گزینه پیدا شده را به .SM .B OPTARG اختصاص می‌دهد و هیچ پیام تشخیصی چاپ نمی‌کند. .IP اگر یک آرگومان الزامی پیدا نشود، و .B getopts بی‌صدا نباشد، مقدار \fIname\fP را روی یک علامت سؤال (\^\fB?\fP\^) تنظیم می‌کند، .SM .BR OPTARG را حذف می‌کند، و یک پیام تشخیصی چاپ می‌نماید. اگر .B getopts بی‌صدا باشد، مقدار \fIname\fP را روی یک دونقطه (\^\fB:\fP\^) تنظیم کرده و .SM .B OPTARG را روی نویسه گزینه پیدا شده قرار می‌دهد. .IP دستور .B getopts در صورت پیدا شدن یک گزینه، چه مشخص‌شده و چه مشخص‌نشده، مقدار true برمی‌گرداند. اگر به انتهای گزینه‌ها برسد یا خطایی رخ دهد، مقدار false بازمی‌گرداند. .TP \fBhash\fP [\fB\-lr\fP] [\fB\-p\fP \fIfilename\fP] [\fB\-dt\fP] [\fIname\fP] هر بار که \fBhash\fP فراخوانی می‌شود، مسیر کامل دستور .I name را همان‌طور که از طریق جستجو در دایرکتوری‌های موجود در .BR $PATH تعیین شده است، به خاطر می‌سپارد. هر مسیر ذخیره‌شدهٔ قبلی مرتبط با \fIname\fP دور ریخته می‌شود. اگر گزینهٔ .B \-p مشخص شده باشد، \fBhash\fP از .I filename به عنوان مسیر کامل دستور استفاده می‌کند. .IP گزینهٔ .B \-r باعث می‌شود پوسته تمام مکان‌های به‌خاطر‌سپرده‌شده را فراموش کند. مقداردهی به متغیر \fBPATH\fP نیز تمام نام‌فایل‌های جدول هش را پاک می‌کند. گزینهٔ .B \-d باعث می‌شود پوسته مکان به‌خاطر‌سپرده‌شده برای هر \fIname\fP را فراموش کند. .IP اگر گزینهٔ .B \-t مشخص شده باشد، \fBhash\fP مسیر کامل مربوط به هر \fIname\fP را چاپ می‌کند. اگر چندین آرگومان \fIname\fP همراه با \fB\-t\fP داده شوند، \fBhash\fP پیش از مسیر کامل هش‌شدهٔ مربوطه، نام (\fIname\fP) را چاپ می‌کند. گزینهٔ .B \-l خروجی را در قالبی نمایش می‌دهد که می‌تواند مجدداً به عنوان ورودی استفاده شود. .IP اگر هیچ آرگومانی داده نشود، یا اگر تنها \fB\-l\fP داده شود، \fBhash\fP اطلاعات مربوط به دستورات به‌خاطر‌سپرده‌شده را چاپ می‌کند. گزینه‌های \fB\-t\fP، \fB\-d\fP و \fB\-p\fP (گزینه‌هایی که بر روی آرگومان‌های \fIname\fP اثر می‌گذارند) مانعة‌الجمع هستند. تنها یکی از آن‌ها فعال خواهد بود. اگر بیش از یکی از آن‌ها مشخص شود، \fB\-t\fP اولویت بالاتری نسبت به \fB\-p\fP دارد، و هر دو اولویت بالاتری نسبت به \fB\-d\fP دارند. .IP وضعیت بازگشتی صفر است مگر اینکه یک .I name یافت نشود یا یک گزینهٔ نامعتبر داده شود. .TP \fBhelp\fP [\fB\-dms\fP] [\fIpattern\fP] اطلاعات مفیدی دربارهٔ دستورات توکار نمایش می‌دهد. اگر .I pattern مشخص شده باشد، .B help همان‌طور که در زیر شرح داده شده، راهنمای مفصلی را دربارهٔ تمام دستورات مطابق با .I pattern ارائه می‌دهد؛ در غیر این صورت، فهرستی از تمام دستورات توکار و دستورات مرکب پوسته را نمایش می‌دهد. .IP گزینه‌ها در صورت مشخص شدن، معانی زیر را دارند: .RS .TP .PD 0 .B \-d نمایش یک توضیح کوتاه برای هر \fIpattern\fP .TP .B \-m نمایش توضیحات هر \fIpattern\fP در قالبی مشابه man-page .TP .B \-s تنها نمایش یک خلاصهٔ کوتاه از نحوهٔ استفاده برای هر \fIpattern\fP .PD .RE .IP اگر \fIpattern\fP شامل نویسه‌های تطبیق الگو باشد (به .SM .B "Pattern Matching" در بالا مراجعه کنید)، با آن مانند یک الگوی پوسته رفتار می‌شود و \fBhelp\fP توضیحات هر عنوان راهنمای مطابق با \fIpattern\fP را چاپ می‌کند. .IP در غیر این صورت، و چنانچه \fIpattern\fP دقیقاً با نام یک عنوان راهنما مطابقت داشته باشد، \fBhelp\fP توضیحات مرتبط با آن موضوع را چاپ می‌کند. در غیر این صورت، \fBhelp\fP تطبیق پیشوند انجام می‌دهد و توضیحات تمام موضوعات راهنمای منطبق را چاپ می‌کند. .IP وضعیت بازگشتی 0 است مگر اینکه هیچ دستوری با .IR pattern مطابقت نداشته باشد. .TP \fBhistory [\fIn\fP] .PD 0 .TP \fBhistory\fP \fB\-c\fP .TP \fBhistory \-d\fP \fIoffset\fP .TP \fBhistory \-d\fP \fIstart\fP-\fIend\fP .TP \fBhistory\fP \fB\-anrw\fP [\fIfilename\fP] .TP \fBhistory\fP \fB\-p\fP \fIarg\fP [\fIarg\fP .\|.\|.] .TP \fBhistory\fP \fB\-s\fP \fIarg\fP [\fIarg\fP .\|.\|.] .PD بدون هیچ گزینه‌ای، فهرست تاریخچهٔ دستورات را همراه با شماره‌ها نمایش می‌دهد. مدخل‌هایی که با یک .B * پیشوند دارند، تغییر یافته‌اند. یک آرگومان .I n تنها آخرین .I n مدخل را فهرست می‌کند. اگر متغیر پوستهٔ .SM .B HISTTIMEFORMAT تنظیم شده و خالی نباشد، به‌عنوان یک رشتهٔ قالب‌بندی برای .IR strftime (3) جهت نمایش برچسب زمانی مرتبط با هر مدخل تاریخچهٔ نمایش‌داده‌شده استفاده می‌شود. اگر .B history از .SM .BR HISTTIMEFORMAT استفاده کند، فاصلهٔ اضافه‌ای میان برچسب زمانی قالب‌بندی‌شده و مدخل تاریخچه چاپ نمی‌کند. .IP اگر \fIfilename\fP ارائه شود، \fBhistory\fP از آن به‌عنوان نام فایل تاریخچه استفاده می‌کند؛ در غیر این صورت، از مقدار .SM .BR HISTFILE استفاده می‌کند. اگر \fIfilename\fP ارائه نشود و .SM .B HISTFILE تنظیم نشده یا خالی باشد، گزینه‌های \fB\-a، \-n، \-r\fP و \fB\-w\fP هیچ تأثیری ندارند. .IP گزینه‌ها در صورت ارائه، معانی زیر را دارند: .RS .PD 0 .TP .B \-c پاک کردن فهرست تاریخچه با حذف تمام مدخل‌ها. این گزینه می‌تواند همراه با گزینه‌های دیگر برای جایگزینی فهرست تاریخچه استفاده شود. .TP \fB\-d\fP \fIoffset\fP حذف مدخل تاریخچه در موقعیت \fIoffset\fP. اگر \fIoffset\fP منفی باشد، نسبت به یکی بیشتر از آخرین موقعیت تاریخچه تفسیر می‌شود؛ بنابراین شاخص‌های منفی از انتهای تاریخچه به عقب شمارش می‌شوند و شاخص \-1 به خود دستور جاری \fBhistory \-d\fP اشاره می‌کند. .TP \fB\-d\fP \fIstart\fP\-\fIend\fP حذف بازه‌ای از مدخل‌های تاریخچه بین موقعیت‌های \fIstart\fP و \fIend\fP، به‌صورت شامل هر دو انتها. مقادیر مثبت و منفی برای \fIstart\fP و \fIend\fP همان‌طور که در بالا شرح داده شد تفسیر می‌شوند. .TP .B \-a الحاق خطوط تاریخچهٔ .Q new به فایل تاریخچه. این‌ها خطوط تاریخچه‌ای هستند که از زمان آغاز نشست جاری \fBbash\fP وارد شده‌اند، اما قبلاً به فایل تاریخچه الحاق نشده‌اند. .TP .B \-n خواندن خطوط تاریخچه‌ای که هنوز از فایل تاریخچه خوانده نشده‌اند و اضافه کردن آن‌ها به فهرست تاریخچهٔ جاری. این‌ها خطوطی هستند که از آغاز نشست جاری \fBbash\fP به فایل تاریخچه الحاق شده‌اند. .TP .B \-r خواندن فایل تاریخچه و الحاق محتویات آن به فهرست تاریخچهٔ جاری. .TP .B \-w نوشتن فهرست تاریخچهٔ جاری در فایل تاریخچه و رونویسی روی فایل تاریخچه. .TP .B \-p جایگزینی تاریخچه را روی \fIargs\fP داده‌شده انجام می‌دهد و نتیجه را در خروجی استاندارد نمایش می‌دهد، بدون اینکه نتایج را در فهرست تاریخچه ذخیره کند. هر \fIarg\fP باید نقل‌قول شود تا بسط عادی تاریخچه غیرفعال گردد. .TP .B \-s شناسه‌های .I args را به عنوان یک مدخل واحد در فهرست تاریخچه ذخیره می‌کند. آخرین دستور در فهرست تاریخچه، پیش از اضافه شدن .IR args حذف می‌شود. .PD .RE .IP اگر متغیر .SM .B HISTTIMEFORMAT تنظیم شده باشد، \fBhistory\fP اطلاعات برچسب زمانی مرتبط با هر مدخل تاریخچه را، همان‌طور که در بالا شرح داده شد با علامت نویسه توضیح تاریخچه نشانه‌گذاری کرده و در فایل تاریخچه می‌نویسد. هنگامی که فایل تاریخچه خوانده می‌شود، خطوطی که با نویسه توضیح تاریخچه آغاز شده و بلافاصله بعد از آن یک رقم می‌آید، به‌عنوان برچسب زمانی برای مدخل تاریخچه پس از آن تفسیر می‌شوند. .IP مقدار بازگشتی 0 است، مگر اینکه یک گزینه نامعتبر مشخص شود، خطایی هنگام خواندن یا نوشتن فایل تاریخچه رخ دهد، یک \fIoffset\fP یا محدوده نامعتبر به‌عنوان آرگومان به \fB\-d\fP داده شود، یا بسط تاریخچه ارائه‌شده به‌عنوان آرگومان به \fB\-p\fP ناموفق باشد. .TP \fBjobs\fP [\fB\-lnprs\fP] [ \fIjobspec\fP .\|.\|. ] .PD 0 .TP \fBjobs\fP \fB\-x\fP \fIcommand\fP [ \fIargs\fP .\|.\|. ] .PD شکل اول، کارهای فعال را فهرست می‌کند. گزینه‌ها معانی زیر را دارند: .RS .PD 0 .TP .B \-l شناسه‌های فرایند (PID) را علاوه بر اطلاعات عادی فهرست می‌کند. .TP .B \-n اطلاعات را تنها برای کارهایی نمایش می‌دهد که وضعیت آنها از زمان آخرین اطلاع‌رسانی به کاربر تغییر کرده است. .TP .B \-p تنها شناسه فرایند (PID) مربوط به سرگروه گروه فرایندی کار را فهرست می‌کند. .TP .B \-r تنها کارهای در حال اجرا را نمایش می‌دهد. .TP .B \-s تنها کارهای متوقف‌شده را نمایش می‌دهد. .PD .RE .IP اگر .I jobspec مشخص شده باشد، \fBjobs\fP خروجی را به اطلاعات مربوط به همان کار محدود می‌کند. وضعیت خروج 0 است، مگر اینکه یک گزینه نامعتبر یا یک .I jobspec نامعتبر ارائه شود. .IP اگر گزینه .B \-x مشخص شده باشد، .B jobs هر .I jobspec یافت‌شده در .I command یا .I args را با شناسه گروه فرایندی متناظر جایگزین می‌کند و .IR command را اجرا کرده، .IR args را به آن ارسال می‌کند و وضعیت خروج آن را بازمی‌گرداند. .TP \fBkill\fP [\fB\-s\fP \fIsigspec\fP | \fB\-n\fP \fIsignum\fP | \fB\-\fP\fIsigspec\fP] \ \fIid\fP [ .\|.\|. ] .PD 0 .TP \fBkill\fP \fB\-l\fP|\fB\-L\fP [\fIsigspec\fP | \fIexit_status\fP] .PD سیگنال مشخص‌شده توسط .I sigspec یا .I signum را به فرایندهایی که با هر .IR id مشخص شده‌اند، ارسال می‌کند. هر .I id می‌تواند یک مشخصه کار \fIjobspec\fP یا یک شناسه فرایند \fIpid\fP باشد. .I sigspec می‌تواند نام یک سیگنال بدون حساسیت به حروف بزرگ و کوچک، مانند .SM .B SIGKILL (با پیشوند .SM .B SIG یا بدون آن) یا شماره یک سیگنال باشد؛ .I signum شماره یک سیگنال است. اگر .I sigspec ارائه نشود، .B kill سیگنال .SM .BR SIGTERM را ارسال می‌کند. .IP گزینه .B \-l نام سیگنال‌ها را فهرست می‌کند. اگر هنگام استفاده از .B \-l هر آرگومانی ارائه شود، .B kill نام‌های سیگنال‌های متناظر با آن شناسه‌ها را فهرست کرده و وضعیت خروج 0 خواهد بود. شناسه \fIexit_status\fP برای .B \-l عددی است که یا یک شماره سیگنال و یا وضعیت خروج فرایندی را مشخص می‌کند که توسط یک سیگنال متوقف شده است؛ اگر ارائه شود، \fBkill\fP نام سیگنالی را چاپ می‌کند که موجب پایان فرایند شده است. \fBkill\fP فرض می‌کند وضعیت‌های خروج فرایند بزرگتر از 128 هستند؛ هر مقداری کمتر از آن، یک شماره سیگنال در نظر گرفته می‌شود. گزینه .B \-L معادل با \fB\-l\fP است. .IP دستور .B kill اگر حداقل یک سیگنال با موفقیت ارسال شود مقدار درست (true) و اگر خطایی رخ دهد یا یک گزینه نامعتبر ارائه شود مقدار نادرست (false) بازمی‌گرداند. .TP \fBlet\fP \fIarg\fP [\fIarg\fP .\|.\|.] هر .I arg به‌عنوان یک عبارت حسابی ارزیابی می‌شود (بخش .SM .B "ارزیابی حسابی (ARITHMETIC EVALUATION)" .ie \n(zZ=1 را در \fIbash\fP(1) ببینید). .el را در بالا ببینید). اگر آخرین .I arg به 0 ارزیابی شود، .B let مقدار 1 را بازمی‌گرداند؛ در غیر این صورت .B let مقدار 0 را برمی‌گرداند. .TP \fBlocal\fP [\fIoption\fP] [\fIname\fP[=\fIvalue\fP] .\|.\|. | \- ] به ازای هر آرگومان، یک متغیر محلی به نام .I name ایجاد کرده و مقدار .IR value را به آن اختصاص می‌دهد. گزینهٔ \fIoption\fP می‌تواند هر یک از گزینه‌های پذیرفته‌شده توسط \fBdeclare\fP باشد. هنگامی که .B local درون یک تابع استفاده شود، باعث می‌شود که دامنهٔ دید متغیر .I name تنها به همان تابع و فرزندان آن محدود گردد. استفاده از .B local در خارج از یک تابع خطاست. .IP اگر \fIname\fP برابر \- باشد، مجموعه گزینه‌های پوسته را برای تابعی که \fBlocal\fP در آن فراخوانی شده، محلی می‌کند: هر گزینهٔ پوسته‌ای که با استفاده از دستور توکار \fBset\fP درون تابع پس از فراخوانی \fBlocal\fP تغییر کند، پس از بازگشت تابع به مقادیر اولیه خود بازگردانده می‌شود. این بازیابی به‌گونه‌ای انجام می‌شود که گویی مجموعه‌ای از دستورات \fBset\fP برای بازگرداندن مقادیر قبلی موجود پیش از تابع اجرا شده‌اند. .IP بدون هیچ عملوندی، .B local فهرستی از متغیرهای محلی را در خروجی استاندارد می‌نویسد. .IP وضعیت بازگشتی 0 است مگر اینکه .B local خارج از یک تابع استفاده شود، یک .I name نامعتبر ارائه گردد، یا \fIname\fP یک متغیر فقط‌خواندنی باشد. .TP .B logout [\fIn\fP] خروج از یک پوستهٔ ورود به سیستم (login shell)، همراه با بازگرداندن وضعیت \fIn\fP به والد پوسته. .TP \fBmapfile\fP [\fB\-d\fP \fIdelim\fP] [\fB\-n\fP \fIcount\fP] [\fB\-O\fP \fIorigin\fP] [\fB\-s\fP \fIcount\fP] [\fB\-t\fP] [\fB\-u\fP \fIfd\fP] [\fB\-C\fP \fIcallback\fP] [\fB\-c\fP \fIquantum\fP] [\fIarray\fP] .PD 0 .TP \fBreadarray\fP [\fB\-d\fP \fIdelim\fP] [\fB\-n\fP \fIcount\fP] [\fB\-O\fP \fIorigin\fP] [\fB\-s\fP \fIcount\fP] [\fB\-t\fP] [\fB\-u\fP \fIfd\fP] [\fB\-C\fP \fIcallback\fP] [\fB\-c\fP \fIquantum\fP] [\fIarray\fP] .PD خواندن خطوط از ورودی استاندارد، یا از توصیف‌گر فایل .I fd در صورت ارائهٔ گزینهٔ .BR \-u ، در متغیر آرایهٔ اندیس‌دار .IR array . متغیر .SM .B MAPFILE مقدار پیش‌فرض \fIarray\fP است. گزینه‌ها در صورت ارائه، معانی زیر را دارند: .RS .PD 0 .TP .B \-d استفاده از نخستین نویسهٔ \fIdelim\fP برای پایان دادن به هر خط ورودی، به‌جای نویسهٔ خط جدید. اگر \fIdelim\fP یک رشتهٔ خالی باشد، \fBmapfile\fP خط را با خواندن نویسهٔ NUL پایان می‌دهد. .TP .B \-n کپی کردن حداکثر .I count خط. اگر مقدار .I count برابر 0 باشد، تمام خطوط کپی می‌شوند. .TP .B \-O شروع مقداردهی به .I array از اندیس .IR origin . اندیس پیش‌فرض 0 است. .TP .B \-s تعداد \fIcount\fP خط اول خوانده‌شده را نادیده می‌گیرد. .TP .B \-t کاراکتر پایانی \fIdelim\fP (به‌طور پیش‌فرض خط جدید یا newline) را از انتهای هر خط خوانده‌شده حذف می‌کند. .TP .B \-u خطوط را به‌جای ورودی استاندارد، از توصیف‌گر فایل \fIfd\fP می‌خواند. .TP .B \-C تابع یا دستور .I callback را هر بار پس از خواندن \fIquantum\fP خط ارزیابی و اجرا می‌کند. گزینه \fB\-c\fP مقدار .IR quantum را مشخص می‌کند. .TP .B \-c تعداد خطوط خوانده‌شده بین هر بار فراخوانی .IR callback را مشخص می‌کند. .PD .RE .IP اگر .B \-C بدون .BR \-c مشخص شود، مقدار پیش‌فرض quantum برابر ۵۰۰۰ است. هنگامی که \fIcallback\fP ارزیابی می‌شود، اندیس عنصر بعدی آرایه که قرار است مقداردهی شود و نیز خطی که قرار است به آن عنصر اختصاص یابد، به عنوان آرگومان‌های اضافی به آن ارسال می‌شوند. \fIcallback\fP پس از خوانده‌شدن خط اما پیش از اختصاص داده‌شدن آن به عنصر آرایه ارزیابی می‌شود. .IP اگر مبدأ صریحی مشخص نشده باشد، \fBmapfile\fP پیش از مقداردهی، \fIarray\fP را پاک خواهد کرد. .IP دستور \fBmapfile\fP مقدار صفر را برمی‌گرداند مگر اینکه یک گزینه یا آرگومانِ گزینه نامعتبر ارائه شده باشد، \fIarray\fP نامعتبر یا غیرقابل انتساب باشد، یا \fIarray\fP یک آرایه اندیس‌دار نباشد. .TP \fBpopd\fP [\-\fBn\fP] [+\fIn\fP] [\-\fIn\fP] ورودی‌ها را از پشته دایرکتوری حذف می‌کند. عناصر از ۰ با شروع از اولین دایرکتوری فهرست‌شده توسط \fBdirs\fP شماره‌گذاری می‌شوند، بنابراین \fBpopd\fP معادل است با .Q "popd +0." بدون هیچ آرگومانی، \fBpopd\fP بالاترین دایرکتوری را از پشته حذف کرده، و به دایرکتوری بالای پشته جدید منتقل می‌شود. آرگومان‌ها، در صورت ارائه، دارای معانی زیر هستند: .RS .PD 0 .TP .B \-n هنگام حذف دایرکتوری‌ها از پشته، از تغییر عادی دایرکتوری جلوگیری می‌کند، و تنها پشته را دستکاری می‌نماید. .TP \fB+\fP\fIn\fP با شمارش از سمت چپ فهرست نمایش داده‌شده توسط .BR dirs ، با شروع از صفر، \fIn\fPاُمین ورودی را از پشته حذف می‌کند. برای مثال: .Q "popd +0" اولین دایرکتوری را حذف می‌کند، .Q "popd +1" دومی را. .TP \fB\-\fP\fIn\fP با شمارش از سمت راست فهرست نمایش داده‌شده توسط .BR dirs ، با شروع از صفر، \fIn\fPاُمین ورودی را حذف می‌کند. برای مثال: .Q "popd \-0" آخرین دایرکتوری را حذف می‌کند، .Q "popd \-1" یکی مانده به آخر را. .PD .RE .IP اگر عنصر بالایی پشته دایرکتوری تغییر کند و گزینه \fI\-n\fP ارائه نشده باشد، \fBpopd\fP از دستور توکار \fBcd\fP برای رفتن به دایرکتوری موجود در بالای پشته استفاده می‌کند. اگر \fBcd\fP شکست بخورد، \fBpopd\fP یک مقدار غیرصفر بازمی‌گرداند. .IP در غیر این صورت، .B popd در صورتی که یک گزینه نامعتبر ارائه شده باشد، پشته دایرکتوری خالی باشد، یا \fIn\fP به ورودی ناموجودی در پشته دایرکتوری اشاره کند، مقدار نادرست (false) بازمی‌گرداند. .IP اگر دستور .B popd موفقیت‌آمیز باشد، \fBbash\fP دستور .B dirs را اجرا می‌کند تا محتویات نهایی پشته دایرکتوری را نمایش دهد، و وضعیت بازگشتی ۰ خواهد بود. .TP \fBprintf\fP [\fB\-v\fP \fIvar\fP] \fIformat\fP [\fIarguments\fP] نوشتن \fIarguments\fP باقالب‌بندی در خروجی استاندارد تحت کنترل \fIformat\fP. گزینهٔ \fB\-v\fP خروجی را به متغیر \fIvar\fP اختصاص می‌دهد به جای این‌که آن را در خروجی استاندارد چاپ کند. .IP قالب \fIformat\fP یک رشته نویسه‌ای است که شامل سه نوع شیء است: نویسه‌های معمولی، که به سادگی در خروجی استاندارد کپی می‌شوند، توالی‌های گریز نویسه‌ای، که تبدیل شده و در خروجی استاندارد کپی می‌شوند، و مشخص‌کننده‌های قالب، که هر یک باعث چاپ \fIargument\fP بعدی به ترتیب می‌شوند. علاوه بر نویسه‌های قالب استاندارد .IR printf (3) شامل .BR cCsSndiouxXeEfFgGaA ، دستور \fBprintf\fP مشخص‌کننده‌های قالب اضافی زیر را تفسیر می‌کند: .RS .PD 0 .TP .B %b باعث می‌شود \fBprintf\fP توالی‌های گریز با ممیز وارونه (backslash) را در \fIargument\fP متناظر دقیقاً همانند \fBecho \-e\fP بسط دهد. .TP .B %q باعث می‌شود \fBprintf\fP شناسهٔ \fIargument\fP متناظر را در قالبی خروجی دهد که بتوان آن را مجدداً به عنوان ورودی پوسته استفاده کرد. \fB%q\fP و \fB%Q\fP از شیوهٔ نقل‌قول \fB$\*'\*'\fP استفاده می‌کنند اگر نویسه‌ای در رشتهٔ شناسه به آن نیاز داشته باشد، و در غیر این صورت از نقل‌قول با ممیز وارونه استفاده می‌کنند. اگر رشتهٔ قالب از حالت جایگزین \fIprintf\fP استفاده کند، این دو قالب رشتهٔ شناسه را با استفاده از نقل‌قول تکی (single quote) نقل‌قول می‌کنند. .TP .B %Q مانند \fB%q\fP، اما هر دقت ارائه‌شده‌ای را پیش از نقل‌قول کردن بر روی \fIargument\fP اعمال می‌کند. .TP .B %(\fIdatefmt\fP)T باعث می‌شود \fBprintf\fP رشتهٔ تاریخ-زمان حاصل از استفاده از \fIdatefmt\fP به عنوان رشتهٔ قالب برای .IR strftime (3) را در خروجی چاپ کند. شناسهٔ \fIargument\fP متناظر یک عدد صحیح است که نمایانگر تعداد ثانیه‌ها از زمان مبدأ (epoch) می‌باشد. این مشخص‌کننده قالب دو مقدار شناسهٔ ویژه را به رسمیت می‌شناسد: \-1 نشان‌دهندهٔ زمان جاری است، و \-2 نشان‌دهندهٔ زمانی است که پوسته فراخوانی شده است. اگر هیچ شناسه‌ای مشخص نشود، تبدیل طوری رفتار می‌کند که گویی \-1 ارائه شده است. این یک استثناء بر رفتار معمول \fBprintf\fP است. .PD .RE .IP مشخص‌کننده‌های قالب %b، %q، و %T همگی از شناسه‌های پهنای فیلد و دقت از مشخصات قالب استفاده می‌کنند و به همان تعداد بایت از (یا فیلدی با آن اندازه پهنا برای) شناسهٔ بسط‌یافته می‌نویسند، که معمولاً حاوی نویسه‌های بیشتری نسبت به نسخهٔ اصلی است. .IP مشخص‌کننده قالب %n شناسهٔ متناظری را می‌پذیرد که به عنوان نام یک متغیر پوسته در نظر گرفته می‌شود. .IP مشخص‌کننده‌های قالب %s و %c یک اصلاح‌کنندهٔ l (long) را می‌پذیرند، که آنها را مجبور می‌کند رشتهٔ شناسه را به یک رشته از نویسه‌های عریض تبدیل کنند و هر پهنای فیلد و دقت ارائه‌شده را بر حسب نویسه‌ها اعمال کنند، نه بایت‌ها. مشخص‌کننده‌های قالب %S و %C به ترتیب معادل %ls و %lc هستند. .\" .IP .\" The %s format specifier understands the "altform" flag (#) and behaves .\" identically to the %b format specifier if it's supplied. .IP شناسه‌های مشخص‌کننده‌های قالب غیررشته‌ای به عنوان ثوابت C در نظر گرفته می‌شوند، با این استثناء که علامت مثبت یا منفی در ابتدای آنها مجاز است، و اگر نویسهٔ آغازین یک نقل‌قول تکی یا دوگانه باشد، مقدار برابر با مقدار عددی نویسهٔ بعدی با استفاده از محلی‌سازی (locale) جاری خواهد بود. .IP رشتهٔ \fIformat\fP در صورت نیاز مجدداً استفاده می‌شود تا تمام \fIarguments\fP مصرف شوند. اگر \fIformat\fP به \fIarguments\fP بیشتری نسبت به موارد ارائه‌شده نیاز داشته باشد، مشخصات قالب اضافی طوری رفتار می‌کنند که گویی حسب مورد، مقدار صفر یا یک رشتهٔ تهی ارائه شده است. مقدار بازگشتی در صورت موفقیت صفر، و در صورت ارائهٔ یک گزینهٔ نامعتبر یا بروز خطای نوشتن یا انتساب، غیرصفر است. .TP \fBpushd\fP [\fB\-n\fP] [+\fIn\fP] [\-\fIn\fP] .PD 0 .TP \fBpushd\fP [\fB\-n\fP] [\fIdir\fP] .PD افزودن یک دایرکتوری به بالای پشتهٔ دایرکتوری‌ها، یا چرخاندن پشته، به طوری که بالای جدید پشته دایرکتوری کاری جاری شود. بدون هیچ شناسه‌ای، دستور \fBpushd\fP دو عنصر بالای پشتهٔ دایرکتوری را با یکدیگر جابه‌جا می‌کند. شناسه‌ها، در صورت ارائه، معانی زیر را دارند: .RS .PD 0 .TP .B \-n از تغییر دایرکتوری عادی هنگام چرخش یا افزودن دایرکتوری‌ها به پشته جلوگیری می‌کند؛ تنها پشته را دستکاری می‌کند. .TP \fB+\fP\fIn\fP پشته را طوری می‌چرخاند که \fIn\fPـمین دایرکتوری (با شمارش از سمت چپِ فهرست نمایش‌داده‌شده توسط .BR dirs ، با شروع از صفر) در بالای پشته قرار گیرد. .TP \fB\-\fP\fIn\fP پشته را طوری می‌چرخاند که \fIn\fPـمین دایرکتوری (با شمارش از سمت راستِ فهرست نمایش‌داده‌شده توسط .BR dirs ، با شروع از صفر) در بالای پشته قرار گیرد. .TP .I dir دایرکتوری .I dir را به بالای پشته دایرکتوری اضافه می‌کند. .PD .RE .IP پس از تغییر پشته، اگر گزینه \fB\-n\fP مشخص نشده باشد، \fBpushd\fP از دستور توکار \fBcd\fP برای تغییر به دایرکتوری بالای پشته استفاده می‌کند. اگر \fBcd\fP ناموفق باشد، \fBpushd\fP یک مقدار غیرصفر بازمی‌گرداند. .IP در غیر این صورت، اگر هیچ آرگومانی ارائه نشود، .B pushd مقدار صفر بازمی‌گرداند مگر اینکه پشته دایرکتوری خالی باشد. هنگام چرخش پشته دایرکتوری، .B pushd مقدار صفر بازمی‌گرداند مگر اینکه پشته دایرکتوری خالی باشد یا \fIn\fP عنصری ناموجود از پشته دایرکتوری را مشخص کند. .IP اگر دستور .B pushd موفقیت‌آمیز باشد، \fBbash\fP دستور .B dirs را برای نمایش محتویات نهایی پشته دایرکتوری اجرا می‌کند. .TP \fBpwd\fP [\fB\-LP\fP] نام مسیر مطلق دایرکتوری کاری جاری را چاپ می‌کند. مسیر چاپ‌شده شامل هیچ پیوند نمادینی نخواهد بود اگر گزینه .B \-P ارائه شده باشد یا گزینه .B \-o physical برای دستور توکار .B set فعال باشد. اگر از گزینه .B \-L استفاده شود، مسیر چاپ‌شده ممکن است شامل پیوندهای نمادین باشد. وضعیت بازگشتی 0 است مگر اینکه هنگام خواندن نام دایرکتوری جاری خطایی رخ دهد یا گزینه‌ای نامعتبر ارائه شود. .TP \fBread\fP [\fB\-Eers\fP] [\fB\-a\fP \fIaname\fP] \ [\fB\-d\fP \fIdelim\fP] [\fB\-i\fP \fItext\fP] \ [\fB\-n\fP \fInchars\fP] [\fB\-N\fP \fInchars\fP] \ [\fB\-p\fP \fIprompt\fP] [\fB\-t\fP \fItimeout\fP] \ [\fB\-u\fP \fIfd\fP] [\fIname\fP .\|.\|.] یک سطر از ورودی استاندارد، یا از توصیف‌گر فایل \fIfd\fP که به عنوان آرگومان به گزینه \fB\-u\fP داده شده است، می‌خواند، آن را طبق آنچه .ie \n(zZ=1 در \fIbash\fP (1) .el در بالا تحت بخش \fBتفکیک کلمات (Word Splitting)\fP شرح داده شده به کلمات تفکیک می‌کند، و اولین کلمه را به اولین .IR name ، دومین کلمه را به دومین .IR name و به همین ترتیب اختصاص می‌دهد. اگر تعداد کلمات بیشتر از نام‌ها باشد، کلمات باقی‌مانده و جداکننده‌های میانی آن‌ها به آخرین .IR name اختصاص می‌یابند. اگر تعداد کلمات خوانده‌شده از جریان ورودی کمتر از نام‌ها باشد، به نام‌های باقی‌مانده مقادیر خالی اختصاص داده می‌شود. نویسه‌ها در مقدار متغیر .SM .B IFS برای تفکیک سطر به کلمات با استفاده از همان قواعدی که پوسته برای بسط به کار می‌برد استفاده می‌شوند (شرح داده شده .ie \n(zZ=1 در \fIbash\fP (1) .el در بالا تحت بخش \fBتفکیک کلمات (Word Splitting)\fP). نویسه بک‌اسلش (\fB\e\fP) هرگونه معنای ویژه را از نویسه بعدی که خوانده می‌شود حذف می‌کند و برای ادامه سطر استفاده می‌شود. .IP گزینه‌ها، در صورت ارائه، معانی زیر را دارند: .RS .PD 0 .TP .B \-a \fIaname\fP کلمات به اندیس‌های متوالی متغیر آرایه‌ای .IR aname ، شروع از ۰، اختصاص داده می‌شوند. .I aname پیش از انتساب هر مقدار جدید، لغو مقدار (unset) می‌شود. سایر آرگومان‌های \fIname\fP نادیده گرفته می‌شوند. .TP .B \-d \fIdelim\fP نخستین نویسه از \fIdelim\fP به جای خط جدید، به خط ورودی پایان می‌دهد. اگر \fIdelim\fP یک رشته خالی باشد، \fBread\fP هنگام خواندن یک نویسه NUL، خط را خاتمه می‌دهد. .TP .B \-e اگر ورودی استاندارد از یک ترمینال می‌آید، \fBread\fP از .B readline (ببینید .SM .B READLINE .ie \n(zZ=1 in \fIbash\fP(1)) .el above) برای دریافت خط استفاده می‌کند. \fBReadline\fP از تنظیمات ویرایش جاری (یا پیش‌فرض، اگر ویرایش خط قبلاً فعال نبوده است) استفاده می‌کند، اما از تکمیل نام فایل پیش‌فرضِ \fBreadline\fP استفاده می‌نماید. .TP .B \-E اگر ورودی استاندارد از یک ترمینال می‌آید، \fBread\fP از .B readline (ببینید .SM .B READLINE .ie \n(zZ=1 in \fIbash\fP(1)) .el above) برای دریافت خط استفاده می‌کند. .B Readline از تنظیمات ویرایش جاری (یا پیش‌فرض، اگر ویرایش خط قبلاً فعال نبوده است) استفاده می‌کند، اما از تکمیل پیش‌فرض bash، از جمله تکمیل برنامه‌پذیر (programmable completion) استفاده می‌نماید. .TP .B \-i \fItext\fP اگر .B readline برای خواندن خط به کار گرفته شده باشد، \fBread\fP متن \fItext\fP را پیش از آغاز ویرایش در بافر ویرایش قرار می‌دهد. .TP .B \-n \fInchars\fP دستور \fBread\fP پس از خواندن \fInchars\fP نویسه به جای انتظار برای یک خط ورودی کامل، بازمی‌گردد، مگر آنکه با EOF روبرو شود یا مهلت زمانی \fBread\fP پایان یابد، اما اگر پیش از نویسهٔ جداکننده کمتر از \fInchars\fP نویسه خوانده باشد، جداکننده را رعایت می‌کند. .TP .B \-N \fInchars\fP دستور \fBread\fP دقیقاً پس از خواندن \fInchars\fP نویسه به جای انتظار برای یک خط ورودی کامل، بازمی‌گردد، مگر اینکه با EOF مواجه شود یا زمان \fBread\fP به سر رسد. هیچ نویسهٔ جداکننده‌ای در ورودی به‌طور خاص در نظر گرفته نمی‌شود و تا زمانی که \fInchars\fP نویسه خوانده نشود، باعث بازگشت \fBread\fP نخواهد شد. نتیجه روی نویسه‌های درون \fBIFS\fP تفکیک نمی‌شود؛ هدف این است که دقیقاً نویسه‌های خوانده‌شده به متغیر اختصاص داده شوند (به استثنای بک‌اسلش؛ گزینهٔ \fB\-r\fP در زیر را ببینید). .TP .B \-p \fIprompt\fP پیش از تلاش برای خواندن هرگونه ورودی، اعلانِ \fIprompt\fP را بدون خط جدیدِ پایانی روی خطای استاندارد نمایش می‌دهد، اما تنها در صورتی که ورودی از ترمینال باشد. .TP .B \-r بک‌اسلش به‌عنوان یک نویسه گریز (escape) عمل نمی‌کند. بک‌اسلش جزئی از خط به شمار می‌آید. به‌ویژه، یک جفت بک‌اسلش-خط‌جدید نمی‌تواند برای ادامهٔ خط استفاده شود. .TP .B \-s حالت خاموش (بی‌صدا). اگر ورودی از ترمینال می‌آید، نویسه‌ها اکو (نمایش داده) نمی‌شوند. .TP .B \-t \fItimeout\fP باعث می‌شود \fBread\fP در صورتی که نتواند یک خط ورودی کامل (یا تعداد نویسه‌های مشخص‌شده) را ظرف \fItimeout\fP ثانیه بخواند، با اتمام مهلت مواجه شده و وضعیت شکست بازگرداند. \fItimeout\fP می‌تواند یک عدد اعشاری با یک بخش کسری پس از ممیز اعشار باشد. این گزینه فقط زمانی مؤثر است که \fBread\fP ورودی را از یک ترمینال، لوله (pipe)، یا دیگر فایل‌های خاص می‌خواند؛ و هنگام خواندن از فایل‌های معمولی هیچ اثری ندارد. اگر زمان \fBread\fP به سر رسد، هر ورودیِ جزئیِ خوانده‌شده را در متغیر مشخص‌شدهٔ \fIname\fP ذخیره می‌کند، و وضعیت خروج بزرگ‌تر از ۱۲۸ خواهد بود. اگر \fItimeout\fP برابر ۰ باشد، \fBread\fP بلافاصله و بدون تلاش برای خواندن هیچ داده‌ای، بازمی‌گردد. در این حالت، اگر ورودی روی توصیف‌گر فایلِ مشخص‌شده در دسترس باشد، وضعیت خروج ۰ است، یا خواندن مقدار EOF را بازمی‌گرداند؛ در غیر این صورت مقداری غیر صفر خواهد بود. .TP .B \-u \fIfd\fP خواندن ورودی از توصیف‌گر فایل \fIfd\fP به جای ورودی استاندارد. .PD .RE .IP به جز در حالتی که \fIdelim\fP یک رشته خالی باشد، \fBread\fP هرگونه نویسه NUL را در ورودی نادیده می‌گیرد. .IP اگر هیچ .I names مشخص نشود، \fBread\fP خط خوانده‌شده را، بدون جداکننده پایانی اما بدون هیچ تغییر دیگری، به متغیر .SM .BR REPLY اختصاص می‌دهد. .IP وضعیت خروج صفر است، مگر اینکه با پایان فایل (end-of-file) مواجه شود، مهلت زمانی \fBread\fP به پایان برسد (که در این حالت وضعیت بزرگ‌تر از ۱۲۸ است)، خطای انتساب متغیر (مانند انتساب به یک متغیر فقط‌خواندنی) رخ دهد، یا یک توصیف‌گر فایل نامعتبر به‌عنوان آرگومان برای \fB\-u\fP ارائه شده باشد. .TP \fBreadonly\fP [\fB\-aAf\fP] [\fB\-p\fP] [\fIname\fP[=\fIword\fP] .\|.\|.] .PD شناسه‌های \fInames\fP داده‌شده به‌عنوان فقط‌خواندنی (readonly) علامت‌گذاری می‌شوند؛ مقادیر این .I names را نمی‌توان با انتساب بعدی تغییر داد یا حذف کرد (unset). اگر گزینه .B \-f داده شود، هر \fIname\fP به یک تابع پوسته اشاره دارد. گزینه .B \-a متغیرها را به آرایه‌های اندیسی محدود می‌کند؛ گزینه .B \-A متغیرها را به آرایه‌های انجمنی محدود می‌سازد. اگر هر دو گزینه داده شوند، .B \-A اولویت دارد. اگر هیچ آرگومان .I name ارائه نشود، یا اگر گزینه .B \-p داده شود، فهرستی از تمام نام‌های فقط‌خواندنی چاپ می‌شود. سایر گزینه‌ها ممکن است برای محدود کردن خروجی به زیرمجموعه‌ای از مجموعه نام‌های فقط‌خواندنی استفاده شوند. گزینه .B \-p خروجی را در قالبی نمایش می‌دهد که می‌تواند دوباره به‌عنوان ورودی مورد استفاده قرار گیرد. .IP دستور \fBreadonly\fP این امکان را فراهم می‌کند که مقدار یک متغیر هم‌زمان با تغییر صفت فقط‌خواندنی، با قرار دادن =\fIvalue\fP پس از نام متغیر تنظیم شود. این کار مقدار متغیر را روی \fIvalue\fP تنظیم می‌کند و در عین حال صفت فقط‌خواندنی را تغییر می‌دهد. .IP وضعیت بازگشت ۰ است مگر اینکه با گزینه‌ای نامعتبر مواجه شود، یکی از .I names یک نام معتبر برای متغیر پوسته نباشد، یا .B \-f همراه با یک .I name که تابع نیست ارائه شده باشد. .TP \fBreturn\fP [\fIn\fP] توقف اجرای یک تابع پوسته یا فایل منبع‌شده (sourced file) و بازگرداندن مقدار مشخص‌شده توسط .I n به فراخواننده‌اش. اگر .I n حذف شود، وضعیت بازگشت همان وضعیت آخرین دستور اجرا شده است. اگر \fBreturn\fP توسط یک گرداننده تله (trap handler) اجرا شود، آخرین دستور استفاده‌شده برای تعیین وضعیت، آخرین دستور اجرا شده قبل از گرداننده تله است. اگر \fBreturn\fP در حین تله \fBDEBUG\fP اجرا شود، آخرین دستور استفاده‌شده برای تعیین وضعیت، آخرین دستور اجرا شده توسط گرداننده تله پیش از فراخوانی \fBreturn\fP است. .IP هنگامی که .B return برای خاتمه دادن به اجرای اسکریپتی که توسط دستور .B . (\fBsource\fP) در حال اجراست استفاده شود، باعث می‌شود پوسته اجرای آن اسکریپت را متوقف کند و .I n یا وضعیت خروج آخرین دستور اجرا شده در اسکریپت را به‌عنوان وضعیت خروج اسکریپت بازگرداند. اگر \fIn\fP مشخص شده باشد، مقدار بازگشتی ۸ بیت کم‌ارزش‌تر آن است. .IP هر دستوری که با تله \fBRETURN\fP مرتبط باشد، قبل از اینکه ادامه اجرای برنامه پس از تابع یا اسکریپت از سر گرفته شود، اجرا می‌گردد. .IP وضعیت بازگشت غیرصفر است اگر به .B return یک آرگومان غیرعددی داده شود، یا در خارج از یک تابع و نه در طول اجرای یک اسکریپت توسط \fB.\fP\^ یا \fBsource\fP استفاده شود. .TP \fBset\fP [\fB\-abefhkmnptuvxBCEHPT\fP] [\fB\-o\fP \fIoption\-name\fP] \ [\fB\-\-\fP] [\fB\-\fP] [\fIarg\fP .\|.\|.] .PD 0 .TP \fBset\fP [\fB+abefhkmnptuvxBCEHPT\fP] [\fB+o\fP \fIoption\-name\fP] \ [\fB\-\-\fP] [\fB\-\fP] [\fIarg\fP .\|.\|.] .TP \fBset \-o\fP .TP \fBset +o\fP .PD بدون گزینه‌ها، نام و مقدار هر متغیر پوسته را در قالبی نمایش می‌دهد که می‌تواند مجدداً به عنوان ورودی برای تنظیم یا بازنشانی متغیرهای فعلاً تنظیم‌شده استفاده شود. متغیرهای فقط‌خواندنی قابل بازنشانی نیستند. در حالت posix، فقط متغیرهای پوسته فهرست می‌شوند. خروجی بر اساس لوکال (locale) فعلی مرتب می‌شود. هنگامی که گزینه‌ها مشخص شوند، ویژگی‌های پوسته را تنظیم یا لغو می‌کنند. هرگونه آرگومان باقی‌مانده پس از پردازش گزینه‌ها، به عنوان مقادیر برای پارامترهای مکانی در نظر گرفته شده و به ترتیب به .BR $1 ، .BR $2 ، \&.\|.\|.، .BR $\fIn\fP اختصاص می‌یابند. گزینه‌ها در صورت تعیین شدن، معانی زیر را دارند: .RS .PD 0 .TP 8 .B \-a به هر متغیر یا تابعی که ایجاد یا تغییر داده می‌شود، صفت export داده شده و برای برون‌ریزی به محیط دستورات بعدی نشانه‌گذاری می‌شود. .TP 8 .B \-b وضعیت کارهای پس‌زمینه پایان‌یافته را فوراً گزارش می‌دهد، نه قبل از اعلان اولیه بعدی یا پس از پایان یک دستور پیش‌زمینه. این تنها زمانی مؤثر است که مدیریت کارها فعال باشد. .TP 8 .B \-e .PD اگر یک \fIخط لوله\fP (که ممکن است شامل یک \fIدستور ساده\fP باشد)، یک \fIفهرست\fP، یا یک \fIدستور مرکب\fP (نگاه کنید به .SM .B "گرامر پوسته (SHELL GRAMMAR)" .ie \n(zZ=1 در \fIbash\fP(1))، .el در بالا)، با یک وضعیت غیرصفر خارج شود، بلافاصله خارج می‌شود. پوسته خارج نمی‌شود اگر دستوری که با شکست مواجه می‌شود بخشی از فهرست دستوراتی باشد که بلافاصله پس از کلمه رزرو شده .B while یا .B until می‌آید، بخشی از آزمون پس از کلمات رزرو شده .B if یا .B elif باشد، بخشی از هر دستوری باشد که در یک فهرست .B && یا .B || اجرا می‌شود به جز دستوری که پس از آخرین \fB&&\fP یا \fB||\fP می‌آید، هر دستوری در یک خط لوله به جز آخرین دستور باشد (مشروط به وضعیت گزینه پوسته \fBpipefail\fP)، یا اگر مقدار بازگشتی دستور با .BR ! معکوس شده باشد. اگر یک دستور مرکب غیر از یک زیرپوسته (subshell) به دلیل شکست دستوری در حالی که \fB\-e\fP نادیده گرفته می‌شده، وضعیت غیرصفر برگرداند، پوسته خارج نمی‌شود. یک تله (trap) روی \fBERR\fP، در صورت تنظیم بودن، پیش از خروج پوسته اجرا می‌شود. این گزینه برای محیط پوسته و هر محیط زیرپوسته به‌طور جداگانه اعمال می‌شود (نگاه کنید به .SM .B "محیط اجرای دستور (COMMAND EXECUTION ENVIRONMENT)" .ie \n(zZ=1 در \fIbash\fP(1))، .el در بالا)، و ممکن است باعث شود زیرپوسته‌ها پیش از اجرای همه دستورات موجود در زیرپوسته خارج شوند. .IP اگر یک دستور مرکب یا تابع پوسته در زمینه‌ای اجرا شود که در آن \fB\-e\fP نادیده گرفته می‌شود، هیچ‌یک از دستورات اجرا شده در داخل بدنه دستور مرکب یا تابع تحت تأثیر تنظیمات \fB\-e\fP قرار نخواهند گرفت، حتی اگر \fB\-e\fP تنظیم شده باشد و یک دستور وضعیت شکست برگرداند. اگر یک دستور مرکب یا تابع پوسته هنگام اجرا در زمینه‌ای که \fB\-e\fP در آن نادیده گرفته می‌شود، \fB\-e\fP را تنظیم کند، این تنظیم تا زمانی که دستور مرکب یا دستوری که حاوی فراخوانی تابع است کامل نشود، هیچ اثری نخواهد داشت. .PD 0 .TP 8 .B \-f غیرفعال کردن بسط نام مسیر (pathname expansion). .TP 8 .B \-h به‌خاطر سپردن مکان دستورها هنگام جستجو برای اجرا. این گزینه به‌طور پیش‌فرض فعال است. .TP 8 .B \-k تمام آرگومان‌ها در قالب عبارات انتساب در محیط دستور قرار می‌گیرند، نه فقط آن‌هایی که قبل از نام دستور می‌آیند. .TP 8 .B \-m حالت پایش (Monitor mode). مدیریت کارها فعال می‌شود. این گزینه به‌طور پیش‌فرض برای پوسته‌های تعاملی در سیستم‌هایی که از آن پشتیبانی می‌کنند روشن است (ببینید .SM .B "مدیریت کارها (JOB CONTROL)" .ie \n(zZ=1 in \fIbash\fP(1)). .el در بالا). تمام فرآیندها در یک گروه فرآیند جداگانه اجرا می‌شوند. هنگامی که یک کار پس‌زمینه کامل می‌شود، پوسته خطی شامل وضعیت خروج آن چاپ می‌کند. .TP 8 .B \-n خواندن دستورها بدون اجرای آن‌ها. این می‌تواند برای بررسی خطاهای نحوی یک اسکریپت پوسته استفاده شود. توسط پوسته‌های تعاملی نادیده گرفته می‌شود. .TP 8 .B \-o \fIoption\-name\fP مقدار \fIoption\-name\fP می‌تواند یکی از موارد زیر باشد: .RS .TP 8 .B allexport مشابه .BR \-a . .TP 8 .B braceexpand مشابه .BR \-B . .TP 8 .B emacs استفاده از رابط ویرایش خط فرمان به سبک emacs. این گزینه به‌طور پیش‌فرض زمانی که پوسته تعاملی است فعال است، مگر اینکه پوسته با گزینه .B \-\-noediting آغاز شده باشد. این همچنین بر رابط ویرایش مورد استفاده برای \fBread \-e\fP تأثیر می‌گذارد. .TP 8 .B errexit مشابه .BR \-e . .TP 8 .B errtrace مشابه .BR \-E . .TP 8 .B functrace مشابه .BR \-T . .TP 8 .B hashall مشابه .BR \-h . .TP 8 .B histexpand مشابه .BR \-H . .TP 8 .B history فعال کردن تاریخچه دستورها، همان‌طور که توضیح داده شده است .ie \n(zZ=1 in \fIbash\fP(1) .el در بالا در بخش .SM .BR "تاریخچه (HISTORY)" . این گزینه به‌طور پیش‌فرض در پوسته‌های تعاملی روشن است. .TP 8 .B ignoreeof تأثیر آن مانند این است که دستور پوسته .QN "IGNOREEOF=10" اجرا شده باشد (ببینید .B "متغیرهای پوسته (Shell Variables)" .ie \n(zZ=1 in \fIbash\fP(1)). .el در بالا). .TP 8 .B keyword مشابه .BR \-k . .TP 8 .B monitor همانند .BR \-m . .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 onecmd همانند .BR \-t . .TP 8 .B physical همانند .BR \-P . .TP 8 .B pipefail اگر تنظیم شود، مقدار بازگشتی یک خط لوله (pipeline) برابر با مقدار آخرین (راست‌ترین) دستوری است که با وضعیتی غیر از صفر خارج شده است، یا صفر اگر تمام دستورات درون خط لوله با موفقیت پایان یابند. این گزینه به صورت پیش‌فرض غیرفعال است. .TP 8 .B posix فعال‌سازی حالت posix؛ تغییر رفتار .B bash در مواردی که عملکرد پیش‌فرض با استاندارد .SM POSIX متفاوت است تا با این استاندارد مطابقت یابد. ببینید .SM .B "همچنین ببینید (SEE ALSO)" .ie \n(zZ=1 in \fIbash\fP(1) .el در زیر برای ارجاع به سندی که جزئیات چگونگی تأثیر حالت posix بر رفتار bash را شرح می‌دهد. .TP 8 .B privileged همانند .BR \-p . .TP 8 .B verbose همانند .BR \-v . .TP 8 .B vi استفاده از یک رابط ویرایش خط فرمان به سبک vi. این گزینه همچنین بر رابط ویرایش مورد استفاده برای \fBread \-e\fP اثر می‌گذارد. .TP 8 .B xtrace همانند .BR \-x . .PP اگر .B \-o بدون هیچ \fIoption\-name\fP ارائه‌ شود، \fBset\fP تنظیمات کنونی گزینه‌های پوسته را چاپ می‌کند. اگر .B +o بدون هیچ \fIoption\-name\fP ارائه شود، \fBset\fP یک سری از دستورات .B set را برای بازسازی تنظیمات کنونی گزینه‌ها در خروجی استاندارد چاپ می‌کند. .RE .TP 8 .B \-p روشن کردن حالت .IR privileged . در این حالت، پوسته فایل‌های .SM .B $ENV و .SM .B $BASH_ENV را نمی‌خواند، توابع پوسته از محیط به ارث برده نمی‌شوند، و متغیرهای .SM .BR SHELLOPTS ، .SM .BR BASHOPTS ، .SM .BR CDPATH ، و .SM .B GLOBIGNORE در صورت حضور در محیط نادیده گرفته می‌شوند. اگر پوسته با شناسه کاربری (گروهی) مؤثری آغاز شود که با شناسه کاربری (گروهی) واقعی برابر نیست و گزینه \fB\-p\fP ارائه نشده باشد، این اقدامات انجام می‌شوند و شناسه کاربری مؤثر به شناسه کاربری واقعی تغییر می‌یابد. اگر گزینه \fB\-p\fP هنگام راه‌اندازی ارائه شود، شناسه کاربری مؤثر بازنشانی نمی‌شود. خاموش کردن این گزینه باعث می‌شود که شناسه‌های کاربری و گروهی مؤثر به شناسه‌های کاربری و گروهی واقعی بازگردانده شوند. .TP 8 .B \-r فعال‌سازی حالت پوستهٔ محدود (restricted shell). این گزینه پس از تنظیم شدن، دیگر قابل غیرفعال کردن نیست. .TP 8 .B \-t خروج پس از خواندن و اجرای یک دستور. .TP 8 .B \-u هنگام انجام بسط پارامتر، با متغیرها و پارامترهای مقداردهی‌نشده (به‌جز پارامترهای ویژهٔ .Q @ و .Q * ، یا متغیرهای آرایه‌ای با اندیس .Q @ یا .Q * ) به‌عنوان خطا رفتار می‌کند. اگر تلاشی برای بسط یک متغیر یا پارامتر مقداردهی‌نشده انجام شود، پوسته یک پیام خطا چاپ کرده و اگر تعاملی نباشد، با وضعیتی غیرصفر خارج می‌شود. .TP 8 .B \-v چاپ خطوط ورودی پوسته به همان صورتی که خوانده می‌شوند. .TP 8 .B \-x پس از بسط هر \fIsimple command\fP (دستور ساده)، دستور \fBfor\fP، دستور \fBcase\fP، دستور \fBselect\fP یا دستور حسابی \fBfor\fP، مقدار بسط‌یافتهٔ .SM .BR PS4 را نمایش می‌دهد که به دنبال آن دستور و آرگومان‌های بسط‌یافته‌اش یا فهرست کلمات مرتبط، در خروجی خطای استاندارد (standard error) چاپ می‌شود. .TP 8 .B \-B پوسته بسط آکولاد را انجام می‌دهد (ببینید .B "بسط آکولاد (Brace Expansion)" .ie \n(zZ=1 in \fIbash\fP(1)). .el را در بالا). این گزینه به‌طور پیش‌فرض فعال است. .TP 8 .B \-C در صورت تنظیم، .B bash یک فایل موجود را با عملگرهای تغییر مسیر .BR > ، .BR >& و .B <> رونویسی (overwrite) نمی‌کند. استفاده از عملگر تغییر مسیر .B >| به جای .B > این مورد را نادیده می‌گیرد و ایجاد یک فایل خروجی را اجباری می‌کند. .TP 8 .B \-E در صورت تنظیم، هرگونه تله (trap) روی \fBERR\fP توسط توابع پوسته، جایگزینی‌های دستور، و دستورات اجراشده در محیط زیرپوسته (subshell) به ارث برده می‌شود. تلهٔ \fBERR\fP در چنین مواردی معمولاً به ارث برده نمی‌شود. .TP 8 .B \-H فعال‌سازی جایگزینی تاریخچه به سبک .BR ! . این گزینه به‌طور پیش‌فرض زمانی که پوسته تعاملی باشد فعال است. .TP 8 .B \-P در صورت تنظیم، پوسته هنگام اجرای دستوراتی مانند .B cd که دایرکتوری کاری جاری را تغییر می‌دهند، پیوندهای نمادین (symbolic links) را دنبال و حل نمی‌کند. در عوض از ساختار فیزیکی دایرکتوری استفاده می‌کند. به‌طور پیش‌فرض، .B bash هنگام اجرای دستوراتی که دایرکتوری جاری را تغییر می‌دهند، زنجیرهٔ منطقی دایرکتوری‌ها را دنبال می‌کند. .TP 8 .B \-T در صورت تنظیم، هرگونه تله روی \fBDEBUG\fP و \fBRETURN\fP توسط توابع پوسته، جایگزینی‌های دستور، و دستورات اجراشده در محیط زیرپوسته به ارث برده می‌شود. تله‌های \fBDEBUG\fP و \fBRETURN\fP معمولاً در چنین مواردی به ارث برده نمی‌شوند. .TP 8 .B \-\- اگر هیچ آرگومانی به دنبال این گزینه نیاید، پارامترهای مکانی مقداردهی‌نشده (unset) می‌شوند. در غیر این صورت، پارامترهای مکانی را برابر با \fIarg\fPها قرار می‌دهد، حتی اگر برخی از آن‌ها با یک .B \- شروع شوند. .TP 8 .B \- پایان گزینه‌ها را اعلام کرده و تمام \fIarg\fPهای باقی‌مانده را به پارامترهای موضعی اختصاص می‌دهد. گزینه‌های .B \-x و .B \-v خاموش (غیرفعال) می‌شوند. اگر هیچ \fIarg\fPای وجود نداشته باشد، پارامترهای موضعی بدون تغییر باقی می‌مانند. .PD .PP گزینه‌ها به‌طور پیش‌فرض غیرفعال هستند مگر آنکه خلاف آن ذکر شده باشد. استفاده از + به‌جای \- باعث غیرفعال شدن این گزینه‌ها می‌شود. گزینه‌ها را می‌توان به‌عنوان آرگومان هنگام فراخوانی پوسته نیز مشخص کرد. مجموعه گزینه‌های فعلی را می‌توان در .BR $\- یافت. وضعیت بازگشتی همیشه صفر است مگر آنکه با یک گزینه نامعتبر مواجه شود. .RE .TP \fBshift\fP [\fIn\fP] تغییر نام پارامترهای موضعی از \fIn\fP+1 .\|.\|.\& به .B $1 .B .\|.\|.. پارامترهایی که با شماره‌های \fB$#\fP تا \fB$#\fP\-\fIn\fP+1 مشخص شده‌اند، حذف می‌شوند (unset می‌شوند). .I n باید یک عدد غیرمنفی کمتر یا مساوی با \fB$#\fP باشد. اگر .I n برابر 0 باشد، هیچ پارامتری تغییر نمی‌کند. اگر .I n داده نشود، فرض می‌شود 1 است. اگر .I n بزرگتر از \fB$#\fP باشد، پارامترهای موضعی تغییر نمی‌کنند. وضعیت بازگشتی بزرگتر از صفر خواهد بود اگر .I n بزرگتر از .B $# یا کمتر از صفر باشد؛ در غیر این صورت 0 است. .TP \fBshopt\fP [\fB\-pqsu\fP] [\fB\-o\fP] [\fIoptname\fP .\|.\|.] تغییر وضعیت مقادیر تنظیماتی که رفتارهای اختیاری پوسته را کنترل می‌کنند. این تنظیمات می‌توانند موارد فهرست‌شده در زیر باشند، یا اگر گزینه .B \-o استفاده شود، گزینه‌های موجود با گزینه .B \-o برای دستور توکار \fBset\fP خواهند بود. .IP بدون هیچ گزینه‌ای، یا با گزینه .BR \-p ، فهرستی از تمام گزینه‌های قابل تنظیم را به همراه نمایش وضعیت فعال یا غیرفعال بودن هر یک نشان می‌دهد؛ اگر هرگونه \fIoptname\fP ارائه شود، خروجی به آن گزینه‌ها محدود می‌شود. گزینه \fB\-p\fP خروجی را به شکلی نمایش می‌دهد که می‌تواند مجدداً به‌عنوان ورودی استفاده شود. .IP سایر گزینه‌ها معانی زیر را دارند: .RS .PD 0 .TP .B \-s فعال کردن (تنظیم) هر \fIoptname\fP. .TP .B \-u غیرفعال کردن (لغو تنظیم) هر \fIoptname\fP. .TP .B \-q خروجی عادی را سرکوب می‌کند (حالت بی‌صدا)؛ وضعیت بازگشتی مشخص می‌کند که آیا \fIoptname\fP فعال است یا غیرفعال. اگر چند آرگومان \fIoptname\fP همراه با .B \-q ارائه شوند، در صورتی که تمام \fIoptname\fPها فعال باشند وضعیت بازگشتی صفر خواهد بود؛ در غیر این صورت غیرصفر است. .TP .B \-o مقادیر \fIoptname\fP را به مواردی که برای گزینه .B \-o دستور توکار .B set تعریف شده‌اند، محدود می‌کند. .PD .PP اگر هر یک از گزینه‌های .B \-s یا .B \-u بدون هیچ آرگومان \fIoptname\fP استفاده شود، .B shopt به‌ترتیب تنها آن دسته از گزینه‌هایی را نشان می‌دهد که فعال یا غیرفعال هستند. مگر در مواردی که خلاف آن ذکر شده باشد، گزینه‌های \fBshopt\fP به‌طور پیش‌فرض غیرفعال (لغو شده) هستند. .PP وضعیت بازگشتی هنگام فهرست کردن گزینه‌ها در صورتی که تمام \fIoptname\fPها فعال باشند صفر، و در غیر این صورت غیرصفر است. هنگام تنظیم یا لغو تنظیم گزینه‌ها، وضعیت بازگشتی صفر است مگر اینکه یک \fIoptname\fP گزینه معتبری برای پوسته نباشد. .PP فهرست گزینه‌های \fBshopt\fP عبارت است از: .PP .PD 0 .TP 8 .B array_expand_once در صورت تنظیم، پوسته از ارزیابی چندباره زیرنویس‌های آرایه‌های انجمنی و اندیسی در طول ارزیابی عبارات حسابی، هنگام اجرای دستورات توکاری که می‌توانند تخصیص متغیر انجام دهند، و هنگام اجرای دستورات توکاری که ارجاع‌زدایی آرایه را انجام می‌دهند، جلوگیری می‌کند. .TP 8 .B assoc_expand_once منسوخ‌شده؛ مترادفی برای \fBarray_expand_once\fP. .TP 8 .B autocd در صورت تنظیم، نام دستوری که نام یک دایرکتوری باشد به‌گونه‌ای اجرا می‌شود که گویی آرگومانی برای دستور \fBcd\fP بوده است. این گزینه فقط توسط پوسته‌های تعاملی استفاده می‌شود. .TP 8 .B bash_source_fullpath در صورت تنظیم، نام فایل‌های اضافه‌شده به متغیر آرایه‌ای \fBBASH_SOURCE\fP به نام مسیرهای کامل تبدیل می‌شوند (بخش \fBمتغیرهای پوسته (Shell Variables)\fP در بالا را ببینید). .TP 8 .B cdable_vars در صورت تنظیم، آرگومان ارائه‌شده به دستور توکار .B cd که یک دایرکتوری نباشد، به‌عنوان نام متغیری در نظر گرفته می‌شود که مقدار آن دایرکتوری مورد نظر برای تغییر مسیر است. .TP 8 .B cdspell در صورت تنظیم، دستور .B cd تلاش می‌کند خطاهای املایی جزئی در بخش‌های تشکیل‌دهنده نام دایرکتوری را تصحیح کند. خطاهای جزئی شامل جابه‌جایی نویسه‌ها، یک نویسه جاافتاده، و یک نویسه اضافه است. اگر \fBcd\fP نام دایرکتوری را تصحیح کند، نام فایل تصحیح‌شده را چاپ می‌کند و اجرای دستور ادامه می‌یابد. این گزینه فقط توسط پوسته‌های تعاملی استفاده می‌شود. .TP 8 .B checkhash در صورت تنظیم، \fBbash\fP پیش از تلاش برای اجرای فرمانی که در جدول هش یافت شده است، وجود آن را بررسی می‌کند. اگر دستور هش‌شده دیگر وجود نداشته باشد، \fBbash\fP یک جستجوی مسیر عادی انجام می‌دهد. .TP 8 .B checkjobs در صورت تنظیم، \fBbash\fP وضعیت تمام کارهای متوقف‌شده و در حال اجرا را قبل از خروج از یک پوسته تعاملی فهرست می‌کند. اگر کاری در حال اجرا باشد، \fBbash\fP خروج را به تعویق می‌اندازد تا زمانی که تلاش دومی برای خروج بدون اجرای دستوری در این میان انجام شود (بخش .SM .B "مدیریت کارها (JOB CONTROL)" .ie \n(zZ=1 در \fIbash\fP(1) را ببینید). .el در بالا را ببینید). اگر کاری متوقف شده باشد، پوسته همیشه خروج را به تعویق می‌اندازد. .TP 8 .B checkwinsize در صورت تنظیم، \fBbash\fP اندازه پنجره را پس از هر دستور خارجی (غیرتوکار) بررسی می‌کند و در صورت نیاز، مقادیر .SM .B LINES و .SM .BR COLUMNS را با استفاده از توصیف‌گر فایل مرتبط با خطای استاندارد (standard error) در صورتی که یک ترمینال باشد، به‌روزرسانی می‌نماید. این گزینه به‌طور پیش‌فرض فعال است. .TP 8 .B cmdhist در صورت تنظیم، .B bash تلاش می‌کند تا تمام خطوط یک دستور چندخطی را در همان مدخل تاریخچه ذخیره کند. این امکان ویرایش مجدد و آسان دستورات چندخطی را فراهم می‌سازد. این گزینه به‌طور پیش‌فرض فعال است، اما تنها در صورتی تأثیر دارد که تاریخچه دستورات فعال باشد، همان‌طور که .ie \n(zZ=1 در \fIbash\fP(1) .el در بالا ذیل .SM .BR "تاریخچه (HISTORY)" شرح داده شده است. .PD 0 .TP 8 .B compat31 .TP 8 .B compat32 .TP 8 .B compat40 .TP 8 .B compat41 .TP 8 .B compat42 .TP 8 .B compat43 .TP 8 .B compat44 .PD این گزینه‌ها جنبه‌های مختلف حالت سازگاری پوسته را کنترل می‌کنند (ببینید .SM .B "حالت سازگاری پوسته (SHELL COMPATIBILITY MODE)" .ie \n(zZ=1 in \fIbash\fP(1)). .el در زیر). .PD 0 .TP 8 .B complete_fullquote در صورت تنظیم بودن، .B bash هنگام انجام تکمیل (completion)، تمام فراکاراکترهای (metacharacters) پوسته را در نام فایل‌ها و نام دایرکتوری‌ها نقل‌قول‌بندی (quote) می‌کند. در صورت عدم تنظیم، .B bash فراکاراکترهایی مانند علامت دلار را از مجموعه کاراکترهایی که در نام فایل‌های تکمیل‌شده نقل‌قول‌بندی می‌شوند، در صورتی که این فراکاراکترها در ارجاعات متغیرهای پوسته در کلمات مورد نظر برای تکمیل ظاهر شوند، حذف می‌کند. این بدان معناست که علامت‌های دلار در نام متغیرهایی که به دایرکتوری‌ها بسط می‌یابند، نقل‌قول‌بندی نخواهند شد؛ با این حال، هیچ‌کدام از علامت‌های دلار که در نام فایل‌ها ظاهر می‌شوند نیز نقل‌قول‌بندی نخواهند شد. این ویژگی فقط زمانی فعال است که bash از بک‌اسلش برای نقل‌قول‌بندی نام فایل‌های تکمیل‌شده استفاده می‌کند. این متغیر به‌طور پیش‌فرض تنظیم است، که رفتار پیش‌فرض bash در نسخه‌های تا 4.2 نیز بوده است. .TP 8 .B direxpand در صورت تنظیم بودن، .B bash هنگام انجام تکمیل نام فایل، نام دایرکتوری‌ها را با نتایج بسط کلمه جایگزین می‌کند. این کار محتویات بافر ویرایشی \fBreadline\fP را تغییر می‌دهد. در صورت عدم تنظیم، .B bash تلاش می‌کند آنچه را که کاربر تایپ کرده حفظ کند. .TP 8 .B dirspell در صورت تنظیم بودن، .B bash در صورتی که نام دایرکتوری اولیه ارائه‌شده وجود نداشته باشد، هنگام تکمیل کلمه برای نام‌های دایرکتوری تصحیح املا انجام می‌دهد. .TP 8 .B dotglob در صورت تنظیم بودن، .B bash نام فایل‌هایی را که با یک .Q .\& شروع می‌شوند، در نتایج بسط مسیر وارد می‌کند. نام‌های فایل .FN .\& و .FN ..\& همیشه باید به طور صریح مطابقت داده شوند، حتی اگر .B dotglob تنظیم شده باشد. .TP 8 .B execfail در صورت تنظیم بودن، اگر یک پوسته غیرتعاملی نتواند فایلی را که به عنوان آرگومان به دستور توکار .B exec داده شده اجرا کند، خارج نمی‌شود. یک پوسته تعاملی در صورت شکست .B exec خارج نمی‌شود. .TP 8 .B expand_aliases در صورت تنظیم بودن، نام‌های مستعار همان‌طور که .ie \n(zZ=1 in \fIbash\fP(1) .el در بالا تحت عنوان .SM .BR "نام‌های مستعار (ALIASES)" شرح داده شده بسط می‌یابند. این گزینه به طور پیش‌فرض برای پوسته‌های تعاملی فعال است. .TP 8 .B extdebug اگر هنگام فراخوانی پوسته یا در فایل راه‌انداز پوسته تنظیم شود، ترتیب اجرای پروفایل اشکال‌زدا (debugger profile) را قبل از شروع پوسته می‌دهد، دقیقاً مشابه گزینه \fB\-\-debugger\fP. اگر بعد از فراخوانی تنظیم شود، رفتاری که برای استفاده توسط دیباگرها در نظر گرفته شده فعال می‌شود: .RS .TP .B 1. گزینه \fB\-F\fP برای دستور توکار \fBdeclare\fP، نام فایل منبع و شماره خط متناظر با هر نام تابع ارائه شده به‌عنوان آرگومان را نمایش می‌دهد. .TP .B 2. اگر دستوری که توسط تله \fBDEBUG\fP اجرا می‌شود مقداری غیر صفر بازگرداند، دستور بعدی نادیده گرفته شده و اجرا نمی‌شود. .TP .B 3. اگر دستوری که توسط تله \fBDEBUG\fP اجرا می‌شود مقدار ۲ را بازگرداند، و پوسته در حال اجرا در یک زیرروال باشد (یک تابع پوسته یا یک اسکریپت پوسته که توسط دستورات توکار \fB.\fP یا \fBsource\fP اجرا شده باشد)، پوسته یک فراخوانی به \fBreturn\fP را شبیه‌سازی می‌کند. .TP .B 4. .SM .B BASH_ARGC و .SM .B BASH_ARGV همان‌طور که در توضیحات آن‌ها .ie \n(zZ=1 in \fIbash\fP(1)). .el بالا آمده است به‌روزرسانی می‌شوند. .TP .B 5. ردیابی توابع فعال می‌شود: جایگزینی دستور، توابع پوسته، و زیرپوسته‌های فراخوانی شده با \fB(\fP \fIcommand\fP \fB)\fP، تله‌های \fBDEBUG\fP و \fBRETURN\fP را به ارث می‌برند. .TP .B 6. ردیابی خطا فعال می‌شود: جایگزینی دستور، توابع پوسته، و زیرپوسته‌های فراخوانی شده با \fB(\fP \fIcommand\fP \fB)\fP، تله \fBERR\fP را به ارث می‌برند. .RE .TP 8 .B extglob در صورت تنظیم، ویژگی‌های تطبیق الگوی گسترش‌یافته شرح داده شده در .ie \n(zZ=1 in \fIbash\fP(1) .el بالا تحت بخش \fBبسط نام مسیر (Pathname Expansion)\fP را فعال می‌کند. .TP 8 .B extquote در صورت تنظیم، نقل‌قول‌های \fB$\fP\*'\fIstring\fP\*' و \fB$\fP\*"\fIstring\fP\*" درون بسط‌های \fB${\fP\fIparameter\fP\fB}\fP محصور در نقل‌قول‌های دوتایی انجام می‌شود. این گزینه به‌طور پیش‌فرض فعال است. .TP 8 .B failglob در صورت تنظیم، الگوهایی که در طول بسط نام مسیر با هیچ نام فایلی تطبیق پیدا نکنند منجر به خطای بسط می‌شوند. .TP 8 .B force_fignore در صورت تنظیم، پسوندهای مشخص‌شده توسط متغیر پوسته‌ای .SM .B FIGNORE باعث می‌شوند هنگام انجام تکمیل کلمات، آن کلمات نادیده گرفته شوند حتی اگر کلمات نادیده گرفته‌شده تنها تکمیل‌های ممکن باشند. برای توضیحات مربوط به .SM .BR FIGNORE ، بخش .B "متغیرهای پوسته (Shell Variables)" را در .ie \n(zZ=1 in \fIbash\fP(1) .el بالا ببینید. این گزینه به‌طور پیش‌فرض فعال است. .TP 8 .B globasciiranges در صورت تنظیم، عبارت‌های بازه مورد استفاده در عبارت‌های قلاب تطبیق الگو (بخش .SM .B "تطبیق الگو (Pattern Matching)" را در .ie \n(zZ=1 in \fIbash\fP(1)) .el بالا) ببینید) هنگام انجام مقایسه‌ها مانند محلی‌سازی سنتی C رفتار می‌کنند. بدین معنا که تطبیق الگو توالی مرتب‌سازی لوکال فعلی را در نظر نمی‌گیرد، بنابراین .B b بین .B A و .BR B مرتب نخواهد شد، و نویسه‌های اسکی بزرگ و کوچک با یکدیگر مرتب می‌شوند. .TP 8 .B globskipdots در صورت تنظیم، بسط نام مسیر هرگز با نام‌های فایل .FN .\& و .FN ..\& تطبیق داده نخواهد شد، حتی اگر الگو با یک .Q .\& شروع شود. این گزینه به‌طور پیش‌فرض فعال است. .TP 8 .B globstar در صورت تنظیم، الگوی \fB**\fP استفاده‌شده در زمینه بسط نام مسیر با همه فایل‌ها و صفر یا چند دایرکتوری و زیردایرکتوری مطابقت خواهد داشت. اگر پس از الگو یک \fB/\fP بیاید، تنها با دایرکتوری‌ها و زیردایرکتوری‌ها مطابقت می‌یابد. .TP 8 .B gnu_errfmt در صورت تنظیم، پیام‌های خطای پوسته در قالب استاندارد پیام خطای گنو (GNU error message format) نوشته می‌شوند. .TP 8 .B histappend در صورت تنظیم، فهرست تاریخچه هنگام خروج پوسته به انتهای فایلی که نام آن در مقدار متغیر .SM .B HISTFILE مشخص شده اضافه می‌شود، به‌جای اینکه روی فایل بازنویسی شود. .TP 8 .B histreedit در صورت تنظیم و استفاده از .BR readline ، این امکان به کاربر داده می‌شود تا جایگزینی تاریخچه ناموفق را مجدداً ویرایش کند. .TP 8 .B histverify در صورت تنظیم و استفاده از .BR readline ، نتایج جایگزینی تاریخچه بلافاصله به تجزیه‌کننده پوسته ارسال نمی‌شود. در عوض، خط حاصل در بافر ویرایش \fBreadline\fP بارگذاری شده و امکان تغییر بیشتر را فراهم می‌سازد. .TP 8 .B hostcomplete در صورت تنظیم و استفاده از .BR readline ، پوسته \fBbash\fP هنگام کامل‌کردن کلمه‌ای حاوی \fB@\fP، تلاش می‌کند تا تکمیل نام میزبان (hostname) را انجام دهد (بخش .B Completing در زیر .SM .B READLINE .ie \n(zZ=1 in \fIbash\fP(1)). .el above را ببینید). این گزینه به‌طور پیش‌فرض فعال است. .TP 8 .B huponexit در صورت تنظیم، \fBbash\fP هنگام خروج یک پوسته لاگین تعاملی، سیگنال .SM .B SIGHUP را به همه کارها ارسال می‌کند. .TP 8 .B inherit_errexit در صورت تنظیم، جایگزینی دستور مقدار گزینه \fBerrexit\fP را به‌ارث می‌برد، به‌جای اینکه آن را در محیط زیرپوسته غیرفعال کند. این گزینه هنگام فعال بودن حالت posix فعال است. .TP 8 .B interactive_comments در یک پوسته تعاملی، کلمه‌ای که با \fB#\fP آغاز شود باعث نادیده‌گرفته‌شدن آن کلمه و تمام نویسه‌های باقی‌مانده در آن خط می‌شود، درست مانند یک پوسته غیرتعاملی (بخش .SM .B "توضیحات (COMMENTS)" .ie \n(zZ=1 in \fIbash\fP(1)). .el above را ببینید). این گزینه به‌طور پیش‌فرض فعال است. .TP 8 .B lastpipe در صورت تنظیم و غیرفعال بودن مدیریت کارها، پوسته آخرین دستور از یک خط لوله (pipeline) را که در پس‌زمینه اجرا نشده است، در محیط پوسته جاری اجرا می‌کند. .TP 8 .B lithist در صورت تنظیم و فعال بودن گزینه .BR cmdhist ، دستورات چندخطی با خطوط جدید تعبیه‌شده به‌جای استفاده از جداکننده‌های نقطه‌ویرگول در صورت امکان، در تاریخچه ذخیره می‌شوند. .TP 8 .B localvar_inherit در صورت تنظیم، متغیرهای محلی مقدار و ویژگی‌های متغیری هم‌نام که در یک حوزه قبلی وجود دارد را قبل از انتساب هر مقدار جدید، به‌ارث می‌برند. ویژگی nameref به‌ارث برده نمی‌شود. .TP 8 .B localvar_unset در صورت تنظیم، فراخوانی \fBunset\fP روی متغیرهای محلی در حوزه‌های قبلی تابع، آن‌ها را علامت‌گذاری می‌کند تا جستجوهای بعدی تا زمان بازگشت آن تابع، آن‌ها را تنظیم‌نشده بیابند. این رفتار مشابه رفتار حذف متغیرهای محلی در حوزه تابع فعلی است. .TP 8 .B login_shell پوسته این گزینه را در صورتی که به‌عنوان یک پوسته لاگین آغاز شده باشد تنظیم می‌کند (بخش .SM .B "فراخوانی (INVOCATION)" .ie \n(zZ=1 in \fIbash\fP(1)). .el above را ببینید). مقدار این گزینه قابل تغییر نیست. .TP 8 .B mailwarn در صورت تنظیم، اگر به فایلی که \fBbash\fP برای بررسی ایمیل آن را زیر نظر دارد از زمان آخرین بررسی دسترسی پیدا شده باشد، \fBbash\fP پیام .Q "The mail in \fImailfile\fP has been read" را نمایش می‌دهد. .TP 8 .B no_empty_cmd_completion در صورت تنظیم، و در صورتی که .B readline در حال استفاده باشد، هنگام تلاش برای تکمیل خودکار روی یک خط خالی، .B bash متغیر .SM .B PATH را برای تکمیل‌های احتمالی جستجو نمی‌کند. .TP 8 .B nocaseglob در صورت تنظیم، .B bash هنگام انجام بسط نام مسیر (نگاه کنید به .B "بسط نام مسیر (Pathname Expansion)" .ie \n(zZ=1 در \fIbash\fP(1)). .el در بالا)، نام‌های فایل را بدون توجه به بزرگی و کوچکی حروف مطابقت می‌دهد. .TP 8 .B nocasematch در صورت تنظیم، .B bash هنگام تطبیق در حین اجرای دستورات شرطی \fBcase\fP یا \fB[[\fP، هنگام انجام بسط کلمه جایگزینی الگو، یا هنگام فیلتر کردن تکمیل‌های احتمالی به عنوان بخشی از تکمیل برنامه‌پذیر، الگوها را بدون حساسیت به بزرگی و کوچکی حروف تطبیق می‌دهد. .TP 8 .B noexpand_translation در صورت تنظیم، .B bash نتایج ترجمه‌شده نقل‌قول‌های .BR $\*" .\|.\|.\& \*" را به جای علامت نقل‌قول دوتایی (double quotes) در علامت نقل‌قول تکی (single quotes) محصور می‌کند. اگر رشته ترجمه نشود، این گزینه تاثیری ندارد. .TP 8 .B nullglob در صورت تنظیم، الگوهای بسط نام مسیر که با هیچ فایلی مطابقت ندارند (نگاه کنید به .B "بسط نام مسیر (Pathname Expansion)" .ie \n(zZ=1 در \fIbash\fP(1)) .el در بالا) به جای این که به خودشان بسط یابند، به هیچ بسط یافته و حذف می‌شوند. .TP 8 .B patsub_replacement در صورت تنظیم، \fBbash\fP موارد رخداد \fB&\fP در رشته جایگزینیِ جایگزینی الگو را به متن تطبیق‌داده‌شده توسط الگو بسط می‌دهد، همان‌طور که در زیر \fBبسط پارامتر (Parameter Expansion)\fP .ie \n(zZ=1 در \fIbash\fP(1) .el در بالا شرح داده شده است. این گزینه به صورت پیش‌فرض فعال است. .TP 8 .B progcomp در صورت تنظیم، امکانات تکمیل برنامه‌پذیر را فعال می‌کند (نگاه کنید به \fBتکمیل برنامه‌پذیر (Programmable Completion)\fP .ie \n(zZ=1 در \fIbash\fP(1)). .el در بالا). این گزینه به صورت پیش‌فرض فعال است. .TP 8 .B progcomp_alias در صورت تنظیم، و اگر تکمیل برنامه‌پذیر فعال باشد، \fBbash\fP با نام دستوری که هیچ تکمیلی برای آن وجود ندارد به عنوان یک نام مستعار احتمالی رفتار کرده و اقدام به بسط نام مستعار می‌کند. اگر این دستور نام مستعار داشته باشد، \fBbash\fP تلاش می‌کند با استفاده از کلمه دستور حاصل از نام مستعار بسط‌یافته، تکمیل برنامه‌پذیر را انجام دهد. .TP 8 .B promptvars در صورت تنظیم، رشته‌های اعلان پس از بسط‌یافتن، مطابق با آنچه در .SM .B "خط اعلان (PROMPTING)" .ie \n(zZ=1 در \fIbash\fP(1) .el در بالا شرح داده شده است، تحت بسط پارامتر، جایگزینی دستور، بسط حسابی و حذف نقل‌قول قرار می‌گیرند. این گزینه به صورت پیش‌فرض فعال است. .TP 8 .B restricted_shell پوسته اگر در حالت محدود آغاز به کار کرده باشد، این گزینه را تنظیم می‌کند (نگاه کنید به .SM .B "پوسته محدود (RESTRICTED SHELL)" .ie \n(zZ=1 در \fIbash\fP(1)). .el در زیر). مقدار این گزینه را نمی‌توان تغییر داد. این مقدار هنگام اجرای فایل‌های راه‌اندازی بازنشانی نمی‌شود، و به فایل‌های راه‌اندازی امکان می‌دهد تشخیص دهند که آیا پوسته محدود است یا خیر. .TP 8 .B shift_verbose در صورت تنظیم بودن، دستور توکار .B shift هنگامی که تعداد تغییر مکان (shift) از تعداد پارامترهای مکانی فراتر رود، یک پیام خطا چاپ میکند. .TP 8 .B sourcepath در صورت تنظیم بودن، دستور توکار \fB.\fP (\fBsource\fP) از مقدار .SM .B PATH برای یافتن دایرکتوری حاوی فایلی که به عنوان آرگومان داده شده، در صورتی که گزینه \fB\-p\fP داده نشده باشد، استفاده میکند. این گزینه بهطور پیشفرض فعال است. .TP 8 .B varredir_close در صورت تنظیم بودن، پوسته توصیفگرهای فایلی را که با استفاده از نحو تغییر مسیر \fI{varname}\fP اختصاص داده شدهاند (بخش .SM .B REDIRECTION .ie \n(zZ=1 در \fIbash\fP(1) را ببینید) .el در بالا را ببینید) بهجای باز گذاشتن پس از اتمام دستور، بهطور خودکار میبندد. .TP 8 .B xpg_echo در صورت تنظیم بودن، دستور توکار \fBecho\fP توالیهای گریز ممیز وارونه (backslash-escape) را بهطور پیشفرض بسط میدهد. اگر گزینه پوسته \fBposix\fP نیز فعال باشد، \fBecho\fP هیچ گزینهای را تفسیر نمیکند. .RE .PD .TP \fBsuspend\fP [\fB\-f\fP] اجرای این پوسته را تا زمانی که سیگنال .SM .B SIGCONT را دریافت کند، معلق میکند. یک پوسته ورود (login shell)، یا پوستهای که مدیریت کارها (job control) در آن فعال نباشد، نمیتواند معلق شود؛ گزینه .B \-f این وضعیت را نادیده گرفته و تعلیق را تحمیل میکند. وضعیت خروج 0 است مگر اینکه پوسته یک پوسته ورود باشد یا مدیریت کارها فعال نبوده و .B \-f داده نشده باشد. .TP \fBtest\fP \fIexpr\fP .PD 0 .TP \fB[\fP \fIexpr\fP \fB]\fP .PD بسته به ارزیابی عبارت شرطی .IR expr ، وضعیت 0 (درست) یا 1 (نادرست) را برمیگرداند. هر عملگر و عملوند باید یک آرگومان جداگانه باشد. عبارتها از عناصر پایهای تشکیل شدهاند که .ie \n(zZ=1 در \fIbash\fP(1) .el در بالا تحت عنوان .SM .BR "عبارات شرطی (CONDITIONAL EXPRESSIONS)" شرح داده شدهاند. \fBtest\fP هیچ گزینهای را نمیپذیرد، و همچنین آرگومان \fB\-\-\fP را به عنوان نشاندهنده پایان گزینهها نمیپذیرد و نادیده نمیگیرد. .IP عبارتها ممکن است با استفاده از عملگرهای زیر ترکیب شوند که به ترتیب کاهش تقدم فهرست شدهاند. ارزیابی به تعداد آرگومانها بستگی دارد؛ به پایین مراجعه کنید. \fBtest\fP هنگامی که پنج یا بیشتر آرگومان وجود داشته باشد از تقدم عملگرها استفاده میکند. .RS .PD 0 .TP .B ! \fIexpr\fP درست است اگر .I expr نادرست باشد. .TP .B ( \fIexpr\fP ) مقدار \fIexpr\fP را برمیگرداند. این ممکن است برای نادیده گرفتن تقدم معمولی عملگرها استفاده شود. .TP \fIexpr1\fP \-\fBa\fP \fIexpr2\fP درست است اگر هر دو .I expr1 و .I expr2 درست باشند. .TP \fIexpr1\fP \-\fBo\fP \fIexpr2\fP درست است اگر یکی از .I expr1 یا .I expr2 درست باشد. .PD .PP دستورهای \fBtest\fP و \fB[\fP عبارات شرطی را با استفاده از مجموعه‌ای از قواعد بر اساس تعداد آرگومان‌ها ارزیابی می‌کنند. .PP .PD 0 .TP 0 arguments عبارت نادرست (false) است. .TP 1 argument عبارت درست (true) است اگر و تنها اگر آرگومان تهی (null) نباشد. .TP 2 arguments اگر اولین آرگومان \fB!\fP باشد، عبارت درست است اگر و تنها اگر آرگومان دوم تهی باشد. اگر اولین آرگومان یکی از عملگرهای شرطی یگانی (تک‌عملوندی) فهرست‌شده .ie \n(zZ=1 in \fIbash\fP(1) .el above تحت .SM .BR "عبارات شرطی (CONDITIONAL EXPRESSIONS)" باشد، در صورتی که آزمون یگانی درست باشد، عبارت درست است. اگر اولین آرگومان یک عملگر شرطی یگانی معتبر نباشد، عبارت نادرست است. .TP 3 arguments شرایط زیر به ترتیبی که ذکر شده‌اند اعمال می‌شوند. اگر آرگومان دوم یکی از عملگرهای شرطی دودویی (دوعملوندی) فهرست‌شده .ie \n(zZ=1 in \fIbash\fP(1) .el above تحت .SM .BR "عبارات شرطی (CONDITIONAL EXPRESSIONS)" باشد، نتیجهٔ عبارت، حاصل آزمون دودویی با استفاده از آرگومان اول و سوم به‌عنوان عملوندها خواهد بود. عملگرهای \fB\-a\fP و \fB\-o\fP هنگامی که سه آرگومان وجود دارد، عملگرهای دودویی در نظر گرفته می‌شوند. اگر آرگومان اول \fB!\fP باشد، مقدار برابر با نقیضِ آزمون دوآرگومانی با استفاده از آرگومان‌های دوم و سوم است. اگر آرگومان اول دقیقاً \fB(\fP و آرگومان سوم دقیقاً \fB)\fP باشد، نتیجه آزمون تک‌آرگومانیِ آرگومان دوم خواهد بود. در غیر این صورت، عبارت نادرست است. .TP 4 arguments شرایط زیر به ترتیبی که ذکر شده‌اند اعمال می‌شوند. اگر اولین آرگومان \fB!\fP باشد، نتیجه، نقیضِ عبارت سه‌آرگومانی تشکیل‌شده از آرگومان‌های باقی‌مانده است. اگر آرگومان اول دقیقاً \fB(\fP و آرگومان چهارم دقیقاً \fB)\fP باشد، نتیجه، آزمون دوآرگومانیِ آرگومان‌های دوم و سوم است. در غیر این صورت، عبارت بر اساس اولویت‌ها با استفاده از قواعد ذکرشده در بالا تجزیه و ارزیابی می‌شود. .TP 5 or more arguments عبارت بر اساس اولویت‌ها با استفاده از قواعد ذکرشده در بالا تجزیه و ارزیابی می‌شود. .PD .PP هنگامی که پوسته در حالت posix باشد، یا اگر عبارت بخشی از دستور \fB[[\fP باشد، عملگرهای \fB<\fP و \fB>\fP با استفاده از لوکال (locale) جاری مرتب‌سازی می‌کنند. اگر پوسته در حالت posix نباشد، دستورهای \fBtest\fP و \fB[\fP به صورت لغت‌نگاری با استفاده از ترتیب ASCII مرتب‌سازی را انجام می‌دهند. .PP تجزیهٔ سنتی اولویت عملگرها با ۴ آرگومان یا بیشتر می‌تواند هنگام مواجهه با رشته‌هایی که شبیه عملوندهای اولیه (primaries) هستند، منجر به ابهام شود. استاندارد .SM POSIX عملوندهای اولیهٔ \fB\-a\fP و \fB\-o\fP و محصور کردن عبارات درون پرانتزها را منسوخ اعلام کرده است. اسکریپت‌ها دیگر نباید از آن‌ها استفاده کنند. بسیار قابل‌اطمینان‌تر است که فراخوانی‌های test به یک عملوند اولیه محدود شوند، و استفاده از \fB\-a\fP و \fB\-o\fP با عملگرهای لیستیِ \fB&&\fP و \fB||\fP پوسته جایگزین شود. .RE .TP .B times زمان‌های انباشته‌شدهٔ کاربر و سیستم را برای پوسته و فرایندهای اجراشده از پوسته چاپ می‌کند. وضعیت بازگشتی 0 است. .TP \fBtrap\fP [\fB\-lpP\fP] [[\fIaction\fP] \fIsigspec\fP .\|.\|.] دستورِ .I action دستوری است که هنگام دریافت هر یک از سیگنال‌های .IR sigspec توسط پوسته، خوانده و اجرا می‌شود. اگر .I action حاضر نباشد (و تنها یک \fIsigspec\fP وجود داشته باشد) یا برابر با .BR \- باشد، هر \fIsigspec\fP مشخص‌شده به مقداری که در زمان شروع به کار پوسته داشت، بازنشانی می‌شود. اگر .I action رشتهٔ تهی باشد، سیگنال مشخص‌شده توسط هر .I sigspec توسط پوسته و دستورهایی که فراخوانی می‌کند، نادیده گرفته می‌شود. .IP اگر هیچ آرگومانی ارائه نشود، .B trap عملیات مرتبط با هر سیگنال به دام‌افتاده را به عنوان مجموعه‌ای از دستورهای \fBtrap\fP نمایش می‌دهد که می‌توانند دوباره به عنوان ورودی پوسته برای بازیابی چینش‌های جاری سیگنال استفاده شوند. اگر .B \-p داده شود، و .I action وجود نداشته باشد، آنگاه \fBtrap\fP عملیات مرتبط با هر .I sigspec یا در صورت ارائه نشدن هیچ‌کدام، برای همهٔ سیگنال‌های به دام‌افتاده را به صورت مجموعه‌ای از دستورهای \fBtrap\fP نمایش می‌دهد که می‌توانند مجدداً به عنوان ورودی پوسته برای بازیابی چینش‌های جاری سیگنال استفاده شوند. گزینهٔ .B \-P رفتاری مشابه دارد، اما تنها عملیات مرتبط با هر آرگومان \fIsigspec\fP را نمایش می‌دهد. گزینهٔ .B \-P به حداقل یک آرگومان \fIsigspec\fP نیاز دارد. گزینه‌های \fB\-P\fP یا \fB\-p\fP ممکن است در یک محیط زیرپوسته (مانند جایگزینی دستور) استفاده شوند و تا زمانی که قبل از به‌کارگیری \fBtrap\fP برای تغییر مدیریت یک سیگنال استفاده شوند، وضعیت تله‌های والد خود را نمایش خواهند داد. .IP گزینهٔ .B \-l فهرستی از نام‌های سیگنال‌ها و شماره‌های متناظر با آن‌ها را چاپ می‌کند. هر .I sigspec یا یک نام سیگنال تعریف‌شده در <\fIsignal.h\fP> است، یا یک شمارهٔ سیگنال. نام‌های سیگنال به حروف بزرگ و کوچک حساس نیستند و پیشوندِ .SM .B SIG اختیاری است. اگر \fB\-l\fP بدون هیچ آرگومان \fIsigspec\fP ارائه شود، فهرستی از نام‌های سیگنال معتبر را چاپ می‌کند. .IP اگر یک .I sigspec برابر با .SM .B EXIT (0) باشد، .I action هنگام خروج از پوسته اجرا می‌شود. اگر یک .I sigspec برابر با .SM .BR DEBUG باشد، .I action قبل از هر \fIsimple command\fP (دستور ساده)، دستور \fIfor\fP، دستور \fIcase\fP، دستور \fIselect\fP، دستور حسابی ((، دستور شرطی [[، دستور حسابی \fIfor\fP، و قبل از اجرای اولین دستور در یک تابع پوسته اجرا می‌شود (ببینید .SM .B "گرامر پوسته (SHELL GRAMMAR)" .ie \n(zZ=1 in \fIbash\fP(1)). .el above). برای جزئیات اثر آن بر تلهٔ \fBDEBUG\fP، به توضیحات گزینهٔ پوسته‌ایِ \fBextdebug\fP مراجعه کنید (ببینید .B shopt .ie \n(zZ=1 in \fIbash\fP(1)) .el above). اگر یک .I sigspec برابر با .SM .BR RETURN باشد، .I action هر بار که یک تابع پوسته یا یک اسکریپتِ اجراشده با دستورات توکار \fB.\fP یا \fBsource\fP اجرای خود را به پایان می‌رساند، اجرا می‌شود. .IP اگر یک .I sigspec برابر با .SM .BR ERR باشد، .I action هر زمان که یک خط‌لوله (pipeline - که ممکن است شامل یک دستور سادهٔ تکی باشد)، یک لیست، یا یک دستور مرکب یک وضعیت خروج غیرصفر برگرداند، با رعایت شرایط زیر اجرا می‌شود. تلهٔ .SM .B ERR اجرا نمی‌شود اگر دستور شکست‌خورده بخشی از فهرست دستورات بلافاصله پس از یک کلمهٔ رزروشدهٔ .B while یا .B until باشد، بخشی از آزمون در یک عبارت .I if باشد، بخشی از یک دستورِ اجراشده در یک فهرستِ .B && یا .B || به‌جز دستورِ پس از \fB&&\fP یا \fB||\fP نهایی باشد، هر دستوری در یک خط‌لوله به جز آخرین دستور (مشروط به وضعیت گزینهٔ پوسته‌ای \fBpipefail\fP) باشد، یا اگر مقدار بازگشتی دستور با استفاده از .BR ! معکوس شده باشد. این‌ها همان شرایطی هستند که گزینهٔ \fBerrexit\fP (\fB\-e\fP) از آن‌ها پیروی می‌کند. .IP هنگامی که پوسته تعاملی نباشد، سیگنال‌هایی که هنگام ورود به پوسته نادیده گرفته شده‌اند، قابل به دام انداختن یا بازنشانی نیستند. پوسته‌های تعاملی امکان به دام انداختن سیگنال‌های نادیده گرفته‌شده در بدو ورود را می‌دهند. سیگنال‌های به دام‌افتاده‌ای که نادیده گرفته نمی‌شوند، هنگام ایجاد یک زیرپوسته یا محیط زیرپوسته، به مقادیر اصلی خود بازنشانی می‌شوند. اگر هر .I sigspec نامعتبر باشد، وضعیت بازگشتی نادرست (false) است؛ در غیر این صورت .B trap مقدار درست (true) را برمی‌گرداند. .TP \fBtrue\fP کاری انجام نمیدهد، وضعیت 0 را برمیگرداند. .TP \fBtype\fP [\fB\-aftpP\fP] \fIname\fP [\fIname\fP .\|.\|.] مشخص میکند که هر .I name در صورت استفاده به عنوان نام دستور چگونه تفسیر خواهد شد. .IP اگر گزینه .B \-t استفاده شود، .B type رشتهای را چاپ میکند که یکی از موارد .IR alias ، .IR keyword ، .IR function ، .IR builtin ، یا .I file است، بسته به اینکه .I name به ترتیب یک نام مستعار، کلمه رزرو شده پوسته، تابع، دستور توکار یا فایل اجرایی باشد. اگر .I name یافت نشود، \fBtype\fP چیزی چاپ نمیکند و وضعیت خروج غیرصفر برمیگرداند. .IP اگر گزینه .B \-p استفاده شود، .B type یا مسیر کامل فایل اجرایی را برمیگرداند که با جستجوی .B $PATH برای .I name یافت میشود، یا اگر .Q "type \-t name" مقدار .IR file را برنگرداند، چیزی چاپ نمیکند. گزینه .B \-P جستجو در .SM .B PATH را برای هر \fIname\fP اجباری میکند، حتی اگر .Q "type \-t name" مقدار .IR file را برنگرداند. اگر \fIname\fP در جدول دستورات هش‌شده موجود باشد، .B \-p و .B \-P مقدار هش‌شده را چاپ میکنند که لزوماً فایلی نیست که ابتدا در .SM .BR PATH ظاهر میشود. .IP اگر گزینه .B \-a استفاده شود، .B type تمام مکانهایی را که شامل دستوری با نام .IR name هستند چاپ میکند. این شامل نامهای مستعار، کلمات رزرو شده، توابع و دستورات توکار میشود، اما گزینههای جستجوی مسیر (\fB\-p\fP و \fB\-P\fP) میتوانند ارائه شوند تا خروجی را به فایلهای اجرایی محدود کنند. \fBtype\fP هنگام استفاده از .B \-a به همراه .BR \-p ، به جدول دستورات هش‌شده مراجعه نمیکند، و فقط یک جستجو در .SM .B PATH برای \fIname\fP انجام میدهد. .IP گزینه .B \-f جستجوی توابع پوسته را نادیده میگیرد، مشابه دستور توکار \fBcommand\fP. .B type اگر تمام آرگومانها یافت شوند مقدار درست (true) و در صورت پیدا نشدن هر یک از آنها مقدار نادرست (false) را برمیگرداند. .TP \fBulimit\fP [\fB\-HS\fP] \fB\-a\fP .PD 0 .TP \fBulimit\fP [\fB\-HS\fP] [\fB\-bcdefiklmnpqrstuvxPRT\fP [\fIlimit\fP]] .PD امکان کنترل روی منابع در دسترس پوسته و فرایندهایی که آغاز میکند را در سیستمهایی که چنین کنترلی را مجاز میدانند، فراهم میکند. .IP گزینههای \fB\-H\fP و \fB\-S\fP مشخص میکنند که آیا محدودیت سخت (hard) یا نرم (soft) برای منبع داده‌شده تنظیم شود. یک محدودیت سخت پس از تنظیم نمیتواند توسط کاربر غیرریشه (non-root) افزایش یابد؛ یک محدودیت نرم ممکن است تا مقدار محدودیت سخت افزایش پیدا کند. اگر نه \fB\-H\fP و نه \fB\-S\fP مشخص نشده باشد، \fBulimit\fP هر دو محدودیت نرم و سخت را تنظیم میکند. .IP مقدار .I limit میتواند عددی در واحد مشخص‌شده برای منبع باشد یا یکی از مقادیر ویژه .BR hard ، .BR soft ، یا .BR unlimited ، که به ترتیب نشان‌دهنده محدودیت سخت فعلی، محدودیت نرم فعلی و نامحدود هستند. اگر .I limit حذف شود، \fBulimit\fP مقدار فعلی محدودیت نرم آن منبع را چاپ میکند، مگر اینکه گزینه \fB\-H\fP داده شده باشد. هنگامی که بیش از یک منبع مشخص شده باشد، نام محدودیت و واحد آن، در صورت مناسب بودن، پیش از مقدار چاپ میشوند. گزینههای دیگر به شرح زیر تفسیر میشوند: .RS .PD 0 .TP .B \-a تمام محدودیت‌های فعلی را گزارش می‌دهد؛ هیچ محدودیتی تنظیم نمی‌شود. .TP .B \-b حداکثر اندازه بافر سوکت. .TP .B \-c حداکثر اندازه فایل‌های core ایجاد شده. .TP .B \-d حداکثر اندازه بخش داده (data segment) یک فرایند. .TP .B \-e حداکثر اولویت زمان‌بندی (\c .Q nice ). .TP .B \-f حداکثر اندازه فایل‌های نوشته‌شده توسط پوسته و فرزندان آن. .TP .B \-i حداکثر تعداد سیگنال‌های معلق (pending). .TP .B \-k حداکثر تعداد kqueueهایی که می‌توان تخصیص داد. .TP .B \-l حداکثر اندازه‌ای که می‌توان در حافظه قفل کرد. .TP .B \-m حداکثر اندازه مجموعه مقیم (resident set size) (بسیاری از سیستم‌ها این محدودیت را رعایت نمی‌کنند). .TP .B \-n حداکثر تعداد توصیف‌کننده‌های باز فایل (بیشتر سیستم‌ها اجازه تنظیم این مقدار را نمی‌دهند). .TP .B \-p اندازه پایپ بر حسب بلوک‌های ۵۱۲ بایتی (این مقدار ممکن است قابل تنظیم نباشد). .TP .B \-q حداکثر تعداد بایت‌ها در صف‌های پیام .SM POSIX \c \&. .TP .B \-r حداکثر اولویت زمان‌بندی بلادرنگ (real-time). .TP .B \-s حداکثر اندازه پشته (stack). .TP .B \-t حداکثر مقدار زمان پردازنده (cpu) بر حسب ثانیه. .TP .B \-u حداکثر تعداد فرایندهای در دسترس برای یک کاربر واحد. .TP .B \-v حداکثر مقدار حافظه مجازی در دسترس پوسته و در برخی سیستم‌ها، فرزندان آن. .TP .B \-x حداکثر تعداد قفل‌های فایل. .TP .B \-P حداکثر تعداد شبه‌ترمینال‌ها (pseudoterminals). .TP .B \-R حداکثر زمانی که یک فرایند بلادرنگ می‌تواند قبل از مسدود شدن اجرا شود، بر حسب میکروثانیه. .TP .B \-T حداکثر تعداد ریسه‌ها (threads). .PD .PP اگر .I limit داده شود و گزینه .B \-a استفاده نشود، \fIlimit\fP مقدار جدید منبع مشخص‌شده خواهد بود. اگر هیچ گزینه‌ای مشخص نشود، آن‌گاه .B \-f فرض می‌شود. .PP مقادیر در پله‌های ۱۰۲۴ بایتی هستند، به جز .BR \-t \c ، که بر حسب ثانیه است؛ .BR \-R \c ، که بر حسب میکروثانیه است؛ .BR \-p \c ، که در واحدهایی از بلوک‌های ۵۱۲ بایتی است؛ .BR \-P \c ، .BR \-T \c ، .BR \-b \c ، .BR \-k \c ، .BR \-n \c ، و .BR \-u \c ، که مقادیر بدون مقیاس هستند؛ و هنگامی که در حالت posix باشد، .B \-c و .BR \-f \c ، که در پله‌های ۵۱۲ بایتی هستند. وضعیت خروج 0 است مگر اینکه گزینه یا آرگومان نامعتبری ارائه شود، یا هنگام تنظیم یک محدودیت جدید خطایی رخ دهد. .RE .TP \fBumask\fP [\fB\-p\fP] [\fB\-S\fP] [\fImode\fP] ماسک ایجاد فایل کاربر را روی .I mode تنظیم می‌کند. اگر .I mode با یک رقم شروع شود، به عنوان یک عدد در مبنای هشت (اکتال) تفسیر می‌شود؛ در غیر این صورت، به عنوان یک ماسک حالت نمادین مشابه آنچه توسط .IR chmod (1) پذیرفته می‌شود، تفسیر خواهد شد. اگر .I mode حذف شود (مشخص نشود)، \fBumask\fP مقدار فعلی ماسک را چاپ می‌کند. گزینه .B \-S بدون آرگومان \fImode\fP، ماسک را در قالب نمادین چاپ می‌کند؛ خروجی پیش‌فرض یک عدد در مبنای هشت است. اگر گزینه .B \-p داده شود و .I mode مشخص نشود، خروجی به شکلی خواهد بود که می‌تواند مجدداً به عنوان ورودی استفاده شود. وضعیت بازگشتی در صورتی که حالت با موفقیت تغییر یابد یا اگر هیچ آرگومان \fImode\fP داده نشده باشد صفر، و در غیر این صورت غیرصفر است. .TP \fBunalias\fP [\-\fBa\fP] [\fIname\fP .\|.\|.] هر \fIname\fP را از فهرست نام‌های مستعار تعریف‌شده حذف می‌کند. اگر .B \-a مشخص شود، تمام تعاریف نام‌های مستعار حذف می‌شوند. مقدار بازگشتی درست (true) است مگر اینکه یک .I name ارائه‌شده جزو نام‌های مستعار تعریف‌شده نباشد. .TP \fBunset\fP [\-\fBfv\fP] [\-\fBn\fP] [\fIname\fP .\|.\|.] به ازای هر .IR name ، متغیر یا تابع متناظر را حذف می‌کند. اگر گزینه .B \-v داده شود، هر .I name به یک متغیر پوسته اشاره دارد و آن متغیر حذف می‌شود. اگر .B \-f مشخص شود، هر .I name به یک تابع پوسته اشاره دارد و تعریف آن تابع حذف می‌گردد. اگر گزینه .B \-n ارائه شود و \fIname\fP متغیری با ویژگی \fInameref\fP باشد، به جای متغیری که به آن ارجاع دارد، خود \fIname\fP لغو مقدار (unset) می‌شود. در صورت ارائه گزینه \fB\-f\fP، گزینه \fB\-n\fP هیچ تأثیری ندارد. متغیرها و توابع فقط‌خواندنی (Read-only) را نمی‌توان لغو مقدار کرد. هنگامی که متغیرها یا توابع حذف می‌شوند، از محیطی که به دستورات بعدی منتقل می‌شود نیز حذف می‌گردند. اگر هیچ گزینه‌ای مشخص نشود، هر \fIname\fP به یک متغیر اشاره دارد؛ اگر هیچ متغیری با آن نام وجود نداشته باشد، تابعی با آن نام (در صورت وجود) لغو مقدار می‌شود. برخی از متغیرهای پوسته را نمی‌توان لغو مقدار کرد. اگر هر یک از متغیرهای .SM .BR BASH_ALIASES ، .SM .BR BASH_ARGV0 ، .SM .BR BASH_CMDS ، .SM .BR BASH_COMMAND ، .SM .BR BASH_SUBSHELL ، .SM .BR BASHPID ، .SM .BR COMP_WORDBREAKS ، .SM .BR DIRSTACK ، .SM .BR EPOCHREALTIME ، .SM .BR EPOCHSECONDS ، .SM .BR FUNCNAME ، .SM .BR GROUPS ، .SM .BR HISTCMD ، .SM .BR LINENO ، .SM .BR RANDOM ، .SM .BR SECONDS ، یا .SM .B SRANDOM لغو مقدار شوند، ویژگی‌های خاص خود را از دست می‌دهند، حتی اگر بعداً دوباره مقداردهی شوند. وضعیت خروج درست (true) است مگر اینکه یک .I name فقط‌خواندنی باشد یا نتوان آن را لغو مقدار کرد. .TP \fBwait\fP [\fB\-fn\fP] [\fP\-p\fP \fIvarname\fP] [\fIid\fP .\|.\|.] منتظر پایان هر پردازه فرزند مشخص‌شده با \fIid\fP می‌ماند و وضعیت خاتمه آخرین \fIid\fP را بازمی‌گرداند. هر \fIid\fP می‌تواند یک شناسه پردازه \fIpid\fP یا مشخصه کار \fIjobspec\fP باشد؛ اگر مشخصه کار داده شود، \fBwait\fP منتظر تمام پردازه‌های آن کار می‌ماند. .IP اگر هیچ گزینه یا \fIid\fPای مشخص نشود، \fBwait\fP منتظر تمام کارهای در حال اجرای پس‌زمینه و آخرین جایگزینی پردازه اجراشده (اگر شناسه پردازه آن با \fB$!\fP یکسان باشد) می‌ماند، و وضعیت بازگشتی صفر خواهد بود. .IP اگر گزینه \fB\-n\fP مشخص شود، \fBwait\fP منتظر هر کدام از \fIid\fPهای داده‌شده یا، در صورتی که هیچ \fIid\fPای داده نشده باشد، منتظر تکمیل هر کار یا جایگزینی پردازه‌ای می‌ماند و وضعیت خروج آن را بازمی‌گرداند. اگر هیچ‌یک از \fIid\fPهای مشخص‌شده فرزند پوسته نباشند، یا اگر هیچ \fIid\fPای داده نشده باشد و پوسته هیچ فرزندِ منتظر‌ناشده‌ای نداشته باشد، وضعیت خروج ۱۲۷ است. .IP اگر گزینه \fB\-p\fP مشخص شود، \fBwait\fP شناسه پردازه یا کارِ کاری را که وضعیت خروج آن بازگردانده شده، به متغیر \fIvarname\fP که توسط آرگومان گزینه نام‌گذاری شده است انتساب می‌دهد. این متغیر، که نمی‌تواند فقط‌خواندنی باشد، ابتدا و پیش از هر انتسابی، لغو مقدار (unset) خواهد شد. این مورد تنها زمانی که همراه با گزینه \fB\-n\fP استفاده شود کاربرد دارد. .IP مشخص کردن گزینه \fB\-f\fP، در زمانی که مدیریت کارها فعال است، \fBwait\fP را مجبور می‌کند که به جای بازگشت در هنگام تغییر وضعیت هر \fIid\fP، تا خاتمه یافتن کامل آن منتظر بماند و سپس وضعیتش را برگرداند. .IP اگر هیچ‌یک از \fIid\fPها نشان‌دهنده یکی از پردازه‌های فرزند فعال پوسته نباشد، وضعیت بازگشتی ۱۲۷ است. اگر اجرای \fBwait\fP با یک سیگنال متوقف شود، هر متغیر \fIvarname\fP به‌صورت تنظیم‌نشده (unset) باقی می‌ماند، و وضعیت بازگشتی بزرگ‌تر از ۱۲۸ خواهد بود، همان‌طور که در بخش .B "سیگنالها (SIGNALS)" .ie \n(zZ=1 in \fIbash\fP(1). .el در بالا شرح داده شده است. در غیر این صورت، وضعیت بازگشتی، وضعیت خروج آخرین \fIid\fP خواهد بود. .SH "حالت سازگاری پوسته (SHELL COMPATIBILITY MODE)" نگارش 4.0 پوسته Bash مفهوم \fIسطح سازگاری پوسته (shell compatibility level)\fP را معرفی کرد، که به عنوان مجموعه‌ای از گزینه‌ها برای دستور توکار shopt مشخص می‌شود (\c .BR compat31 ، .BR compat32 ، .BR compat40 ، .BR compat41 ، و غیره). تنها یک سطح سازگاری جاری وجود دارد \(em هر گزینه با دیگری ناسازگار و مانعة‌الجمع است. هدف از سطح سازگاری این است که به کاربران اجازه دهد رفتار نسخه‌های پیشین را که با نسخه‌های جدیدتر ناسازگار است انتخاب کنند تا بتوانند اسکریپت‌های خود را جهت استفاده از ویژگی‌ها و رفتارهای جدید منتقل نمایند. این ویژگی به عنوان یک راهکار موقتی در نظر گرفته شده است. .PP این بخش به رفتاری که برای یک نسخه خاص استاندارد است اشاره‌ای نمی‌کند (برای مثال، تنظیم \fBcompat32\fP به این معنی است که نقل‌قول کردن سمت راست عملگر تطبیق عبارت منظم، نویسه‌های خاص عبارت منظم را در کلمه نقل‌قول می‌کند، که رفتار پیش‌فرض در bash-3.2 و نسخه‌های بعدی آن است). .PP اگر کاربری برای نمونه \fBcompat32\fP را فعال کند، ممکن است بر رفتار سایر سطوح سازگاری تا و شامل سطح سازگاری جاری تأثیر بگذارد. ایده این است که هر سطح سازگاری رفتاری را کنترل می‌کند که در آن نسخه از \fBbash\fP تغییر یافته است، اما آن رفتار ممکن است در نسخه‌های پیشین نیز وجود داشته باشد. برای نمونه، تغییر به استفاده از مقایسه‌های مبتنی بر محلی‌سازی (locale) با دستور \fB[[\fP در bash-4.1 اضافه شد، در حالی که نسخه‌های قبلی از مقایسه‌های مبتنی بر ASCII استفاده می‌کردند؛ بنابراین فعال‌سازی \fBcompat32\fP مقایسه‌های مبتنی بر ASCII را نیز فعال می‌کند. این سطح از تفکیک ممکن است برای همه کاربردها کافی نباشد، و در نتیجه کاربران باید سطوح سازگاری را با دقت به کار گیرند. برای آگاهی از رفتار جاری، مستندات مربوط به هر ویژگی خاص را مطالعه کنید. .PP نگارش 4.3 پوسته Bash یک متغیر پوسته جدید معرفی کرد: .SM .BR BASH_COMPAT . مقدار منتسب‌شده به این متغیر (یک شماره نسخه اعشاری مانند 4.2، یا یک عدد صحیح متناظر با گزینه \fBcompat\fP\fINN\fP، مانند 42) سطح سازگاری را تعیین می‌کند. .PP با شروع از bash-4.4، \fBbash\fP منسوخ کردن سطوح سازگاری قدیمی‌تر را آغاز کرد. در نهایت، این گزینه‌ها به نفع .SM .BR BASH_COMPAT حذف خواهند شد. .PP نسخهٔ Bash-5.0 آخرین نسخه‌ای بود که یک گزینهٔ shopt اختصاصی برای نسخهٔ قبلی داشت. .SM .B BASH_COMPAT تنها سازوکار برای کنترل سطح سازگاری در نسخه‌های جدیدتر از bash-5.0 است. .PP جدول زیر تغییرات رفتاری کنترل‌شده توسط هر تنظیم سطح سازگاری را شرح می‌دهد. برچسب \fBcompat\fP\fINN\fP به عنوان کوته‌نوشتی برای تنظیم سطح سازگاری روی \fINN\fP با استفاده از یکی از سازوکارهای زیر به کار می‌رود. برای نسخه‌های پیش از bash-5.0، سطح سازگاری ممکن است با استفاده از گزینهٔ \fBcompat\fP\fINN\fP متناظر در shopt تنظیم شود. برای نسخهٔ bash-4.3 و نسخه‌های جدیدتر، متغیر .SM .B BASH_COMPAT ترجیح داده می‌شود، و برای bash-5.1 و نسخه‌های جدیدتر الزامی است. .TP \fBcompat31\fP .PD 0 .RS .IP \(bu نقلقول کردن سمت راست عملگر تطابق عبارت منظم در دستور \fB[[\fP (یعنی =\*~) اثر خاصی ندارد. .RE .PD .TP \fBcompat32\fP .PD 0 .RS .IP \(bu عملگرهای \fB<\fP و \fB>\fP در دستور \fB[[\fP هنگام مقایسهٔ رشته‌ها لوکال جاری را در نظر نمی‌گیرند؛ آن‌ها از ترتیب اسکی (ASCII) استفاده می‌کنند. .RE .PD .TP \fBcompat40\fP .PD 0 .RS .IP \(bu عملگرهای \fB<\fP و \fB>\fP در دستور \fB[[\fP هنگام مقایسهٔ رشته‌ها لوکال جاری را در نظر نمی‌گیرند؛ آن‌ها از ترتیب اسکی (ASCII) استفاده می‌کنند. نسخه‌های \fBBash\fP پیش از bash-4.1 از تطبیق ترتیبی اسکی و .IR strcmp (3) استفاده می‌کنند؛ نسخهٔ bash-4.1 و جدیدتر از ترتیب تطبیق لوکال جاری و .IR strcoll (3) استفاده می‌کنند. .RE .PD .TP \fBcompat41\fP .PD 0 .RS .IP \(bu در حالت posix، دستور \fBtime\fP ممکن است با گزینه‌هایی دنبال شود و همچنان به‌عنوان یک کلمهٔ رزرو شده شناخته شود (این تفسیر شماره ۲۶۷ .SM POSIX است). .IP \(bu در حالت \fIposix\fP، تجزیه‌کننده الزام می‌کند که تعداد زوجی از نقل‌قول‌های تکی در بخش \fIword\fP از یک بسط پارامتر دابل‌کوتیشن‌دار وجود داشته باشد و با آن‌ها به‌طور ویژه‌ای رفتار می‌کند، به‌طوری که نویسه‌های درون کوتیشن‌های تکی نقل‌قول‌شده (کوتیشن‌دار) در نظر گرفته می‌شوند (این تفسیر شماره ۲۲۱ .SM POSIX است). .RE .PD .TP \fBcompat42\fP .PD 0 .RS .IP \(bu رشتهٔ جایگزین در جایگزینی الگوی دابل‌کوتیشن‌دار، بر خلاف نسخه‌های پس از bash-4.2، تحت حذف نقل‌قول قرار نمی‌گیرد. .IP \(bu در حالت posix، نقل‌قول‌های تکی هنگام بسط بخش \fIword\fP در یک بسط پارامتر دابل‌کوتیشن‌دار ویژه در نظر گرفته می‌شوند و می‌توانند برای نقل‌قول کردن یک آکولاد بسته یا نویسهٔ ویژهٔ دیگر استفاده شوند (این بخشی از تفسیر شماره ۲۲۱ .SM POSIX است)؛ در نسخه‌های جدیدتر، نقل‌قول‌های تکی درون بسط‌های کلمهٔ دابل‌کوتیشن‌دار ویژه نیستند. .RE .PD .TP \fBcompat43\fP .PD 0 .RS .IP \(bu خطاهای بسط کلمه به عنوان خطاهای غیرمهلک در نظر گرفته می‌شوند که حتی در حالت posix نیز تنها باعث شکست دستور جاری می‌گردند (رفتار پیش‌فرض این است که آن‌ها خطاهای مهلکی تلقی شوند که موجب خروج پوسته می‌شوند). .IP \(bu هنگام اجرای یک تابع پوسته، وضعیت حلقه (while/until/غیره) بازنشانی نمی‌شود، بنابراین \fBbreak\fP یا \fBcontinue\fP در آن تابع، باعث شکستن یا ادامه‌یافتن حلقه‌ها در محیط فراخواننده خواهد شد. Bash-4.4 و نسخه‌های بعدی وضعیت حلقه را بازنشانی می‌کنند تا از این اتفاق جلوگیری شود. .RE .PD .TP \fBcompat44\fP .PD 0 .RS .IP \(bu پوسته مقادیر مورد استفاده توسط .SM .B BASH_ARGV و .SM .B BASH_ARGC را طوری تنظیم می‌کند که حتی در صورت غیرفعال بودن حالت اشکال‌زدایی پیشرفته (extended debugging mode)، بتوانند به پارامترهای مکانی پوسته بسط یابند. .IP \(bu یک زیرپوسته (subshell) حلقه‌ها را از محیط والد خود به ارث می‌برد، بنابراین \fBbreak\fP یا \fBcontinue\fP باعث خروج زیرپوسته خواهد شد. Bash-5.0 و نسخه‌های بعدی وضعیت حلقه را بازنشانی می‌کنند تا از این خروج جلوگیری شود. .IP \(bu انتساب‌های متغیر پیش از دستورات توکار مانند \fBexport\fP و \fBreadonly\fP که صفت‌ها را تنظیم می‌کنند، حتی اگر پوسته در حالت posix نباشد، همچنان بر روی متغیرهای با نام یکسان در محیط فراخواننده تأثیر می‌گذارند. .RE .PD .TP \fBcompat50\fP .PD 0 .RS .IP \(bu نسخه Bash-5.1 روش تولید .SM .B $RANDOM را تغییر داد تا تصادفی‌بودنِ کمی بیشتری ایجاد کند. اگر سطح سازگاری پوسته روی 50 یا پایین‌تر تنظیم شده باشد، به روش bash-5.0 و نسخه‌های قبل بازمی‌گردد، بنابراین مقداردهی اولیه (seed) تولیدکننده اعداد تصادفی با انتساب یک مقدار به .SM .B RANDOM همان دنباله‌ای را تولید خواهد کرد که در bash-5.0 تولید می‌شد. .IP \(bu اگر جدول هش دستورات خالی باشد، نسخه‌های قبل از bash-5.1 پیامی اطلاعاتی مبنی بر این موضوع چاپ می‌کردند، حتی زمانی که خروجی‌ای تولید می‌شد که می‌توانست مجدداً به عنوان ورودی استفاده شود. Bash-5.1 هنگامی که گزینه \fB\-l\fP ارائه شده باشد، آن پیام را سرکوب می‌کند. .RE .PD .TP \fBcompat51\fP .PD 0 .RS .IP \(bu دستور توکار \fBunset\fP تلاش‌ها برای حذف اندیس‌های آرایه \fB@\fP و \fB*\fP را بسته به این که آرایه اندیسی است یا انجمنی، متفاوت و متفاوت از نسخه‌های قبلی پردازش می‌کند. .IP \(bu دستورات حسابی ( .BR (( .\|.\|.\& )) ) و عبارات درون یک عبارت for حسابی می‌توانند بیش از یک بار بسط یابند. .IP \(bu عباراتی که به عنوان آرگومان برای عملگرهای حسابی در دستور شرطی \fB[[\fP استفاده می‌شوند، می‌توانند بیش از یک بار بسط یابند. .IP \(bu عبارات موجود در بسط آکولادی پارامتر زیررشته (substring parameter brace expansion) می‌توانند بیش از یک بار بسط یابند. .IP \(bu عبارات موجود در بسط کلمه .BR $(( .\|.\|.\& )) می‌توانند بیش از یک بار بسط یابند. .IP \(bu عبارات حسابی که به عنوان اندیس آرایه اندیسی استفاده می‌شوند، می‌توانند بیش از یک بار بسط یابند. .IP \(bu دستور \fBtest \-v\fP، اگر آرگومان \fBA[@]\fP به آن داده شود که در آن \fBA\fP یک آرایه انجمنی موجود است، در صورتی که آرایه دارای هر عنصر مقداردهی‌شده‌ای باشد، مقدار درستی (true) برمی‌گرداند. Bash-5.2 به دنبال کلیدی با نام \fB@\fP خواهد گشت و وضعیت آن را گزارش می‌دهد. .IP \(bu بسط کلمه ${\fIparameter\fP\fB[:]=\fP\fIvalue\fP} مقدار \fIvalue\fP را پیش از اعمال هرگونه تبدیلات اختصاصی متغیر (مانند تبدیل به حروف کوچک) برمی‌گرداند. Bash-5.2 مقدار نهایی انتساب‌داده‌شده به متغیر را بازمی‌گرداند. .IP \(bu تجزیه جایگزینی دستور به گونه‌ای عمل خواهد کرد که گویی انطباق الگوی گسترش‌یافته (extended globbing - توضیحات دستور توکار .B shopt در بالا را ببینید) فعال است، به طوری که تجزیه یک جایگزینی دستور حاوی الگوی extglob (برای مثال، به عنوان بخشی از یک تابع پوسته) با شکست مواجه نخواهد شد. این امر با فرض این است که هدف، فعال‌سازی extglob قبل از اجرای دستور و انجام بسط کلمات است. اگر extglob تا زمان اجرای دستور فعال نشده باشد، در زمان بسط کلمه با شکست مواجه خواهد شد. .RE .PD .TP \fBcompat52\fP .PD 0 .RS .IP \(bu دستور توکار \fBtest\fP هنگام دریافت پنج یا تعداد بیشتری آرگومان، از الگوریتم تاریخی خود برای تجزیه زیرعبارت‌های درون پرانتز استفاده می‌کند. .IP \(bu اگر گزینه \fB\-p\fP یا \fB\-P\fP به دستور توکار \fBbind\fP داده شود، \fBbind\fP با هرگونه آرگومان باقی‌مانده پس از پردازش گزینه‌ها مانند نام دستورات قابل پیوند رفتار می‌کند و به‌جای رفتار با آرگومان‌ها به عنوان دنباله کلیدهایی برای مقیدسازی، هرگونه دنباله کلید پیوندیافته به آن دستورات را نمایش می‌دهد. .RE .PD .\" bash_builtins .if \n(zZ=1 .ig zZ .SH "پوسته محدود (RESTRICTED SHELL)" .\" rbash.1 .zY .PP اگر .B bash با نام .B rbash آغاز به کار کند، یا گزینه .B \-r در هنگام فراخوانی داده شود، پوسته به صورت \fIمحدود\fP درمی‌آید. یک پوسته محدود برای برپایی محیطی با کنترل بیشتر نسبت به پوسته استاندارد استفاده می‌شود. این پوسته رفتاری کاملاً یکسان با .B bash دارد، به استثنای این‌که موارد زیر غیرمجاز هستند یا انجام نمی‌شوند: .IP \(bu تغییر دایرکتوری با استفاده از \fBcd\fP. .IP \(bu تنظیم یا لغو تنظیم مقادیر .SM .BR SHELL ، .SM .BR PATH ، .SM .BR HISTFILE ، .SM .BR ENV یا .SM .BR BASH_ENV . .IP \(bu مشخص کردن نام دستورات حاوی .BR / . .IP \(bu مشخص کردن نام فایلی که شامل .B / است به عنوان آرگومان برای دستور توکار .BR . . .IP \(bu استفاده از گزینه \fB\-p\fP برای دستور توکار .B . به جهت تعیین مسیر جستجو. .IP \(bu مشخص کردن نام فایلی که شامل اسلش است به عنوان آرگومان برای دستور توکار .BR history . .IP \(bu مشخص کردن نام فایلی که شامل اسلش است به عنوان آرگومان برای گزینه .B \-p دستور توکار .BR hash . .IP \(bu وارد کردن تعاریف توابع از محیط پوسته در زمان راه‌اندازی. .IP \(bu تجزیه مقادیر .SM .B BASHOPTS و .SM .B SHELLOPTS از محیط پوسته در زمان راه‌اندازی. .IP \(bu تغییر مسیر خروجی با استفاده از عملگرهای تغییر مسیر >، >|، <>، >&، &> و >>. .IP \(bu استفاده از دستور توکار .B exec برای جایگزین کردن پوسته با دستوری دیگر. .IP \(bu افزودن یا حذف دستورات توکار با گزینه‌های .B \-f و .B \-d دستور توکار .BR enable . .IP \(bu استفاده از دستور توکار \fBenable\fP برای فعال کردن دستورات توکار غیرفعال‌شده پوسته. .IP \(bu مشخص کردن گزینه .B \-p برای دستور توکار .BR command . .IP \(bu خاموش کردن حالت محدود با \fBset +r\fP یا \fBshopt \-u restricted_shell\fP. .PP این محدودیت‌ها پس از خوانده شدن تمام فایل‌های راه‌اندازی اعمال می‌شوند. .PP .ie \n(zY=1 هنگامی که دستوری اجرا می‌شود که مشخص شود یک اسکریپت پوسته است، .el \{ هنگامی که دستوری اجرا می‌شود که مشخص شود یک اسکریپت پوسته است (بخش .SM .B "COMMAND EXECUTION" در بالا را ببینید)، .\} .B rbash تمام محدودیت‌ها را در پوسته‌ای که برای اجرای این اسکریپت ایجاد شده است، غیرفعال می‌کند. .\" end of rbash.1 .if \n(zY=1 .ig zY .SH "همچنین ببینید (SEE ALSO)" .PD 0 .TP \fIBash Reference Manual\fP, Brian Fox and Chet Ramey .TP \fIThe Gnu Readline Library\fP, Brian Fox and Chet Ramey .TP \fIThe Gnu History Library\fP, Brian Fox and Chet Ramey .TP \fIPortable Operating System Interface (POSIX) Part 2: Shell and Utilities\fP, IEEE \(em http://pubs.opengroup.org/onlinepubs/9799919799 .TP http://tiswww.case.edu/\*~chet/bash/POSIX \(em شرحی درباره حالت posix .TP \fIsh\fP(1), \fIksh\fP(1), \fIcsh\fP(1) .TP \fIemacs\fP(1), \fIvi\fP(1) .TP \fIreadline\fP(3) .PD .SH "فایلها (FILES)" .PD 0 .TP .FN /bin/bash فایل اجرایی \fBbash\fP .TP .FN /etc/profile فایل مقداردهی اولیه سراسری سیستم، که برای پوسته‌های ورود به سیستم (login shells) اجرا می‌شود .TP .FN \*~/.bash_profile فایل مقداردهی اولیه شخصی، که برای پوسته‌های ورود به سیستم اجرا می‌شود .TP .FN \*~/.bashrc فایل راه‌اندازی اختصاصی به ازای هر پوسته تعاملی .TP .FN \*~/.bash_logout فایل پاک‌سازی اختصاصی پوسته ورود به سیستم، که هنگام خروج از پوسته ورود اجرا می‌شود .TP .FN \*~/.bash_history مقدار پیش‌فرض برای \fBHISTFILE\fP؛ فایلی که bash تاریخچه دستورات را در آن ذخیره می‌کند .TP .FN \*~/.inputrc فایل مقداردهی اولیه اختصاصی \fIreadline\fP .PD .SH "نویسندگان (AUTHORS)" Brian Fox, Free Software Foundation .br bfox@gnu.org .PP Chet Ramey, Case Western Reserve University .br chet.ramey@case.edu .SH "گزارش اشکالات (BUG REPORTS)" اگر اشکالی در .BR bash پیدا کردید، باید آن را گزارش دهید. اما ابتدا، باید مطمئن شوید که آن مورد واقعاً یک اشکال است و در آخرین نسخه از .BR bash وجود دارد. آخرین نسخه همیشه از طریق \fIftp://ftp.gnu.org/pub/gnu/bash\fP و \fIhttp://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz\fP در دسترس است. .PP هنگامی که اطمینان یافتید که اشکال واقعاً وجود دارد، از دستور .I bashbug برای ارسال گزارش اشکال استفاده کنید. اگر برای آن راه‌حلی دارید، پیشنهاد می‌شود آن را نیز از طریق ایمیل ارسال کنید! می‌توانید پیشنهادات و گزارش‌های اشکال .Q فلسفی را به \fIbug-bash@gnu.org\fP ارسال نمایید یا آن‌ها را در گروه خبری یوزنت .BR gnu.bash.bug پست کنید. .PP تمامی گزارش‌های اشکال باید شامل موارد زیر باشند: .PP .PD 0 .TP 20 شماره نسخه \fBbash\fP .TP سختافزار و سیستم‌عامل .TP کامپایلر مورد استفاده برای ساخت و کامپایل .TP شرح رفتار اشکال (bug) .TP یک اسکریپت کوتاه یا \c .Q دستورالعمل " \c" که اشکال را بازتولید کرده و به نمایش بگذارد .PD .PP ابزار .I bashbug سه مورد اول را به طور خودکار در قالبی که برای ثبت گزارش اشکال ارائه میدهد، درج میکند. .PP نظرات و گزارشهای مربوط به اشکالات این صفحه راهنما باید به نشانی زیر ارسال شوند: .IR chet.ramey@case.edu . .SH "اشکالات شناختهشده (BUGS)" بسیار بزرگ و بسیار کند است. .PP تفاوتهای ظریفی میان .B bash و نسخههای سنتی .BR sh وجود دارد، که عمدتاً به دلیل الزامات مشخصات .SM POSIX است. .PP نامهای مستعار (aliasها) در برخی کاربردها گیجکننده هستند. .PP دستورات توکار پوسته و توابع قابلیت متوقف شدن یا راه‌اندازی مجدد (stoppable/restartable) ندارند. .PP دستورات مرکب و فهرستهای دستوری به شکل .Q "a ; b ; c" هنگامی که با تعلیق فرایند ترکیب میشوند، به درستی و ظرافت مدیریت نمیشوند. هنگامی که فرایندی متوقف میشود، پوسته بیدرنگ دستور بعدی در فهرست را اجرا میکند یا از هرگونه حلقه فعلی خارج میشود. برای حل این مورد کافی است دستور را در پرانتز قرار دهید تا اجرای آن به یک زیرپوسته (subshell) تحمیل شود که میتواند به عنوان یک واحد متوقف گردد، یا اینکه دستور را در پسزمینه آغاز کرده و بلافاصله آن را به پیشزمینه بیاورید. .PP متغیرهای آرایهای ممکن است (هنوز) قابلیت برونریزی (export) نداشته باشند. .zZ .zY