Sh - فرمان لینوکس - فرمان یونیکس

نام

bash - گنو بوران باز هم شل

خلاصه

bash [گزینه] [فایل]

شرح

Bash یک مترجم زبان دستور زبان ترکیبی است که فرمانهایی را که از ورودی استاندارد یا از یک فایل خوانده شده است، اجرا می کند. Bash ویژگی های مفیدی از پوسته Korn و C ( ksh و csh ) نیز دارد.

Bash در نظر گرفته شده است که یک پیاده سازی صحیح از ویژگی IEEE POSIX Shell و Tools (IEEE Working Group 1003.2) باشد.

گزینه ها

علاوه بر گزینه های پوسته تک کاراکتری که در توضیحات دستورالعمل ساخته شده نوشته شده است، bash گزینه های زیر را هنگامی که آن را فراخوانی می کند، تفسیر می کند:

-c رشته

اگر گزینه -c وجود داشته باشد، دستورات از رشته خوانده می شوند. اگر استدلال بعد از رشته وجود دارد ، آنها به پارامترهای موقعیتی اختصاص داده می شوند، با شروع از $ 0 .

-من

اگر گزینه -i موجود باشد، پوسته تعاملی است .

-l

عمل bash را به گونه ای انجام دهید که انگار آن را به عنوان یک پوسته ورودی فراخوانی کرده اید (در زیر آمده است).

-r

اگر گزینه -r موجود باشد، پوسته محدود می شود (نگاه کنید به RESTRICTED SHELL در زیر).

-s

اگر گزینه -s وجود داشته باشد یا اگر بعد از پردازش گزینه، هیچ استدلالی باقی نمانده باشد، دستورات از ورودی استاندارد خواندند. این گزینه اجازه می دهد تا هنگام تنظیم یک پوسته تعاملی پارامترهای موقعیتی تنظیم شود.

-D

لیستی از تمام رشته های دوگانه ای که پیش از آن $ هستند ، بر روی خروجی استاندارد چاپ می شود. اینها رشته هایی هستند که برای ترجمه زبان مورد نیاز هستند، زمانی که محلی فعلی C یا POSIX نیست . این نشان می دهد گزینه -n ؛ هیچ فرمانی اجرا نخواهد شد.

[- +] O [ shopt_option ]

shopt_option یکی از گزینه های پوسته پذیرفته شده توسط shopt buit است (نگاه کنید به SHELL BUILTIN COMMANDS در زیر). اگر shopt_option وجود دارد، -O مقدار این گزینه را تنظیم می کند؛ + O آن را حذف می کند اگر shopt_option تامین نشده باشد، نام و مقادیر گزینه های پوسته پذیرفته شده توسط shopt بر روی خروجی استاندارد چاپ می شوند. اگر گزینه فراخوانی + O باشد ، خروجی در یک فرمت نمایش داده می شود که ممکن است به عنوان ورودی دوباره استفاده شود.

A - پایان گزینه ها را نشان می دهد و پردازش گزینه های بیشتر را غیرفعال می کند. هر استدلالی بعد از آن - به عنوان نام فایل و استدلال در نظر گرفته می شود. استدلال - برابر است - .

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

--dump-po-strings

معادل با -D ، اما خروجی در فرمت فایل gettext po (قابل حمل) است.

- دندانه دار کردن

معادل با D

--کمک

نمایش یک پیام استفاده در خروجی استاندارد و خروج با موفقیت.

- فایل فایل منی

فایل --rcfile

دستورالعمل ها را از فایل به جای پرونده پرونده استاندارد شخصی شخصی ~ / .bashrc اجرا کنید اگر پوسته تعاملی باشد (به ادعای زیر مراجعه کنید).

--ورود

معادل با -l

--noediting

از خواندن کتابخانه GNU برای خواندن خطوط خط زمانی که پوسته تعاملی است استفاده نکنید.

--noprofile

آیا فایل راه اندازی سیستم و غیره / پروفایل یا هر یک از فایل های واسطه شخصی ~ / .bash_profile ، ~ / .bash_login ، یا ~ / .profile را بخوانید . به طور پیش فرض، bash این فایل ها را وقتی که به عنوان shell login نامیده می شود، خوانده می شود .

--norc

خواندن و اجرای پرونده شخصی سازی اولیه ~ / .bashrc اگر پوسته تعاملی باشد. این گزینه به طور پیش فرض در صورتی که پوسته به عنوان SH تغییر نام دهد .

- پیمایش

رفتار رفتار bash را تغییر دهید جایی که عمل پیشفرض از استاندارد POSIX 1003.2 متفاوت است و با استاندارد ( حالت posix ) مطابقت دارد.

--محصور

پوسته محدود می شود (نگاه کنید به RESTRICTED SHELL در زیر).

--rpm - نیاز دارد

لیست فایل هایی را که برای اجرای اسکریپت پوسته مورد نیاز است، تولید کنید. این بدین معنی است که "-n" و همان محدودیت هایی است که چک کردن چک کردن خطا در زمان کامپایل انجام می شود؛ Backticks، [] تست ها و evals تجزیه نیست بنابراین برخی از وابستگی ممکن است از دست رفته است. --verbose برابر با -v .

- نسخه

نمایش اطلاعات نسخه برای این نمونه از bash در خروجی استاندارد و خروج با موفقیت.

ARGUMENTS

اگر استدلال بعد از پردازش گزینه ها باقی می ماند و نه گزینه -c و نه -s ارائه شده است، اولین استدلال فرض می شود که نام یک پرونده حاوی دستورات پوسته است. اگر bash به این شکل فراخوانی شود، $ 0 به نام فایل تنظیم شده است، و پارامترهای موقعیتی به آرگومان باقی مانده تنظیم شده است. Bash خواندن و اجرای دستورات را از این فایل، و سپس خروج. وضعیت خروج Bash از وضعیت خروج آخرین فرمان اجرا شده در اسکریپت است. اگر هیچ فرمان اجرا نشود، وضعیت خروج 0 است. ابتدا تلاش برای باز کردن فایل در پوشه جاری است، و اگر هیچ فایلی یافت نشد، پس پوسته دایرکتوری را در PATH برای اسکریپت جستجو می کند.

محاکمه

یک پوسته ورودی است که اولین علامت آرگومان صفر است - یا یکی با گزینه log-in آغاز می شود.

یک پوسته تعاملی است که بدون استدلال غیر گزینه ای شروع شده و بدون گزینه -c که ورودی و خروجی استاندارد هر دو به پایانه ها متصل است (همانطور که توسط isatty (3) تعیین شده است) یا یکی با گزینه -i آغاز شده است. PS1 تنظیم شده است و $ - شامل من اگر bash تعاملی باشد، اجازه می دهد یک اسکریپت پوسته یا یک فایل راه اندازی برای تست این حالت.

پاراگراف های زیر توضیح می دهد که چگونه bash فایل های راه اندازی خود را اجرا می کند. اگر هر یک از فایل ها وجود داشته باشد اما نمی توان خواند، bash یک خطا را گزارش می کند. Tildes در نام فایل ها گسترش یافته است، همانطور که در زیر بخش توسعه یافته Tilde Expansion شرح داده شده است.

هنگامی که bash به عنوان پوسته ورودی تعاملی فراخوانی می شود یا به عنوان یک پوسته غیر تعاملی با گزینه log ، ابتدا دستورات را از فایل / etc / profile اجرا می کند ، اگر این فایل وجود داشته باشد. پس از خواندن این فایل، ~ / .bash_profile ، ~ / .bash_login و ~ / .profile در آن منظور به نظر می رسد و دستورات را از اولین مورد موجود و قابل خواندن خوانده و اجرا می کند. گزینه option -noprofile هنگامی که پوسته شروع به مهار این رفتار می شود استفاده می شود.

وقتی پوسته ورودی خروج می شود، bash دستورات را از پرونده ~ / .bash_logout می خواند و اجرا می کند، اگر آن وجود داشته باشد.

هنگامی که یک پوسته تعاملی که یک پوسته ورود نیست، شروع به اجرا می کند، bash دستورات را از ~ / .bashrc می خواند و اجرا می کنند، اگر این فایل وجود داشته باشد. این ممکن است با استفاده از گزینه --norc مهار شود. گزینه file -rcfile باس به خواندن و اجرای دستورات از فایل به جای ~ / .bashrc مجبور خواهد شد.

به عنوان مثال، اگر bash به صورت غیر تعاملی شروع شود، برای اجرای یک اسکریپت پوسته، به عنوان مثال متغیر BASH_ENV در محدوده محیط را می بیند ، اگر مقدار آن در آنجا ظاهر شود، مقدار آن را گسترش می دهد و از آن به عنوان نام فایل برای خواندن و اجرای استفاده می کند . Bash رفتار می کند به شرط اینکه دستور زیر اجرا شود:

اگر [-n "$ BASH_ENV"]؛ سپس . "$ BASH_ENV"؛ فی

اما مقدار متغیر PATH برای جستجوی نام فایل مورد استفاده قرار نمی گیرد.

اگر bash با نام sh نامیده می شود، آن را تلاش می کند رفتار راه اندازی نسخه های تاریخی sh به عنوان نزدیک ترین ممکن، در حالی که مطابق با استاندارد POSIX نیز تقلید. هنگامی که به عنوان یک پوسته ورودی تعاملی یا یک پوسته غیر تعاملی با گزینه -login فراخوانی می شود، ابتدا تلاش می کند دستورات را از / etc / profile و ~ / .profile در این ترتیب بخواند و اجرا کند. برای جلوگیری از این رفتار می توان گزینه option -noprofile را استفاده کرد. هنگامی که به عنوان یک پوسته تعاملی با نام sh فراخوانی می شود، bash یک متغیر ENV را جستجو می کند، اگر آن را تعریف کند، ارزش آن را گسترش می دهد و از مقدار گسترش یافته به عنوان نام یک فایل برای خواندن و اجرای استفاده می کند. از آنجا که یک پوسته که به عنوان sh نامیده می شود ، سعی نمی کند دستورات را از هر فایل راه اندازی دیگری بخواند و اجرا کند، گزینه --rcfile هیچ تأثیری ندارد. یک پوسته غیر تعاملی که با نام sh نامیده می شود، سعی در خواندن سایر فایل های راه اندازی نمی کند. هنگامی که به عنوان SH نامیده می شود، bash بعد از خواندن فایل های راه اندازی به حالت posix وارد می شود.

هنگامی که bash در حالت posix شروع می شود، همانطور که با گزینه خط -posix ، از استاندارد POSIX برای فایل های راه اندازی پیروی می کند. در این حالت، پوسته های تعاملی متغیر ENV را گسترش می دهند و دستورات از پرونده ای که نام آن مقدار expanded است خواندن و اجرا می شود. هیچ فایل دیگر راه اندازی نمی شود.

Bash تلاش می کند تا زمانی که توسط daemon shell پوسته اجرا می شود، معمولا rshd . اگر bash تعیین می کند که توسط rshd اجرا می شود، دستورات را از ~ / .bashrc خواندن و اجرا می کند، اگر این فایل وجود داشته باشد و قابل خواندن باشد. این کار را انجام نخواهد داد در صورتی که به عنوان SH توضیح داده شود . گزینه fornorc برای مهار این رفتار ممکن است مورد استفاده قرار گیرد و گزینه option --rcfile برای مجبور کردن یک فایل دیگر به عنوان خوانده شده است، اما rshd به طور کلی پوسته را با این گزینه ها نمی نامید و اجازه نمی دهد آنها را مشخص کند.

اگر پوسته با شناسه كارآمد (گروهی) موثر با شناسه واقعی (گروهی) واقعی برقرار شود و گزینه -p ارائه نشده باشد، هیچ فایل راه اندازی خوانده نمی شود، توابع پوسته از محیط زیست به ارث نمی برند، SHELLOPTS متغیر، اگر آن را در محیط ظاهر می شود، نادیده گرفته شده است، و شناسه موثر کاربر بر روی شناسه واقعی واقعی تنظیم شده است. اگر گزینه -p در فراخوانی عرضه شود، رفتار راه اندازی یکسان است، اما شناسه موثر تنظیم مجدد نیست.

تعاریف

تعاریف زیر در سراسر بقیه این سند استفاده می شود.

جای خالی

یک فضای یا برگه.

کلمه

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

نام

یک کلمه متشکل از کاراکترهای عددی و علامت و حروف الفبا و یا یک حروف الفبا یا یک حروف برجسته. همچنین به عنوان یک شناسه شناخته می شود .

metacharacter

یک شخصیت که در هنگام نقل قول، کلمات را جدا می کند. یکی از موارد زیر:

| & () <> فاصله فضا

اپراتور کنترل

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

|| &&&؛ ؛؛ () |

واژه های واجد شرایط

کلمات رزرو شده کلمات هستند که معنی خاصی برای پوسته دارند. کلمات زیر به عنوان محرمانه در هنگام نقل قول و یا اولین کلمه یک فرمان ساده (نگاه کنید به SHELL GRAMMAR در زیر) و یا کلمه سوم یک مورد یا برای دستور:

! case انجام elif else esac fi برای عملکرد اگر در انتخاب آن تا زمانی که {} زمان [[]]

شل گرامر

دستورات ساده

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

مقدار بازگشتی یک دستور ساده وضعیت خروج آن است، یا اگر 128 + n با دستور سیگنال به پایان رسیده باشد

خطوط لوله

خط لوله یک دنباله از یک یا چند فرمان است که توسط شخصیت جدا شده است . فرمت یک خط لوله:

[ زمان [ -p ]] [! ] فرمان [ | فرمان 2 ...]

خروجی استاندارد فرمان از طریق یک لوله به ورودی استاندارد فرمان 2 متصل می شود . این اتصال قبل از هر گونه تغییر مسیر هدایت شده توسط فرمان انجام می شود (به REDIRECTION زیر مراجعه کنید).

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

اگر زمان کلمه متعلق به قبل از یک خط لوله پیش میرود، مدت زمانی که کاربر و زمان سیستم مورد استفاده قرار میگیرند، زمانی که خط لوله متوقف می شود گزارش می شود. گزینه -p فرمت خروجی را که توسط POSIX مشخص شده تغییر می دهد. متغیر TIMEFORMAT ممکن است به یک رشته فرمت تنظیم شود که مشخص می کند چگونه اطلاعات زمان بندی نمایش داده شود. توضیحات TIMEFORMAT را در زیر متغیرهای Shell ببینید.

هر فرمان در یک خط لوله به عنوان یک فرآیند جداگانه اجرا می شود (یعنی در زیرشبکه).

لیست ها

یک لیست یک دنباله از یک یا چند خط لوله است که توسط یکی از اپراتورها جدا شده است . ، & ، && ، یا || ، و به صورت اختیاری توسط یکی از ؛ ، & ، یا .

از این لیست اپراتورها، && و || اولویت برابر دارند، به دنبال آن ؛ و که دارای اولویت برابر هستند.

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

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

اپراتورهای کنترل && و || به ترتیب لیست AND لیست ها و OR را نشان می دهد. لیست AND دارای فرم است

command1 && command2

command2 اگر و تنها اگر دستور1 یک وضعیت خروج صفر را باز می کند.

لیست OR دارای فرم است

command1 || فرمان 2

command2 اگر و فقط اگر دستور1 وضعیت خروجی غیر صفر را باز کند، اجرا می شود. وضعیت بازگشت لیست AND و OR وضعیت خروج آخرین دستور اجرا شده در لیست است.

دستورات ترکیب

دستور ترکیب یکی از موارد زیر است:

( لیست )

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

{ list ؛ }

لیست به سادگی در محیط پوسته فعلی اجرا می شود. لیست باید با رشته جدید یا semicolon خاتمه یابد. این به عنوان یک فرمان گروه شناخته می شود. وضعیت بازگشت وضعیت خروج از لیست است . توجه داشته باشید که بر خلاف metacharacters ( و ) ، { و } کلمات واضحی هستند و باید در جایی که یک کلمه محدود شده قابل شناسایی است، رخ دهد. از آنجایی که آنها باعث لغزش کلمه نمی شوند، باید از فضای خالی از لیست جدا شوند.

(( بیان ))

بیان شده است با توجه به قوانین شرح زیر در زیر ارزیابی ARITHMETIC ارزیابی می شود . اگر مقدار بیان غیر صفر باشد، وضعیت بازگشت 0 است؛ در غیر این صورت وضعیت بازگشت 1 است. دقیقا معادل آن است که اجازه دهید « بیان » شود.

[[ بیان ]]

وضعیتی از 0 یا 1 را بسته به ارزیابی بیان بیان شرطی بازگردانید. عبارات از مقدماتی که در زیر توضیح داده شده تحت EXPORDIONS CONDITIONAL شرح داده شده است . تقسیم کلمه و پهنای باند در کلمات بین [[ و ]] انجام نمی شود؛ گسترش تیلد، گسترش پارامتر و متغیر، گسترش محاسباتی، جایگزینی فرمان، جایگزینی فرآیند و حذف نقل قول انجام می شود.

هنگامی که عملگرهای == و ! = استفاده می شود، رشته ای که در سمت راست اپراتور قرار دارد، یک الگو است و مطابق با قوانین زیر در زیر تطبیق الگو مطابقت دارد . مقدار بازگشتی 0 است اگر رشته با یا الگوی منطبق سازگار باشد و 1 در غیر این صورت. هر بخشی از الگوریتم میتواند به عنوان یک رشته مطابقت داده شود.

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

( بیان )

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

! اصطلاح

درست است اگر بیان نادرست باشد

expression1 && expression2

درست است که هر دو expression1 و expression2 درست باشند.

expression1 || expression2 درست اگر either expression1 یا expression2 true باشد.

&& و || اپراتورها expression2 را ارزیابی نمی کنند اگر مقدار expression1 برای تعیین مقدار بازگشتی کل عبارت conditional کافی است.

برای نام [ در کلمهلیست انجام دهید انجام شده

لیستی از کلمات در زیر گسترش یافته است، تولید یک لیست از موارد. نام متغیر به طور عادی برای هر عنصر این لیست تنظیم شده و هر بار لیست اجرا می شود. اگر در کلمه حذف شده باشد، دستور برای اجرا هر یک از پارامترهای موضعی تنظیم شده، یک بار برای لیست اجرا می شود ( PARAMETERS را در زیر ببینید). وضعیت بازگشت وضعیت خروج از آخرین دستور است که اجرا می شود. اگر گسترش اقلام زیر در نتایج یک لیست خالی باشد، هیچ دستورالعمل اجرا نمیشود و وضعیت بازگشت 0 است.

برای (( expr1 ؛ expr2 ؛ expr3 ))؛ لیست انجام دهید انجام شده

اول، عبارات ریاضی expr1 با توجه به قوانین زیر در زیر ارزیابی ARITHMETIC ارزیابی می شود . عبارت expr2 معنی دار سپس بارها مورد بررسی قرار می گیرد تا آن را به صفر ارزیابی کند. هر بار که expr2 به مقدار غیر صفر ارزیابی می شود، لیست اجرا می شود و عبارت expr3 محاسبه شده ارزیابی می شود. اگر هر علامت حذف شده باشد، آن را به صورت زیر بررسی می کند: 1. مقدار بازگشتی وضعیت خروج آخرین دستور در لیست است که اجرا می شود، یا اگر هر یک از عبارات نامعتبر است، نادرست باشد.

نام را انتخاب کنید [ در کلمهلیست انجام دهید انجام شده

لیستی از کلمات در زیر گسترش یافته است، تولید یک لیست از موارد. مجموعه ای از کلمات گسترش یافته بر روی خطای استاندارد چاپ می شود، هر کدام قبل از آن یک عدد است. اگر کلمه لغو شود، پارامترهای موقعیتی چاپ می شوند ( PARAMETERS را در زیر ببینید). فوری PS3 سپس نمایش داده می شود و یک خط از ورودی استاندارد خواند. اگر خط از یک عدد مربوط به یکی از کلمات نمایش داده شده است، سپس مقدار نام به آن کلمه تنظیم شده است. اگر خط خالی است، کلمات و فوری دوباره نمایش داده می شود. اگر EOF خوانده شود، فرمان کامل می شود. هر مقدار دیگر خواندن باعث می شود نام به صفر برسد. خط خواندن در متغیر REPLY ذخیره می شود . این لیست بعد از هر انتخاب اجرا می شود تا دستور شکستن اجرا شود. وضعیت خروج از انتخاب وضعیت خروج از آخرین دستور اجرا شده در لیست است ، یا صفر اگر هیچ فرمان اجرا نشد.

کلمه مورد در [[(([ pattern ] [ | pattern ]

یک فرمان case ابتدا کلمه را گسترش می دهد و تلاش می کند تا با استفاده از همان قوانین تطبیق برای گسترش پهنمون (به بخش گسترش Pathname در زیر) آن را مطابق با هر الگو بچرخانیم . وقتی یک بازی پیدا می شود، لیست مربوطه اجرا می شود. پس از اولین مسابقه، هیچ تلاشی برای بازی بعدی انجام نمی شود. وضعیت خروج صفر است اگر هیچ الگو منطبق نباشد. در غیر این صورت، وضعیت خروج آخرین دستور اجرا شده در لیست است .

اگر فهرست سپس لیست کنید [ لیست elif ؛ سپس لیست کنید ] ... [ لیست دیگر ؛ ] فی

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

در حالی که لیست لیست انجام دهید انجام شده

تا لیست لیست انجام دهید انجام شده

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

[ function ] name () { list ؛ }

این تابع نامی را تعریف می کند. بدن تابع لیست دستورات بین {و} است. این لیست هر زمانی که نام به عنوان یک فرمان ساده مشخص می شود، اجرا می شود. وضعیت خروج یک تابع، وضعیت خروج آخرین فرمان اجرا شده در بدن است. ( FUNCTIONS را در زیر ببینید.)

نظرات

در پوسته غیر تعاملی و یا یک پوسته تعاملی که در آن گزینه interactive_comments به builtin فعال است (نگاه کنید به SHELL BUILTIN COMMANDS در زیر)، کلمه ای که با # آغاز می شود این کلمه و تمام شخصیت های باقی مانده در آن خط را نادیده می گیرد. پوسته تعاملی بدون گزینه interactive_comments فعال اجازه نمی دهد نظرات. گزینه interactive_comments به طور پیش فرض در پوسته های تعاملی فعال است.

نقل قول

نقل قول برای حذف معنای خاصی از کاراکترها یا کلمات خاص برای پوسته استفاده می شود. نقل قول را می توان برای غیر فعال کردن درمان ویژه ای برای کاراکتر های خاص استفاده کرد تا از کلمات محرمانه به عنوان شناسایی شده و برای جلوگیری از گسترش پارامترها جلوگیری شود.

هر یك از متاكاروهایی كه در بالا ذكر شده در DEFINITIONS ذكر شده است معنی خاصی برای پوسته است و اگر برای نشان دادن خود باشد باید نقل قول شود.

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

سه مکانیسم نقل قول وجود دارد: شخصیت فرار ، تک نقل و دو نقل قول.

یک backslash ( \ ) بدون نقل قول، کاراکتر فرار است . این مقدار ارزشمندی از شخصیت بعدی که به دنبال آن است، به استثنای نگهداری می شود. اگر یک جفت \ به نظر می رسد و بکسلش به خودی خود نقل نشده است، \ به عنوان یک خط ادامه می یابد (یعنی آن از جریان ورودی حذف شده و به طور موثر نادیده گرفته می شود).

شخصیت های محصور در نقل قول ها ارزش حقیقی هر شخصیت را در نقل قول حفظ می کند. نقل قول تنها ممکن است بین نقل قول ها رخ ندهد، حتی زمانی که پیش از آن با یک بک لشکر پیش می آید.

خصوصیات محصور در نقلقولهای دوگانه، ارزش اسمی تمام کاراکترها در نقل قول ها را حفظ می کند، به غیر از $ ، ` و \ . شخصیت های $ و ' معنای خاص خود را در دو نقل قول حفظ می کنند. بکسلش تنها معنای خاص خود را حفظ می کند و به دنبال آن یکی از شخصیت های زیر است: $ ، ` ، ' ، \ ، یا . یک نقل قول دوگانه ممکن است در نقل قول های دوگانه قبل از آن با بک لایک نقل شده باشد.

پارامترهای خاص * و @ به معنای خاص زمانی که در دو نقل قول ( PARAMETERS زیر را ببینید).

کلمات فرم $ ' string ' به طور خاص تحت تاثیر قرار می گیرند. کلمه به رشته گسترش می یابد، با نویسه های فراموش شده backslash جایگزین شده به عنوان مشخص شده توسط استاندارد ANSI C. توالی فرار Backslash در صورت وجود، به صورت زیر رمزگشایی می شوند:

\ a

هشدار (زنگ)

\ b

پشت سر هم

\ e

شخصیت فرار

\ f

خوراک فرم

\ n

خط جدید

\ r

برگشت محموله

\ t

زبانه افقی

\ v

برگه عمودی

\\

بکسلش

\ '

نقل قول تک

\ nnn

کاراکتر هشت بیت که ارزش آن یک مقدار هشتم nnn است (یک تا سه رقم)

\ x HH

کاراکتر هشت بیت که ارزش آن هگزادسیمال ارزش HH (یک یا دو رقم هگز) است

\ c x

یک شخص کنترل x

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

یک ردیف نقل قول دوگانه پیش از نشانه دلار ( $ ) باعث می شود که رشته به زبان فعلی ترجمه شود. اگر مکان فعلی C یا POSIX باشد ، علامت دلار نادیده گرفته می شود. اگر رشته ترجمه شده و جایگزین شده باشد، جایگزینی به دو صورت نقل شده است.

مولفه های

پارامتر یک نهاد است که ارزش ها را ذخیره می کند. این می تواند یک نام ، یک عدد یا یکی از کاراکترهای ویژه ذکر شده زیر در زیر پارامترهای خاص باشد. برای اهداف پوسته، یک متغیر یک پارامتر با نام است . متغیر یک مقدار و صفر یا بیشتر دارد. خصیصه ها با استفاده از دستور declare builtin اعطا می شوند (در زیر در COMMANDS SHELL BUILTIN توضیح دهید).

یک پارامتر تنظیم شده است اگر یک مقدار داده شده است. رشته صفر یک مقدار معتبر است. هنگامی که یک متغیر تنظیم می شود، می توان آن را تنها با استفاده از فرمان builtin unset تنظیم کرد ( SHELL BUILTIN COMMANDS زیر را ببینید).

یک متغیر ممکن است توسط بیانیه ای از فرم تعیین شود

نام = [ ارزش ]

اگر مقدار داده نشود، متغیر رشته صفر تعیین می شود. تمام ارزش ها تحت توسعه تیلده، گسترش پارامتر و متغیر، جایگزینی فرمان، گسترش محاسباتی و حذف نقل قول ( EXPANSION زیر را ببینید). اگر متغیر مقدار مشخصی صحیح خود را تنظیم کند، پس از آن مقدار به صورت محاسباتی گسترش می یابد، حتی اگر گسترش $ ((...)) از آن استفاده نشود (به توضیحات زیر توجه کنید). تقسیم کلمه انجام نشده است، به استثنای "$ @" که در زیر در پارامترهای ویژه توضیح داده شده است. گسترش Pathname انجام نشده است. اظهارات تخصیص همچنین ممکن است به عنوان استدلال برای اعلام ، تایپ کردن ، صادرات ، خواندن فقط و دستورات محلی داخلی ظاهر شود.

پارامترهای موقتی

یک پارامتر موقعیتی یک پارامتر است که توسط یک یا چند رقم مشخص می شود، غیر از رقم تک 0. پارامترهای موقتی از استدلال های پوسته زمانی که آن را فراخوانی می شود، اختصاص داده می شوند و با استفاده از دستور builtin مجموعه می توانند مجددا تعیین شوند . پارامترهای موقتی ممکن است با اظهارات تخصیص داده شود. هنگامی که یک تابع پوسته اجرا می شود پارامترهای موقتی جایگزین می شوند (نگاه کنید به FUNCTIONS ها در زیر).

هنگامی که پارامتر موقعیتی متشکل از بیش از یک رقم تک گسترش یافته است، باید در braces محصور شود (نگاه کنید به EXPANSION در زیر).

پارامترهای ویژه

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

*

به پارامترهای موقعیتی، از یک شروع می شود. هنگامی که گسترش در دو نقل قول رخ می دهد، آن را به یک کلمه واحد با مقدار هر پارامتر جدا شده توسط اولین کاراکتر متغیر ویژه IFS گسترش می یابد. به عبارت دیگر، " $ * " برابر با " $ 1 c $ 2 c ... " است، در حالی که c اولین علامت مقدار متغیر IFS است. اگر IFS تنظیم نشده باشد، پارامترها با فاصله ها جدا می شوند. اگر IFS صفر باشد، پارامترها بدون جداسازی مداخله می شوند.

@

به پارامترهای موقعیتی، از یک شروع می شود. هنگامی که گسترش در داخل نقل قول ها رخ می دهد، هر پارامتر به یک کلمه جداگانه گسترش می یابد. به این معناست که " $ @ " برابر با $ 1 است " $ 2 " ... وقتی پارامترهای موقعیتی وجود ندارد، " $ @ " و $ @ به هیچ چیز (یعنی حذف می شوند).

#

به تعداد پارامترهای موقعیت در دهدهی گسترش می یابد.

؟

به وضعیت جدیدترین خط لوله پیش زمینه اجرا شده گسترش می یابد.

-

با استفاده از فرمان builtin تعیین شده یا آنهایی که توسط خود پوسته تعیین شده (مانند گزینه -i )، به پرچم گزینه فعلی گسترش می یابد.

$

به شناسه پردازش پوسته گسترش می یابد. در زیر ()، آن را به شناسه فرآیند پوسته فعلی گسترش می دهد، نه پوسته پوسته.

!

به شناسه فرآیند فرمان اخیر (که به طور غیرمستقیم اجرا می شود) گسترش می یابد.

0

به نام اسکریپت پوسته یا پوسته گسترش می یابد. این در ابتدای پوسته تنظیم می شود. اگر bash با یک فایل از دستورات فراخوانی شود، $ 0 به نام آن فایل تنظیم شده است. اگر bash با گزینه -c شروع شود، سپس 0 $ برای اولین آرگومان پس از اجرای رشته تعیین می شود، اگر یک موجود باشد. در غیر این صورت، آن را به نام فایل مورد استفاده برای فراخوانی bash ، به عنوان داده شده توسط آرگومان صفر تنظیم شده است.

_

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

متغیرهای شل

متغیرهای زیر توسط پوسته تنظیم می شوند:

بش

به نام فایل کامل مورد استفاده برای فراخوانی این نمونه از bash گسترش می یابد.

BASH_VERSINFO

یک متغیر آرایه readonly که اعضا اطلاعات نسخه را برای این نمونه از bash نگه می دارند . مقادیر اختصاص یافته به اعضای آرایه به شرح زیر است:

BASH_VERSINFO [ 0]

شماره نسخه اصلی ( انتشار ).

BASH_VERSINFO [ 1]

شماره نسخه جزئی ( نسخه ).

BASH_VERSINFO [ 2]

سطح پچ

BASH_VERSINFO [ 3]

نسخه ساخت

BASH_VERSINFO [ 4]

وضعیت آزمایشی (به عنوان مثال، بتا 1 ).

BASH_VERSINFO [ 5]

ارزش MACHTYPE .

BASH_VERSION

گسترش به یک رشته توصیف نسخه این نمونه از bash .

COMP_CWORD

COMP_LINE

خط فرمان فعلی این متغیر تنها در توابع پوسته و دستورات خارجی موجود است که توسط امکانات تکمیل برنامه ریزی شده قابل مشاهده است (نگاه کنید به تکمیل برنامه ریزی شده در زیر).

COMP_POINT

COMP_WORDS

یک متغیر آرایه (نگاه کنید به آرایه های زیر) شامل کلمات کلیدی در خط فرمان فعلی است. این متغیر فقط در توابع پوسته ای که توسط امکانات تکمیل برنامه ریزی شده مورد استفاده قرار می گیرد (نگاه کنید به تکمیل برنامه ریزی شده در زیر).

DIRSTACK

یک متغیر آرایه (نگاه کنید به آرایه های زیر) حاوی مطالب فعلی پشته دایرکتوری. راهنماها در پشته ظاهر می شوند به ترتیب که آنها توسط بقیه ساخته می شوند. اختصاص دادن به اعضای این متغیر آرایه می تواند برای تغییر دایرکتوری در حال حاضر در پشته مورد استفاده قرار گیرد، اما برای ایجاد و حذف دایرکتوری ها باید از builtins pushd و pop استفاده شود. تخصیص به این متغیر دایرکتوری فعلی را تغییر نخواهد داد. اگر DIRSTACK غیرفعال شود، خواص خاص خود را از دست می دهد، حتی اگر بعدا تنظیم مجدد شود.

EUID

به شناسه کاربر موثر کاربر فعلی گسترش می یابد، که در هنگام راه اندازی پوسته شروع می شود. این متغیر فقط خواندنی است

FUNCNAME

نام هر تابع پوسته فعلی اجرا شده. این متغیر تنها زمانی وجود دارد که یک تابع shell اجرا شود. تخصیص به FUNCNAME هیچ تأثیری ندارد و وضعیت خطا را باز می کند. اگر FUNCNAME غیرفعال شود، خواص ویژه آن را از دست می دهد، حتی اگر بعدا تنظیم مجدد شود.

گروه ها

یک متغیر آرایه حاوی لیست گروههایی است که کاربر فعلی یک عضو است. تخصیص به GROUPS تأثیری ندارد و وضعیت خطا را باز می کند. اگر GRUPS غیرفعال شود، خواص ویژه آن را از دست می دهد، حتی اگر بعدا تنظیم مجدد شود.

HISTCMD

شماره تاریخ، یا فهرست در لیست تاریخ، از دستور فعلی. اگر HISTCMD تنظیم نشده باشد، خواص خاص خود را از دست می دهد، حتی اگر بعدا تنظیم مجدد شود.

HOSTNAME

به صورت خودکار به نام میزبان کنونی تنظیم شده است.

HOSTTYPE

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

لیندن

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

ماچتیپ

به صورت خودکار به یک رشته که به طور کامل نوع سیستم را اجرا می کند که bash اجرا می کند، در فرمت سیستم GNU cpu-company شرکت سیستم است. پیش فرض سیستم وابسته است.

OLDPWD

دایرکتوری کار قبلی که توسط دستور cd تعیین شده است.

OPTARG

ارزش آخرین آرگومان گزینه پردازش شده توسط دستور getopts builtin ( SHELL BUILTIN COMMANDS زیر را ببینید).

OPTIND

شاخص آرگومان بعدی که توسط دستور getopts builtin پردازش می شود ( SHALL BUILTIN COMMANDS زیر را ببینید).

OSTYPE

به طور خودکار به یک رشته که سیستم عامل که در آن bash اجرا می شود را تعیین می کند. پیش فرض سیستم وابسته است.

پیاده روی

یک متغیر آرایه (نگاه کنید به آرایه های زیر) حاوی لیستی از مقادیر خروج از فرآیندها در خط لوله پیش زمینه ای که اخیرا اجرا شده (که ممکن است تنها یک فرمان تنها) باشد.

PPID

شناسه فرآیند والدین پوسته. این متغیر فقط خواندنی است

PWD

دایرکتوری کاری فعلی که توسط دستور cd تعیین شده است.

تصادفی

هر بار که این پارامتر ارجاع می شود، یک عدد صحیح تصادفی بین 0 و 32767 ایجاد می شود. توالی اعداد تصادفی ممکن است با اختصاص یک مقدار به RANDOM مقداردهی شود. اگر RANDOM غیرفعال باشد، خواص ویژه آن را از دست می دهد، حتی اگر بعدا تنظیم مجدد شود.

پاسخ

وقتی که هیچ استدلالی ارائه نمی شود، به خط ورودی خوانده شده توسط دستور builtin خواندن تنظیم شود.

SECONDS

هر بار که این پارامتر ارجاع می شود، تعداد ثانیه ها از زمان فراخوانی پوسته باز می شود. اگر مقدار به SECONDS اختصاص داده شود، مقدار بعد از مراجعه بعدی، تعداد ثانیه ها از انتساب به اضافه مقدار تعیین شده است. اگر SECONDS غیر فعال شود، خواص ویژه آن را از دست می دهد، حتی اگر بعدا تنظیم مجدد شود.

شلپتس

لیستی از گزینه های پوسته فعال فعال شده است. هر کلمه ای در لیست یک آرگومان معتبر برای گزینه -o به دستور builtin مجموعه است ( SHELL BUILTIN COMMANDS زیر را ببینید). گزینه هایی که در SHELLOPTS نمایش داده می شوند همان هایی هستند که توسط set -o گزارش شده اند. اگر این متغیر در هنگام راه اندازی bash در محیط باشد، هر گزینه پوسته در لیست قبل از خواندن هر فایل راه اندازی فعال خواهد شد. این متغیر فقط خواندنی است.

SHLVL

هر بار یک نمونه از bash افزایش می یابد.

UID

به شناسه کاربر کاربر فعلی گسترش می یابد، که در هنگام راه اندازی پوسته شروع می شود. این متغیر فقط خواندنی است

متغیرهای زیر توسط پوسته استفاده می شود. در بعضی موارد، bash یک مقدار پیشفرض را برای یک متغیر اختصاص می دهد؛ این موارد در زیر ذکر شده است.

BASH_ENV

اگر این پارامتر زمانی که bash اجرای اسکریپت پوسته را تنظیم می کند، مقدار آن به عنوان یک نام پرونده حاوی دستورات برای مقداردهی اولیه پوسته، همانند در ~ / .bashrc تفسیر می شود. مقدار BASH_ENV قبل از تفسیر به عنوان نام فایل، به گسترش پارامترها، جایگزینی فرمان و گسترش محاسباتی پرداخته می شود. PATH برای جستجوی نام فایل نتیجه استفاده نمی شود.

CDPATH

مسیر جستجو برای دستور cd . این لیستی از فهرست دایرهای کولون از دایرکتوری است که در آن پوسته به دنبال دایرکتوری های مقصد است که توسط دستور cd مشخص شده است. مقدار نمونه ".: ~: / usr" است.

ستون ها

با استفاده از فرمان builtin انتخاب شده برای تعیین عرض ترمینال هنگام چاپ لیست انتخاب. به صورت خودکار بر اساس دریافت SIGWINCH تنظیم می شود.

COMPREPY

یک متغیر آرایه که از آن basch می نویسد تکمیل های ممکن است توسط یک تابع پوسته ایجاد شده توسط تابع تکمیل برنامه ریزی شده (به برنامه ریزی تکمیل زیر مراجعه کنید) را بخوانید.

FCEDIT

ویرایشگر پیش فرض برای دستور fc builtin.

FIGNORE

لیستی از پسوندهای جدا شده روده بزرگ برای نادیده گرفتن هنگام تکمیل نام فایل ( READLINE را در زیر ببینید). نام پرونده ای که پیوند آن با یکی از ورودی های FIGNORE مطابقت دارد از فهرست نام های فایل همسان حذف شده است. مقدار نمونه ".o: ~" است.

GLOBIGNORE

لیستی از الگوهای جدا شده روده بزرگ که مجموعه ای از نام های فایل را با گسترش نامحدود نادیده می گیرد. اگر یک نام پرونده با یک الگوی گسترش نام پلاگین هم با یکی از الگوهای GLOBIGNORE مطابقت داشته باشد، از لیست بازی ها حذف می شود.

کنترل

اگر مقدار به مقدار فضای نادیده گرفته شود، خطوطی که با یک کاراکتر فضایی شروع می شوند، در فهرست تاریخ وارد نمی شوند. اگر برای مقدار ignoredup تنظیم شده باشد ، خطوط مطابق با آخرین خط تاریخ وارد نمی شوند. مقدار ignoreboth ترکیبی از دو گزینه است. اگر تنظیم نشده یا اگر مقدار دیگری از مقادیر بالا تنظیم شده باشد، تمام خطوطی که توسط تجزیه کننده خوانده می شوند در لیست تاریخ ذخیره می شوند و با ارزش HISTIGNORE ذخیره می شوند . این تابع متغیر توسط HISTIGNORE جایگزین شده است. خط دوم و بعدی چند دستور خط ترکیبی مورد آزمایش قرار نمی گیرند و بدون توجه به مقدار HISTCONTROL به تاریخ اضافه می شوند.

فستیوال

نام فایل که تاریخچه دستور ذخیره شده است (نگاه کنید به تاریخچه در زیر). مقدار پیش فرض ~ / .bash_history است . اگر تنظیم نشده باشد، وقتی یک پوسته تعاملی خارج می شود، فرمان ذخیره نمی شود.

HISTFILESIZE

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

HISTIGNORE

لیستی از الگوهای جدا شده روده بزرگ که مورد استفاده قرار می گیرند برای تعیین اینکه کدام خط فرمان باید در لیست تاریخ ذخیره شود. هر الگوی در ابتدای خط متوقف می شود و باید خط کامل (بدون ضمیمه * * ضمیمه شده) مطابقت داشته باشد. هر الگوی بر روی خط تست شده پس از چک کردن مشخص شده توسط HISTCONTROL اعمال می شود. علاوه بر الگوی تطبیق الگوی پوسته معمولی، ` & 'با خط سابقه قبلی مطابقت دارد. ` & 'ممکن است با استفاده از backslash فرار شود قبل از تلاش برای برچیدن، بریده بریده می شود. خط دوم و بعد از چند دستور خط ترکیبی مورد آزمایش قرار نمی گیرند و بدون توجه به ارزش HISTIGNORE به تاریخ اضافه می شوند.

تشخیص دهید

تعداد دستورات به یاد داشته باشید در تاریخچه فرمان (نگاه کنید به تاریخچه در زیر). مقدار پیش فرض 500 است.

خانه

دایرکتوری خانگی کاربر فعلی؛ آرگومان پیش فرض برای دستور cd builtin. ارزش این متغیر نیز در هنگام اجرای تیلد استفاده می شود.

HOSTFILE

حاوی نام یک فایل به همان فرمت به عنوان / etc / hosts است که باید زمانی خوانده شود که پوسته باید نام میزبان را تکمیل کند. لیستی از اجراهای نام میزبان ممکن ممکن است در حالی که پوسته اجرا می شود تغییر کند. بعد از اتمام مقدار نام میزبان بعد از انجام این کار تلاش می شود، bash محتویات فایل جدید را به لیست موجود اضافه می کند. اگر HOSTFILE تنظیم شده باشد، اما هیچ ارزش ندارد، bash تلاش می کند خواندن / etc / hosts را برای بدست آوردن لیستی از اجزای نام میزبان احتمالی. وقتی HOSTFILE غیرفعال است، لیست میزبان پاک شده است.

IFS

جداساز فیلد درونی که برای انشعاب کلمه پس از انبساط استفاده می شود و خطوط را به کلمات با دستور فرمان read integer تقسیم می کند. مقدار پیش فرض آن است `` ''.

IGNOREEF

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

INPUTRC

نام پرونده برای پرونده راهاندازی readline ، پیش فرض پرونده ~ / .inputrc ( READLINE زیر را ببینید).

LANG

مورد استفاده برای تعیین رده محلی برای هر دسته است که به طور خاص با یک متغیر با شروع از LC_ انتخاب نشده است .

LC_ALL

این متغیر ارزش LANG و هر متغیر دیگر LC_ را مشخص می کند که یک دسته محلی را تعیین می کند.

LC_COLLATE

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

LC_CTYPE

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

LC_MESSAGES

این متغیر تعیین کننده محلی است که برای ترجمه رشته های دوگانه ای پیش از یک $ استفاده می شود .

LC_NUMERIC

این متغیر تعیین کننده رده محلی مورد استفاده برای قالب بندی شماره است.

خطوط

برای تعیین طول ستون برای چاپ لیست انتخاب، با استفاده از دستور builtin انتخاب می شود. به صورت خودکار بر اساس دریافت SIGWINCH تنظیم می شود.

MAIL

اگر این پارامتر به نام فایل تنظیم شده باشد و متغیر MAILPATH تنظیم نشده است، bash به کاربر ورود ایمیل در فایل مشخص شده اطلاع می دهد.

MAILCHECK

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

نامه

لیستی از نام فایل های جدا شده روده بزرگ که برای ایمیل بررسی می شوند. پیامی که باید چاپ شود هنگام ارسال ایمیل در یک فایل خاص ممکن است با جدا کردن نام فایل از پیام با یک؟ مشخص شود. هنگامی که در متن پیام استفاده می شود، $ _ به نام فایل پستی فعلی گسترش می یابد. مثال:

MAILPATH = '/ var / mail / bfox؟' شما نامه ای دارید: "~ / shell-mail؟" $ _ mail! "'

Bash یک مقدار پیش فرض برای این متغیر را فراهم می کند، اما محل فایل های ایمیل کاربر که استفاده می کند وابسته به سیستم (به عنوان مثال، / var / mail / $ USER ) است.

OPTERR

اگر مقدار 1 را تنظیم کنید، bash نمایش پیام خطا تولید شده توسط دستور getopts builtin ( SHELL BUILTIN COMMANDS را ببینید). OPTERR هر بار که پوسته فراخوانی می شود یا یک اسکریپت پوسته اجرا می شود به مقدار 1 مقداردهی می شود.

مسیر

مسیر جستجو برای دستورات. این لیستی از فهرستهای جدا شده روده بزرگ از دایرکتوری ها است که در آن پوسته دستورات را می بیند (نگاه کنید به COMMAND EXECUTION در زیر). مسیر پیش فرض وابسته به سیستم است و توسط مدیر تنظیم شده که بش را نصب می کند. یک مقدار مشترک `` / usr / gnu / bin: / usr / local / bin: / usr / ucb: / bin: / usr / bin: ''.

POSIXLY_CORRECT

اگر این متغیر زمانی که bash شروع می شود در محیط باشد، پوسته قبل از خواندن فایل های راه اندازی به حالت posix وارد می شود، همانطور که گزینه invocation option- poslink قرار داده شده است. اگر بوت در حالی که پوسته اجرا می شود، bash حالت posix را فعال می کند ، همانطور که دستور command -o posix اعدام شده است.

PROMPT_COMMAND

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

PS1

ارزش این پارامتر گسترش یافته است (توجه کنید به زیر) و به عنوان رشته فوری اولیه استفاده می شود. مقدار پیش فرض آن `` \ s- \ v \ $ '' است.

PS2

مقدار این پارامتر به عنوان PS1 گسترش می یابد و به عنوان رشته فوری ثانویه استفاده می شود. پیش فرض `` > '' است.

PS3

مقدار این پارامتر به عنوان درخواست برای فرمان select استفاده می شود ( SHELL GRAMMAR را در بالا ببینید).

PS4

مقدار این پارامتر به عنوان با PS1 گسترش می یابد و مقدار قبل از نمایش هر فرمان نمایش داده می شود. اولین شخصیت بازی PS4 چندین بار تکرار می شود، به صورت ضروری، برای نشان دادن سطوح مختلف هدایت. پیش فرض `` + '' است.

TIMEFORMAT

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

٪٪

یک حرف واقعی ٪

٪ [ p ] [l] R

زمان سپری شده در ثانیه.

٪ [ p ] [l] U

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

٪ [ p ] [l] S

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

٪پ

درصد CPU، به عنوان (٪ U +٪ S) /٪ R محاسبه شده است.

اختیاری p یک رقم است که دقت را مشخص می کند، تعداد رقم های تقسیم شده بعد از یک نقطه اعشار. مقدار 0 باعث می شود که هیچ نقطه اعشار یا کسری برای خروجی نباشد. در بیشتر سه مکان پس از نقطه اعشار ممکن است مشخص شود مقادیر p بیش از 3 به 3 تغییر می کنند. اگر p مشخص نشده باشد، مقدار 3 استفاده می شود.

اختیاری L یک فرمت دیگر، از جمله دقیقه، فرم MM m SS را مشخص می کند . FF s مقدار p تعیین می کند که آیا کسری است یا نه.

اگر این متغیر تنظیم نشده باشد، bash عمل می کند مثل اینکه اگر آن مقدار $ '\ n واقعی \ t٪ 3lR \ nuser \ t٪ 3lU \ nsys٪ 3lS' داشته باشد. اگر مقدار null باشد، هیچ اطلاعات زمان بندی نمایش داده نمی شود. وقتی خط رشته فرمت نمایش داده می شود، خط جدیدی اضافه می شود.

TMOUT

اگر مقدار بیشتری از صفر تنظیم شود، TMOUT به عنوان زمانبندی پیش فرض برای builtin خوانده می شود . دستورالعمل انتخاب متوقف می شود اگر ورودی بعد از TMOUT نمی رسد پس از ورودی از یک ترمینال. در پوسته تعاملی، مقدار به عنوان تعداد ثانیه ها منتظر ورودی پس از صدور سریع اولیه تفسیر می شود. Bash بعد از انتظار برای آن تعداد ثانیه متوقف می شود اگر ورودی وارد نشود.

auto_resume

این متغیر کنترل چگونگی تعامل پوسته با کاربر و کنترل کار را دارد. اگر این متغیر تنظیم شود، دستورات تک کلمه ای بدون تغییر مسیر به عنوان نامزد برای بازگرداندن شغل متوقف موجود در نظر گرفته می شود. ابهام مجاز نیست اگر بیش از یک شغل از رشته تایپ شروع شده باشد، اخیرا دسترسی به کار انتخاب شده است. نام کار متوقف شده در این زمینه، خط فرمان است که برای شروع آن استفاده می شود. اگر مقدار دقیق تعیین شود ، رشته عرضه شده باید با نام دقیق کار متوقف شده مطابقت داشته باشد اگر به زیر رشته اختصاص داده شود ، رشته عرضه شده نیاز به مطابقت با زیر رشته نام یک کار متوقف شده دارد. مقدار substring عملکرد مشابه با ٪ را فراهم می کند شناسه شغل (نگاه کنید به JOB CONTROL در زیر). اگر برای هر مقدار دیگری تنظیم شود، رشته عرضه شده باید پیشوند یک نام کار متوقف شود؛ این عملکرد عملکرد مشابه با ٪ شناسه شغلی را فراهم می کند.

هیستیکارها

دو یا سه شخصیت که کنترل گسترش تاریخ و نشانه گذاری را دارند (نگاه کنید به توسعه تاریخچه در زیر). شخصیت اول شخصیت گسترش تاریخ است، شخصیتی که شروع به گسترش تاریخ می کند، به طور معمول ` ! ' کاراکتر دوم کاراکتر جایگزین سریع است، که به عنوان اصطلاح برای اجرای مجدد دستور قبلی وارد شده است، جایگزین یک رشته برای دیگری در فرمان. پیش فرض ^ ^ است. شخصیت سوم اختیاری شخصیت است که نشان می دهد که باقی مانده از خط یک نظر است وقتی که به عنوان اولین حرف یک کلمه یافت می شود، به طور معمول " # ". شخصیت شخصیت داستان باعث می شود جایگزینی تاریخ برای کلمات باقیمانده در خط حذف شود. این لزوما باعث نمی شود که پارسنس پوسته برای رفع بقیه خط ها به عنوان یک نظر باشد.

آرایه ها

Bash یک متغیر آرایه یک بعدی را فراهم می کند. هر متغیر ممکن است به عنوان یک آرایه استفاده شود builtin اعلام خواهد صراحت آرایه را اعلام کند. حداکثر محدودیت در اندازه یک آرایه وجود ندارد، و هیچ الزاماتی وجود ندارد که اعضا بتوانند مستقیما نمایان شوند یا به صورت مجزا تعیین شوند. آرایه ها با استفاده از عدد صحیح نشان داده می شوند و مبتنی بر صفر هستند.

یک آرایه به صورت خودکار ایجاد می شود اگر هر متغیر برای استفاده از عنوان syntax [ index ] = value اختصاص داده شود . زیرمجموعه به عنوان یک عبارت حسابی محاسبه می شود که باید به یک عدد بزرگتر یا برابر صفر ارزیابی شود. برای آشکارسازی یک آرایه، از declare -a نام استفاده کنید ( SHELL BUILTIN COMMANDS زیر را ببینید). اعلام کنید - نام [ زیرنویس ] نیز پذیرفته شده است زیرنویس نادیده گرفته می شود خصیصه ها می توانند برای یک متغیر آرایه با استفاده از declare و builtins readonly مشخص شوند. هر ویژگی برای اعضای یک آرایه اعمال می شود.

آرایه ها برای استفاده از تکمیل ترکیب فرم نام = ( ارزش 1 ... مقدار n ) اختصاص داده می شوند ، جایی که هر مقدار از فرم [ index ] = string است . فقط رشته مورد نیاز است اگر براکت ها و زیرمجموعه های اختیاری عرضه شوند، این شاخص به آن اختصاص داده می شود؛ در غیر این صورت شاخص عنصر تعیین شده آخرین شاخص اختصاص داده شده توسط این بیانیه به علاوه یک است. نمایه سازی صفر شروع می شود. این دستورالعمل نیز توسط اعلام ساختار پذیرفته شده است. عناصر آرایه فردی ممکن است به استفاده از نام [ زیرنویس ] = نحو معرفی شده در بالا اختصاص داده شود.

ساخته نشده برای استفاده از آرایه ها استفاده می شود. نام Unset [ زیرنویس ] عنصر آرایه را در زیر فهرست Index از بین می برد. نام Unset ، که نام آن یک آرایه است یا نام نامعتبر [ زیرنویس ]، که در آن زیرسایت * یا @ است ، کل آرایه را حذف می کند.

اعلام کنید ، محلی ، و فقط builtins readon ها هر یک از گزینه -a را برای مشخص کردن یک آرایه می پذیرند. builtin خواندن یک گزینه -a را برای اختصاص یک لیست از کلمات خوانده شده از ورودی استاندارد به یک آرایه را پذیرفته است. تنظیم و اعلام می کند builtins مقدار آرایه نمایش داده شده به طوری که اجازه می دهد تا آنها را به عنوان مجوز استفاده مجدد.

بازپرداخت

Expansion در خط فرمان پس از تقسیم به کلمات انجام می شود. هفت نوع گسترش انجام شده وجود دارد: گسترش بسط ، گسترش تیلده ، گسترش پارامتر و متغیر ، جایگزینی فرمان ، گسترش محاسباتی ، تقسیم کلمه و گسترش پهنای باند .

منظور از گسترش عبارت است از: گسترش بسط، گسترش تیلده، پارامتر، متغیر و محاسبات گسترش و جایگزینی فرمان (انجام می شود به صورت چپ به راست)، تقسیم کلمه و گسترش پهنمون.

در سیستم هایی که می توانند از آن پشتیبانی کنند، یک توسعه اضافی در دسترس وجود دارد: جایگزینی فرآیند .

گسترش Brace

Extension Brace یک مکانیسم است که می تواند رشته های دلخواه ایجاد شود. این مکانیزم شبیه extension pathname است ، اما نام فایل ها نیاز به وجود ندارد. الگوهایی که باید گسترش یافته باشند، به صورت یک پیشوند اختیاری قرار می گیرند، و پس از آن مجموعه ای از رشته ها جدا شده از کام جدا می شوند که بین یک جفت braces قرار دارند، و پس از آن یک پیکر بندی اختیاری است. پیشوند پیش از هر رشته ای که در داخل braces وجود دارد، پیش می آید، و پس از آن به هر رشته حاصل اضافه می شود و از سمت چپ به راست گسترش می یابد.

گسترش های Brace ممکن است تداخل داشته باشد. نتایج هر رشته گسترش یافته مرتب نمی شوند؛ سمت چپ به سمت راست حفظ شده است. به عنوان مثال، یک { d، c، b } e به adde ace abe گسترش می یابد.

گسترش Brace قبل از هر گونه گسترش دیگر انجام می شود، و هر کاراکتر خاصی برای دیگر توسعه ها در نتیجه حفظ می شود. این کاملا متنی است. Bash هر گونه تفسیر نحو را به متن گسترش و یا متن بین braces اعمال نمی کند.

این ساختار معمولا به صورت اختصار به کار میرود، زمانی که پیشوند مشترک رشتههای تولید شده طولانیتر از مثال بالا است:

mkdir / usr / local / src / bash / {old، new، dist، bugs}

یا

ریشه chown /usr/{ucb/{ex،edit}،lib/{ex؟.؟*،how_ex}}

گسترش Brace یک ناسازگاری جزئی با نسخه های تاریخی sh را نشان می دهد . ش به ویژه هنگامی که به عنوان بخشی از یک کلمه ظاهر می شوند، بافت باز یا بسته را درمان نمی کند و آنها را در خروجی حفظ می کند. Bash بریده بریده از کلمات را به عنوان یک نتیجه از گسترش brace. به عنوان مثال، یک کلمه وارد شده به عنوان به عنوان فایل {1،2} به نظر می رسد یکسان در خروجی. همان کلمه پس از گسترش توسط bash خروجی به عنوان file1 file2 است . اگر سازگاری سخت با SH مورد نظر باشد، با استفاده از گزینه B + Bash را فشار دهید یا گزینه B را به فرمان set غیرفعال کنید (برای مشاهده SHELL BUILTIN COMMANDS زیر را ببینید).

گسترش تیلد

اگر یک کلمه با یک کاراکتر tilde ( ~ ~ ) آغاز می شود، تمام شخصیت های قبل از اولین علامت نقل قول نشده (یا تمام کاراکتر ها، اگر هیچ علامت نقل قول وجود نداشته باشند) یک پیشوند tilde هستند . اگر هیچ کدام از کاراکترهای پیشوند tilde نباشد، کاراکترهای پیشوند tilde که به دنبال tilde هستند، به عنوان نام کاربری امکان پذیر است. اگر این نام کاربری نام رشته صفر است، tilde با مقدار پارامتر پوسته HOME جایگزین می شود. اگر HOME تنظیم نشده باشد، جایگزینی پوشه خانگی کاربر اجرا کننده پوسته جایگزین می شود. در غیر این صورت، پیشوند tilde با پوشه خانه مرتبط با نام کاربری مشخص شده جایگزین شده است.

اگر پیشوند tilde ~ ~ + باشد، مقدار متغیر پوسته PWD جایگزین پیشوند tilde می شود. اگر prefix tilde یک ~~ است، مقدار متغیر پوسته OLDPWD ، اگر آن را تنظیم شده است، جایگزین شده است. اگر کاراکترهای زیر tilde در پیشوند tilde شامل یک عدد N باشند ، به صورت اختیاری با یک علامت + یا a - -، prefix tilde با عنصر متناظر از ستون جایگزین جایگزین می شود، همانطور که نمایش داده می شود توسط dirs ساخته شده با پیشوند tilde به عنوان یک استدلال. اگر کاراکترهای زیر tilde در prefix tilde از یک عدد بدون پیشوند `+ 'یا` -'، '+' فرض شود.

اگر نام کاربری نامعتبر است یا گسترش تیلده شکست خورده است، کلمه بدون تغییر است.

هر تخصیص متغیر برای پیشوندهای tilde بدون نقل قول بلافاصله پس از : یا = بررسی می شود . در این موارد، گسترش تیلده نیز انجام می شود. در نتیجه، ممکن است از نام فایل با tildes در انتساب به PATH ، MAILPATH ، و CDPATH استفاده شود و پوسته مقدار گسترش یافته را تعیین می کند.

توسعه پارامتر

شخصیت ` $ '، گسترش پارامتر، جایگزینی فرمان یا گسترش محاسباتی را معرفی می کند. نام یا نماد پارامتر که ممکن است گسترش یابد ممکن است در braces تعبیه شود که اختیاری است اما برای محافظت از متغیری که از کاراکترهای بلافاصله پس از آن گسترش می یابد و می تواند به عنوان بخشی از نام تفسیر شود محافظت می شود.

وقتی braces مورد استفاده قرار می گیرند، ترتیب متناوب پایان اولین ` } 'است که توسط یک بک اسلش یا در یک رشته نقل قول فرار نمیکند، و نه در یک محاسبات جاسازی شده، جایگزینی فرمان، و یا گسترش paramter.

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

در هر کدام از موارد زیر، کلمه تابع گسترش تیلد، گسترش پارامترها، جایگزینی فرمان و گسترش محاسباتی است. هنگامی که گسترش substring را انجام ندهید، آزمایش bash را برای یک پارامتر که unset یا null است انجام دهید. حذف کولون نتایج یک تست فقط برای یک پارامتر که تنظیم نشده است.

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

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

خطای Display اگر Null یا Unset باشد. اگر پارامتر صفر یا صفر باشد، گسترش کلمه (یا پیامی به آن اثر اگر کلمه وجود نداشته باشد) به خطای استاندارد نوشته شده است و پوسته، اگر تعاملی نیست، خروج کند. در غیر این صورت، مقدار پارامتر جایگزین می شود.

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

به نام متغیرهایی که نام آنها با پیشوند شروع می شود، گسترش می یابد، که توسط اولین کاراکتر متغیر خاص IFS جدا شده است.

طول در کاراکترهای مقدار پارامتر جایگزین می شود. اگر پارامتر * یا @ باشد ، مقدار جایگزین تعداد پارامترهای موقعیتی است. اگر پارامتر یک نام آرایه است که توسط * یا @ ثبت شده است ، مقدار جایگزین تعداد عناصر در آرایه است.

این کلمه برای ساخت یک الگوریتم به همان اندازه گسترش یافته است. اگر الگوی با شروع مقدار پارامتر منطبق باشد ، پس نتیجه انبساط، مقدار گسترش یافته پارامتر با کوتاهترین الگوی تطبیق (پرونده `` # '') یا طولانی ترین الگوی تطبیقی ​​(`` ## ' 'مورد) حذف شده است. اگر پارامتر @ یا * باشد ، عملیات حذف الگوی بر روی هر پارامتر موقعیتی به نوبه خود اعمال می شود و گسترش آن لیست نتیجه است. اگر پارامتر یک متغیر آرایه است که با @ یا * مشخص شده است ، عملیات حذف الگوی بر روی هر عضو آرایه به نوبه خود اعمال می شود، و گسترش این فهرست است.

این کلمه برای ساخت یک الگوریتم به همان اندازه گسترش یافته است. اگر الگوریتم یک قسمت معکوس از مقدار گسترش یافته پارامتر است ، پس نتیجه انبساط، مقدار گسترش یافته پارامتر با کوتاهترین الگوی تطبیق (پرونده ` ٪ '') یا طولانی ترین الگوی تطبیق (`٪٪ ٪ '' مورد) حذف شده است. اگر پارامتر @ یا * باشد ، عملیات حذف الگوی بر روی هر پارامتر موقعیتی به نوبه خود اعمال می شود و گسترش آن لیست نتیجه است. اگر پارامتر یک متغیر آرایه است که با @ یا * مشخص شده است ، عملیات حذف الگوی بر روی هر عضو آرایه به نوبه خود اعمال می شود، و گسترش این فهرست است.

الگوی برای تولید یک الگوریتم به همان اندازه گسترش یافته است. پارامتر گسترش یافته است و طولانیترین الگوی برابر مقادیر آن با رشته جایگزین میشود . در فرم اول، فقط اولین بازی جایگزین می شود. شکل دوم باعث می شود که تمام مسابقات الگوی با رشته جایگزین شود. اگر الگوی با # آغاز می شود، آن باید در ابتدای مقدار گسترش یافته پارامتر مطابقت داشته باشد . اگر الگو با ٪ شروع شود، باید در انتهای مقدار expanded از پارامتر مطابقت داشته باشد . اگر رشته null باشد، رشته های الگو حذف می شود و الگوی زیر ممکن است حذف شود. اگر پارامتر است @ یا * ، عملیات جایگزینی به هر پارامتر موقعیتی به نوبه خود اعمال می شود و گسترش آن لیست نتیجه است. اگر پارامتر یک متغیر آرایه است که با @ یا * ثبت شده است ، عملیات جایگزینی به نوبه خود به هر عضو آرایه اعمال می شود و گسترش آن لیست نتیجه است.

جایگزینی فرماندهی

جایگزینی فرمان به خروجی یک فرمان اجازه می دهد که نام فرمانی را جایگزین کند. دو شکل وجود دارد:

$ ( فرمان )

یا

` فرمان`

Bash اجرای را با اجرای دستور اجرا می کند و جایگزین فرمان را با خروجی استاندارد فرمان، با هر خط جدید خطی حذف می کند. خطوط جدید جاسازی شده حذف نمی شوند، اما ممکن است در زمان تقسیم کلمه حذف شوند. فرمان جایگزینی $ ( فایل گربه ) را می توان با معادل اما سریعتر $ (< file ) جایگزین کرد.

هنگام استفاده از فرم جایگزین با استفاده از old-style backquote، بکسلش معنای واقعی آن را حفظ می کند به استثنای زمانی که به دنبال $ ، ` ، یا \ است . اولین تکرار قبل از یک backslash، فرمان جایگزین را متوقف می کند. هنگام استفاده از فرم $ ( command )، تمام کاراکترهای بین پرانتز دستور را تشکیل می دهند؛ هیچ کدام به طور خاص درمان نمی شوند.

جایگزینی فرمان ممکن است توشه باشد. در هنگام استفاده از فرم backquoted برای لانه سازی، از backquotes درونی با backslashes فرار کنید.

اگر جایگزینی در داخل نقل قول های دوتایی ظاهر شود، تقسیم کلمه و گسترش پلاگین در نتایج انجام نمی شود.

ریاضیات انبساط

توسعه محاسباتی اجازه می دهد تا ارزیابی عبارت محاسباتی و جایگزینی نتیجه را به دست آوریم. فرمت برای گسترش محاسباتی:

$ (( بیان ))

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

ارزیابی با توجه به قوانین زیر در زیر ارزیابی ARITHMETIC انجام می شود . اگر بیان نادرست باشد، bash یک پیام را نشان می دهد که نشان دهنده شکست است و هیچ جایگزینی رخ نمی دهد.

جایگزینی فرآیند

جایگزینی فرآیند در سیستم هایی پشتیبانی می شود که از لوله های نامیده شده ( FIFOs ) یا روش / dev / fd نامگذاری پرونده های باز پشتیبانی می کنند. این فرم <( list ) یا > ( لیست ) را می گیرد . لیست پروسه با ورودی یا خروجی آن به یک FIFO یا یک فایل در / dev / fd متصل می شود . نام این فایل به عنوان یک استدلال به دستور فعلی به عنوان نتیجه انبساط منتقل می شود. اگر فرم > ( لیست ) مورد استفاده قرار گیرد، نوشتن به فایل ورودی برای لیست را فراهم می کند. اگر فرم <( list ) مورد استفاده قرار گیرد، فایل به عنوان یک argument باید منتقل شود تا بتوان خروجی لیست را بدست آورد.

هنگامی که در دسترس است، فرایند جایگزینی به طور همزمان با گسترش پارامتر و متغیر، جایگزینی فرمان و گسترش محاسباتی انجام می شود.

تقسیم کلمه

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

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

آرگومانهای خالی آشکار ( "" یا "' ) حفظ می شوند. استدلال های ناپیوسته ضمنی نقل قول ناشی از گسترش پارامترهایی که دارای مقادیر نیستند حذف می شوند. اگر یک پارامتر بدون مقدار در داخل نقل قول های دوگانه گسترش یابد، یک استدلال صفر نتیجه می شود و حفظ می شود.

توجه داشته باشید که اگر گسترش نداشته باشد، هیچ تقسیم انجام نمی شود.

گسترش پهنمام

پس از تقسیم کلمه، مگر اینکه گزینه -f تنظیم شده باشد، bash اسکن هر کلمه برای کاراکتر * ،؟ ، و [ . اگر یکی از این کاراکترها ظاهر شود، این کلمه به عنوان الگوی در نظر گرفته می شود و با لیست مرتب شده بر اساس حروف الفبا از نام فایل ها مطابقت دارد. اگر نامهای تطبیقی ​​یافت نشد و گزینه nullglob پوسته غیرفعال است، کلمه بدون تغییر باقی می ماند. اگر گزینه nullglob تنظیم شده باشد و هیچ هماهنگی پیدا نشود، کلمه حذف می شود. اگر گزینه nocaseglob گزینه پوسته فعال باشد، مسابقه بدون در نظر گرفتن حروف الفبا انجام می شود. هنگامی که یک الگوی برای گسترش نام کاربری استفاده می شود، کاراکتر ``. '' در ابتدای یک نام یا بلافاصله پس از اسلش با صراحت باید هماهنگ باشد، مگر اینکه گزینه dotglob گزینه پوسته تنظیم شود. هنگام تطبیق یک نام کاربری، شخصیت اسلش همیشه باید به صراحت مطابقت داشته باشد. در موارد دیگر، شخصیت ``. '' به طور خاص رفتار نمی شود. شرح توصیف shopt زیر زیر SHELL BUILTIN COMMANDS برای توصیف گزینه nocaseglob ، nullglob و dotglob را ببینید.

متغیر پوسته GLOBIGNORE ممکن است برای محدود کردن مجموعه ای از نام فایل ها با یک الگوریتم استفاده شود . اگر GLOBIGNORE تنظیم شده باشد، هر نام فایل تطبیق که با یکی از الگوهای GLOBIGNORE نیز منطبق است، از فهرست مسابقات حذف می شود. نام فایل ``. '' و `` .. '' همیشه نادیده گرفته می شوند، حتی زمانی که GLOBIGNORE تنظیم شده است. با این حال، تنظیم GLOBIGNORE تأثیری را بر روی گزینه پوسته dotglob فراهم می کند، بنابراین تمام نامهای دیگر که با '`.' 'شروع می شوند مطابقت دارند. برای به دست آوردن رفتار قدیمی نادیده گرفتن نام فایل با آغاز یک ``. '' ، یک ``. *. '' یکی از الگوهای GLOBIGNORE را ایجاد کنید . گزینه GLOBIGNORE غیرفعال است.

تطبیق الگو

هر کاراکتری که در یک الگو ظاهر می شود، غیر از شخصیت های الگوی خاصی که در زیر توضیح داده شده، خود را مطابقت می دهد. شخصیت NUL ممکن است در یک الگوی ایجاد نشود. شخصیت های الگوی خاص باید در صورت لزوم به معنای واقعی کلمه باشند.

شخصیت های الگوی خاص دارای معانی زیر هستند:

*

هر رشته را شامل می شود، از جمله رشته صفر.

؟

هر شخصیت را با هم مقایسه می کند.

[...]

هر یک از شخصیت های محصور را مطابقت می دهد. یک جفت کاراکتر به وسیله ی یک نقطهنظری، نشان دهنده ی محدوده ای است ؛ هر شخصیتی که بین آن دو کاراکتر، شامل همه، با استفاده از توالی مرتب سازی فعلی و مجموعه کاراکتر فعلی، مطابقت دارد. اگر شخصیت اول پس از [ یک ! یا ^ ^ سپس هر کاراکتری که محصور شده است هماهنگ است. مرتبه مرتب سازی از کاراکتر ها در عبارات محدوده تعیین شده توسط محلی فعلی و مقدار متغیر پوسته LC_COLLATE تعیین می شود. A - ممکن است با افزودن آن به عنوان اولین یا آخرین شخصیت در مجموعه همسان باشد. A ] ممکن است با ترکیب آن به عنوان اولین کاراکتر در مجموعه همسان باشد.

در داخل [ و ] کلاس های کاراکتر را می توان با استفاده از دستور syntax [: class :] مشخص کرد ، که در آن کلاس یکی از کلاس های زیر است که در استاندارد POSIX.2 تعریف شده است:

alnum alpha ascii خالی cntrl رقمی رقم پایین چاپ punct فضای بالا کلمه xdigit
یک کلاس شخصیت با هر شخصیت متعلق به آن کلاس مطابقت دارد. کلاس کاراکتر کلمه با حروف، رقم ها و کاراکتر _ حرف می زند.

در داخل [ و ] یک کلاس هم ارز را می توان با استفاده از دستور [= c =] مشخص کرد که تمام کاراکتر ها با همان وزن دسته بندی (همانطور که توسط محلی فعلی تعریف شده) مطابقت دارد به عنوان شخصیت c .

در [ و ] ، نحو [. نماد .] مطابق نماد نماد تقسیم می شود .

اگر گزینه پوسته extglob با استفاده از shopt builtin فعال شود، چند اپراتور تطبیق الگوی گسترده تشخیص داده می شود. در شرح زیر یک لیست الگو یک لیست از یک یا چند الگو است که توسط یک | . الگوهای کامپوزیتی ممکن است با استفاده از یک یا چند زیر الگوهای زیر تشکیل شوند:

( الگوی لیست )

مساوی صفر یا یک رخداد الگوهای داده شده

* ( الگوی لیست )

صفر یا بیشتر از الگوهای داده شده مطابقت دارد

+ ( لیست الگو )

یک یا چند رویداد از الگوهای داده شده را مطابقت می دهد

@ ( الگو-لیست )

دقیقا یکی از الگوهای داده شده را دنبال می کند

! ( الگوی لیست )

هر چیزی را به جز یکی از الگوهای داده شده مطابقت می دهد

نقل قول حذف

پس از گسترش های قبلی، همه رخدادهای غیرقابل تحریف از کاراکتر \ ، ' ، و " که از یکی از گسترش های بالا حاصل نشد، حذف می شوند.

ردیاب

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

در شرح زیر، اگر شماره توصیفگر فایل حذف شده باشد و اولین کاراکتر اپراتور تغییر مسیر، < redirection به ورودی استاندارد (توصیفگر فایل 0) اشاره دارد. اگر اولین کاراکتر اپراتور تغییر مسیر > است ، تغییر مسیر به خروجی استاندارد اشاره دارد (توصیفگر فایل 1).

کلمه ای که پس از عملگر تغییر مسیر در شرح زیر وجود دارد، مگر اینکه خلاف ذکر شده باشد، به گسترش گسترش، گسترش تیلده، گسترش پارامترها، جایگزینی فرمان، گسترش محاسباتی، حذف نقل قول، گسترش پهنمون و تقسیم کلمه تحت تعقیب قرار می گیرد. اگر آن را به بیش از یک کلمه گسترش می دهد، bash یک خطا را گزارش می دهد.

توجه داشته باشید که منظور تغییر مسیرها قابل توجه است. به عنوان مثال، دستور

ls > dirlist 2 > & 1

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

ls 2 > و 1 > dirlist

تنها خروجی استاندارد را برای فایل dirlist هدایت می کند، زیرا خطای استاندارد به عنوان خروجی استاندارد قبل از خروجی استاندارد به dirlist هدایت شد.

Bash چندین نام فایل را به خصوص زمانی که در رجیسترها استفاده می شود، به عنوان مثال در جدول زیر توضیح می دهد:

/ dev / fd / fd

اگر fd یک عدد صحیح معتبر باشد، توصیفگر فایل fd تکرار می شود.

/ dev / stdin

توصیفگر فایل 0 تکرار می شود.

/ dev / stdout

توصیفگر فایل 1 تکرار می شود.

/ dev / stderr

توصیفگر فایل 2 تکرار می شود.

/ dev / tcp / host / port

اگر میزبان یک نام میزبان معتبر یا آدرس اینترنتی است و پورت یک شماره پورت صحیح یا نام سرویس است، بش تلاش می کند تا اتصال TCP را به سوکت مربوطه باز کند.

/ dev / udp / host / port

اگر میزبان یک نام میزبان معتبر یا آدرس اینترنتی است و پورت یک شماره پورت صحیح یا نام سرویس است، بش تلاش می کند تا یک اتصال UDP را به سوکت مربوطه باز کند.

شکست در باز کردن یا ایجاد یک پرونده باعث می شود که تغییر مسیر به شکست انجام شود.

تغییر مسیر ورودی

تغییر مسیر ورودی باعث می شود که پرونده ای که از گسترش کلمه برای نتایج خواندن در فایل descriptor n یا ورودی استاندارد (descriptor file 0) باز شود، اگر n مشخص نشده باشد.

فرمت عمومی برای هدایت ورودی است:

[ n ] < کلمه

هدایت خروجی

تغییر مسیر خروجی باعث می شود که پرونده ای که از گسترش کلمه به دست می آید برای نوشتن بر روی توصیفگر فایل n ، یا خروجی استاندارد (توصیفگر فایل 1)، اگر n مشخص نشده باشد، باز می شود. اگر فایل وجود ندارد آن ایجاد می شود اگر آن وجود داشته باشد، آن را به صفر برساند.

فرمت عمومی برای هدایت خروجی:

[ n ] > کلمه

اگر اپراتور redirection است > و گزینه noclobber به builtin تنظیم شده فعال شده است، تغییر مسیر اگر فایل که نام آن از گسترش کلمه موجود است و یک فایل منظم است، شکست خواهد خورد. اگر عملگر redirection است > | ، و یا اپراتور تغییر مسیر است و گزینه noclobber به دستور builtin مجموعه فعال نیست، تغییر مسیر حتی اگر فایل با نام کلمه وجود داشته باشد، تلاش می شود.

اضافه کردن خروجی هدایت شده

تغییر مسیر خروجی به این ترتیب موجب می شود که پرونده ای که از گسترش کلمه به دست می آید برای افزودن به توصیفگر فایل n یا خروجی استاندارد (توصیفگر فایل 1) باز شود، اگر n مشخص نشده باشد. اگر فایل وجود ندارد، آن ایجاد شده است.

فرمت عمومی برای افزودن خروجی:

[ n ] >> کلمه

هدایت خروجی استاندارد و خطای استاندارد

Bash اجازه می دهد تا هر دو خروجی استاندارد (توصیفگر فایل 1) و خروجی استاندارد خطا (توصیفگر فایل 2) را به فایل که نام گسترش کلمه با این ساز است هدایت می کند.

دو فرمت برای هدایت خروجی استاندارد و خطای استاندارد وجود دارد:

& کلمه

و

> و کلمه

از دو فرم، اول ترجیح داده می شود. این معنای معادل آن است

> کلمه 2 > و 1

در اینجا اسناد

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

فرمت این اسناد عبارتند از:

<< [ - ] کلمه در اینجا - جداساز سند

بدون گسترش پارامتر، جایگزینی فرمان، گسترش محاسباتی یا گسترش پهنای نام بر روی کلمه انجام نمی شود. اگر هر علامت از کلمه نقل شده است، تعریف کننده نتیجه نتیجه حذف نقل قول در کلمه است ، و خطوط در اینجا سند گسترش نمی یابد. اگر کلمه بدون نقل قول باشد، تمام خطوط این سند به پارامتر گسترش، جایگزینی فرمان و گسترش محاسباتی مربوط می شوند. در مورد دوم، دنباله کاراکتر \ نادیده گرفته می شود، و \ باید برای نقل قول از کاراکترها \ ، $ ، و `استفاده شود .

اگر عملگر redirection << - باشد ، تمام خطوط ورودی پیشرو از خطوط ورودی و خط حاوی علامت جدا می شوند . این اجازه می دهد تا در اسناد پوسته در اسناد پوسته، اسناد پوسته ها را به صورت طبیعی بچرخانند.

در اینجا رشته ها

یک نوع اسناد در اینجا، این فرمت است:

<<< کلمه

این کلمه گسترش یافته است و به فرمان ورودی استاندارد آن داده می شود.

تکرار توصیفگرهای فایل

اپراتور تغییر مسیر

[ n ] <& کلمه

برای تکرار توصیفگرهای فایل ورودی مورد استفاده قرار می گیرد. اگر کلمه به یک یا چند رقم گسترش یابد، توصیفگر فایل با نشان n مشخص می شود که یک کپی از آن توصیفگر فایل است. اگر رقم در کلمه یک توصیفگر فایل را برای ورودی باز نمی کند، یک خطای تغییر مسیر رخ می دهد. اگر کلمه را به - ، توصیفگر فایل n بسته شود. اگر n مشخص نشده باشد، ورودی استاندارد (توصیف کننده فایل 0) استفاده می شود.

اپراتور

[ n ] > و کلمه

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

در حال حرکت توصیفگرهای فایل

اپراتور تغییر مسیر

[ n ] <& رقم -

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

به طور مشابه، اپراتور تغییر مسیر

[ n ] > و رقم -

قطعه توصیفگر فایل را به فایل توصیف n حرکت می دهد یا خروجی استاندارد (توصیفگر فایل 1) اگر n مشخص نشده باشد.

بازکردن توصیفگرهای فایل برای خواندن و نوشتن

اپراتور تغییر مسیر

[ n ] <> کلمه

باعث می شود فایل که نام آن گسترش کلمه برای هر دو خواندن و نوشتن در توصیفگر فایل n ، و یا در توصیفگر فایل 0، اگر n مشخص نشده است. اگر فایل وجود ندارد، آن ایجاد شده است.

آلزایمر

نام مستعار اجازه می دهد یک رشته برای یک کلمه جایگزین شود زیرا آن را به عنوان اولین کلمه یک فرمان ساده استفاده می شود. پوسته لیستی از نام های مستعار را که ممکن است با دستورات مستعار و unalias builtin تنظیم شده و تنظیم شود ( لیست کمربندهای SHELL BUILTIN را ببینید). اولین کلمه هر دستور، اگر نقل قول نشده باشد، بررسی می شود تا ببیند آیا نام مستعار دارد یا نه. اگر چنین است، آن کلمه با متن نام مستعار جایگزین می شود. نام مستعار و متن جایگزین ممکن است شامل هر ورودی پوسته معتبر باشد، از جمله متارشی که در بالا ذکر شده است، با استثنا که نام مستعار ممکن است حاوی = باشد. اولین کلمه متن جایگزینی برای نام مستعار تست شده است، اما یک کلمه که با یک نام مستعار گسترش یافته است یک بار دیگر گسترش نمی یابد. این بدان معنی است که به عنوان مثال ممکن است کسی به نام ls -F نامگذاری شود و bash سعی نکنید دوباره متن جایگزین را گسترش دهد. اگر آخرین نویسه از مقدار نام مستعار خالی باشد ، پس کلمه دستور بعدی زیر نام مستعار نیز برای گسترش نام مستعار بررسی می شود.

نام مستعار ایجاد شده و با نام مستعار فهرست شده و با دستور unalias حذف می شود .

هیچ مکانیزمی برای استفاده از استدلال در متن جایگزین وجود ندارد. اگر استدلال مورد نیاز باشد، باید یک تابع پوسته استفاده شود ( FUNCTIONS را در زیر ببینید).

مستعارها وقتی که پوسته تعاملی نیست، گسترش پیدا نمی کند، مگر اینکه گزینه پوسته expand_aliases با استفاده از shopt تنظیم شود (توضیحات shopt تحت SHELL BUILTIN COMMANDS زیر را ببینید).

قوانین مربوط به تعریف و استفاده از نام مستعار به نوعی گیج کننده است. Bash همیشه حداقل یک خط کامل از ورودی را قبل از اجرای هر کدام از دستورات در آن خط می نویسد. مستعارها وقتی که فرمان خوانده می شود، گسترش می یابد، نه زمانی که آن را اجرا می کند. بنابراین، تعریف نام مستعار که در خط همان خط فرمان دیگری قرار می گیرد تا زمانی که خط بعدی ورودی خوانده نشود اثر نمی کند. دستورات زیر تعریف نام مستعار در آن خط توسط نام مستعار جدید تحت تاثیر قرار نمی گیرند. این رفتار نیز هنگامی اتفاق می افتد که توابع اعدام شوند. نام مستعار هنگامی که یک تعریف تابع خوانده می شود، گسترش نمی یابد، نه زمانی که تابع اجرا می شود، زیرا یک تعریف تابع خود یک دستور ترکیب است. به عنوان یک نتیجه، نام مستعار در یک تابع تعریف می شود تا بعد از آن تابع اجرا نشود. برای امنیت، همیشه تعاریف مستعار را در یک خط جداگانه قرار دهید و از نام مستعار در دستورات ترکیبی استفاده نکنید.

برای تقریبا هر هدف، مستعارها توسط توابع پوسته جایگزین می شوند.

توابع

یک تابع پوسته، تعریف شده به عنوان شرح داده شده در بالا در SHELL GRAMMAR ، مجموعه ای از دستورات را برای اجرای بعدی ذخیره می کند. وقتی نام یک تابع پوسته به عنوان یک نام ساده فرمان استفاده می شود، لیست دستورات مرتبط با نام تابع اجرا می شود. توابع در چارچوب پوسته فعلی اجرا می شوند. هیچ فرایندی جدید برای تفسیر آنها ایجاد نشده است (با این تفاوت که با اجرای یک اسکریپت پوسته). وقتی یک تابع اجرا می شود، استدلال های تابع در طول اجرای آن پارامترهای موقعیتی می شوند. پارامتر # به روز شده است تا منعکس کننده تغییر باشد. پارامتر موقعیت 0 بدون تغییر است. متغیر FUNCNAME به نام عملکرد در حالی که تابع اجرا می شود. تمام جنبه های دیگر محیط اجرای پوسته بین یک تابع و caller آن با یک استثنا که تله DEBUG (توضیحات تله ای که در زیر COMMANDS SHELL BUILTIN زیر وجود دارد) را ببینید، به ارث برده نمی شود مگر آنکه تابع به صفات ردی ( شرح توصیف builtin را در زیر ببینید).

متغیرهای محلی برای تابع ممکن است با فرمان builtin محلی اعلام شوند. به طور معمول، متغیرها و مقادیر آنها بین تابع و تماس گیرنده آن به اشتراک گذاشته می شود.

اگر بازگشت دستور دستور builtin در یک تابع اجرا شود، تابع کامل می شود و اجرای بعد از فراخوانی تابع به دستور بعدی ادامه می یابد. وقتی یک تابع کامل می شود، مقادیر پارامترهای موقعیتی و پارامتر خاص # به مقادیری که قبل از اجرای تابع به دست می آیند، بازسازی می شوند.

نام و تعاریف تابع ممکن است با گزینه -f به دستورات یا دستورات builtin تایپ شده تایپ شود. گزینه -F برای اعلام یا تایپ فقط نام تابع را فهرست می کند. توابع ممکن است صادر شوند به طوری که subshells آنها را به طور خودکار با گزینه -f به builtin صادرات تعریف می کند .

توابع ممکن است بازگشتی باشند هیچ محدودیتی برای تعداد تماسهای برگشت پذیر وجود ندارد.

ارزیابی ارزیابی

پوسته اجازه می دهد که محاسبات ریاضی را تحت شرایط خاصی ارزیابی کنیم (دستورالعمل اجازهی builtin و Extension Arithmetic را ببینید ). ارزیابی در اعداد صحیح عرض ثابت با هیچ بررسی برای سرریز انجام می شود، هر چند تقسیم با 0 به دام افتاده و به عنوان یک خطا پرچم گذاری می شود. اپراتورها و اولویت و وابستگی آنها همانند زبان C است. لیست زیر از اپراتورها به سطوح اپراتورهای اولویت برابر تقسیم می شود. سطوح به ترتیب اولویت کاهش می یابند.

شناسه ++ id -

متغیر post-increment و post-decrement

++ id - id

متغیر قبل از افزایش و قبل از کاهش

- +

منفی منفی و به علاوه

! ~

نفی منطقی و بیتی

**

انعطاف پذیری

* /٪

ضرب، تقسیم، باقی مانده

+ -

علاوه بر این، تفریق

<< >>

چپ و راست بیتاویوی تغییر می کند

<=> = <>

مقایسه

==! =

برابری و نابرابری

&

bitwise AND

^

تقریبا بیکار

|

بیت بیت OR

&&

منطقی و

||

منطقی OR

expr expr : expr

ارزیابی مشروط

= * = / =٪ = + = - = << = >> = & = ^ = | =

وظیفه

expr1 ، expr2

کاما

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

ثابت با پیشرو 0 به عنوان اعداد هشتم تفسیر می شود. پیشرو 0x یا 0X نشان دهنده شانزدهدهم می باشد. در غیر این صورت، اعداد به فرم [ base # ] n می رسند، جایی که پایه یک عدد اعشاری بین 2 تا 64 است که نشان دهنده پایه محاسباتی است، و n تعداد آن پایه است. اگر پایه حذف شود، سپس پایه 10 استفاده می شود. ارقام بزرگتر از 9 با حروف کوچک، حروف بزرگ، @، و _ در این ترتیب نشان داده می شوند. اگر پایه کمتر یا برابر 36 باشد، حروف کوچک و بزرگ ممکن است به طور قابل استفاده برای نشان دادن اعداد بین 10 و 35 استفاده شود.

اپراتورها به ترتیب اولویت ارزیابی می شوند. الفبایی در پرانتز ابتدا مورد ارزیابی قرار میگیرد و ممکن است قوانین مقدماتی بالا را نادیده بگیرد.

اظهارات شرطی

عبارات شرطی توسط [[ دستور ترکیب و تست و [ دستورات داخلی برای تست ویژگی های فایل و انجام رشته ها و مقایسه های ریاضی استفاده می شود استفاده می شود. عبارات از ابتدای یکنواخت یا باینری زیر تشکیل می شوند. اگر هر آرگومان فایل به یکی از اولویت ها از فرم / dev / fd / n است ، سپس توصیفگر فایل n مورد بررسی قرار می گیرد. اگر استدلال فایل به یکی از اولویت ها یکی از / dev / stdin باشد ، / dev / stdout یا / dev / stderr ، توصیفگر فایل 0، 1 یا 2 به ترتیب چک می شود.

فایل

درست است که فایل وجود دارد

-b فایل

درست است که فایل وجود دارد و یک فایل خاص بلوک است.

-c فایل

درست است که فایل وجود دارد و یک فایل خاص شخصیت است.

-d فایل

درست است که فایل وجود دارد و یک دایرکتوری است.

-e فایل

درست است که فایل وجود دارد

-f فایل

درست است که فایل وجود دارد و یک فایل منظم است.

-g فایل

درست است که فایل موجود است و set-group-id است.

-h file

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

-k file

درست است که فایل وجود داشته باشد و بیت آن "چسبنده" تنظیم شده است.

-p file

درست است که فایل وجود دارد و یک لوله نامیده می شود (FIFO).

-r فایل

درست است که فایل وجود دارد و قابل خواندن است

-s file

درست است که فایل وجود دارد و دارای یک اندازه بزرگتر از صفر است.

-t fd

درست است که توصیفگر فایل fd باز است و به ترمینال اشاره دارد.

-u فایل

درست است که فایل وجود داشته باشد و بیت set-user-id آن تنظیم شده است.

-w file

درست است که فایل وجود دارد و قابل نوشتن است.

-x فایل

درست است که فایل وجود دارد و قابل اجرا است

-O فایل

درست است که فایل وجود دارد و متعلق به شناسه موثر است.

-G فایل

درست است که فایل وجود دارد و متعلق به شناسه گروه موثر است.

-L فایل

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

-S file

درست است که فایل وجود دارد و یک سوکت است.

-n file

درست است که فایل وجود داشته باشد و از زمان خواندن آخرین بار تغییر کرده است.

file1 - nt file2

درست است اگر file1 جدیدتر باشد (طبق تاریخ اصلاح) از file2 ، یا اگر file1 وجود داشته باشد و file2 نباشد.

file1 - ot file2

درست است که file1 قدیمی تر از file2 است ، یا اگر file2 وجود داشته باشد و file1 نمی باشد.

file1 -ef file2

درست اگر file1 و file2 به همان دستگاه و تعداد inode مراجعه کنند.

-optname نام

اگر گزینه optname گزینه پوسته فعال باشد، درست است لیست گزینه های تحت توضیح گزینه -o را به مجموعه داخلی زیر مشاهده کنید.

-z رشته

درست است که طول رشته صفر است.

-n رشته

رشته

درست است اگر طول رشته غیر صفر است.

string1 == string2

درست است که رشته ها برابر هستند. = ممکن است به جای == برای انطباق کامل POSIX استفاده شود.

string1 ! = string2

درست است که رشته ها برابر نیستند.

string1 < string2

درست است که string1 قبل از string2 از لحاظ لغوی در مکان فعلی مرتب شده است.

string1 > string2

درست است که string1 بعد از رشته 2 به ترتیب از لحاظ لغوی در محلی جاری است.

arg1 OP arg2

OP یکی از موارد زیر است: -eq ، -ne ، -lt ، -le ، -gt ، یا -ge . این اپراتورهای باینری حساب محاسباتی اگر arg1 برابر است، برابر نیست، کمتر از، کمتر از یا برابر است، به ترتیب، درستتر یا بیشتر از arg2 یا بیشتر یا برابر است. Arg1 و arg2 ممکن است عدد صحیح مثبت یا منفی باشد.

پیمانکاری ساده

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

1

کلمات که تجزیه کننده به عنوان انتساب متغیر (کسانی که قبل از نام فرمان) و redirections مشخص شده اند برای پردازش بعدی ذخیره می شوند.

2

کلمات که تکلیف متغیر یا تغییر مسیر نیستند گسترش می یابد. اگر هر کلمه پس از گسترش باقی بماند، کلمه اول نام فرمانی است و کلمات باقیمانده استدلال است.

3

Redirections به صورت زیر در REDIRECTION شرح داده شده است.

4

متن بعد از = در هر تخصیص متغیر، قبل از اینکه به متغیر اختصاص داده شود، گسترش تیلده، گسترش پارامترها، جایگزینی فرمان، گسترش محاسباتی و حذف نقل قول را تحت تاثیر قرار می دهد.

اگر نام فرمان نباشد، تخصیص متغیر بر محیط پوسته فعلی تاثیر می گذارد. در غیر این صورت، متغیرها به محدوده فرمان اجرا شده اضافه می شوند و بر محیط پوسته فعلی تأثیر نمی گذارند. اگر هر یک از تخصیص ها تلاش می کند یک متغیر را برای یک متغیر readonly اختصاص دهد، یک خطا رخ می دهد و فرمان با وضعیت غیر صفر خارج می شود.

اگر هیچ نام فرمانی نداشته باشد، تغییر مسیر انجام می شود، اما بر محیط پوسته فعلی تأثیر نمی گذارد. یک خطای تغییر مسیر باعث می شود فرمان خروج با وضعیت غیر صفر باشد.

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

فرماندهی اجرایی

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

اگر نام فرمان شامل هیچ اسلش نیست، پوسته تلاش می کند تا آن را پیدا کند. اگر یک تابع پوسته با آن نام وجود داشته باشد، آن تابع به صورت زیر در FUNCTIONS شرح داده می شود. اگر نام یک تابع مطابقت نداشته باشد، پوسته آن را در لیستی از shell builtins جستجو می کند. اگر یک بازی پیدا شود، آن builtin مورد استفاده قرار می گیرد.

اگر نام نه یک تابع پوسته و نه یک ساختار است و شامل هیچ اسلش نیست، bash هر عنصر PATH را برای یک پوشه که دارای یک فایل اجرایی با آن نام است، جستجو می کند. Bash از یک جدول هش استفاده می کند تا راه های کامل فایل های اجرایی را به خاطر بسپارد (در زیر SHELL BUILTIN COMMANDS هاش را ببینید). جستجوی کامل دایرکتوری ها در PATH تنها زمانی انجام می شود که فرمان در جدول هش وجود ندارد. اگر جستجو ناموفق باشد، پوسته یک پیام خطا را چاپ می کند و یک وضعیت خروج 127 را باز می کند.

اگر جستجو موفق باشد یا اگر نام فرمان حاوی یک یا چند زاویه باشد، پوسته برنامه نامیده شده را در محیط اجرای مجزا اجرا می کند. Argument 0 بر روی نام داده شده تنظیم شده است و آرگومان باقیمانده به فرمان به آرگومان داده شده تنظیم شده است، اگر وجود داشته باشد.

اگر این اجرای نتواند چون فایل در فرمت اجرایی نیست و فایل یک پوشه نیست، فرض می شود یک اسکریپت پوسته باشد ، یک فایل حاوی دستورات پوسته است. یک subshell برای اجرای آن ایجاد شده است. این subshell خود خود را دوباره تغییر می دهد، به طوری که اثر این است که اگر یک shell جدید برای رسیدگی به اسکریپت فراخوانی شود، به استثنای اینکه مکان دستورات که توسط والدین به یاد می آورد (نگاه کنید به هش زیر زیر SHELL BUILTIN COMMANDS ) توسط فرزند حفظ می شود.

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

مدیریت اجرایی محیط

پوسته یک محیط اجرا دارد که شامل موارد زیر است:

*

فایلهای باز شده که توسط پوسته در فراخوانی به ارث برده شده است، با تغییر مسیرهای ارسال شده به اجرای execs تغییر یافته است

*

دایرکتوری کاری فعلی که توسط cd ، pushd یا popd تعیین شده است یا توسط shell در فراخوانی به ارث رسیده است

*

حالت ایجاد فایل به صورت تنظیم شده توسط umask یا از والدین پوسته به ارث برده می شود

*

تله های فعلی توسط دام

*

پارامترهای پوسته که توسط تخصیص متغیر یا مجموعه ای یا به ارث برده شده از پدر و مادر پوسته در محیط است

*

توابع پوسته در حین اجرای تعریف شده یا از والد پوسته در محیط به ارث رسیده است

*

گزینه هایی که در فراخوانی فعال شده اند (به صورت پیش فرض یا با استفاده از آرگومان خط فرمان) یا مجموعه

*

گزینه ها توسط shopt فعال شده است

*

نام مستعار پوشیده شده با نام مستعار

*

ID های فرایند مختلف، از جمله کارهای پس زمینه، ارزش $ $ و ارزش PPID $

هنگامی که یک دستور ساده به غیر از یک تابع builtin یا shell به اجرا در می آید، آن را در یک محیط اجرای مجزا که شامل موارد زیر است، فراخوانی می کند. به غیر از موارد ذکر شده، مقادیر از پوسته به ارث برده می شوند.

*

فایل های باز پوسته، به همراه هر گونه اصلاح و تکمیل مشخص شده توسط تغییر مسیر به فرمان

*

دایرکتوری کار فعلی

*

حالت ایجاد فایل mask

*

متغیرهای پوسته مشخص شده برای صادرات، همراه با متغیرهای صادر شده برای فرمان، در محیط منتقل می شوند

*

تله های گرفته شده توسط پوسته به مقادیر ارجاع شده از والدین پوسته بازنشانی می شوند و تله های نادیده گرفته شده توسط پوسته نادیده گرفته می شوند

یک فرمانده که در این محیط جداگانه فراخوانی می شود نمی تواند بر محیط اجرای اجرای پوسته تاثیر بگذارد.

جایگزینی فرمان و دستورات ناهمزمان در یک محیط زیرشکنی که یک تکراری از محیط پوسته است، به جز تکرارهای پوسته، به مقادیری که پوسته به ارث برده شده از پدر و مادرش در فراخوانی، بازگشته است، فراخوانی می شود. دستورات Builtin که بعنوان بخشی از یک خط لوله نیز نامیده می شوند نیز در محیط زیر اجرا می شوند. تغییرات ایجاد شده در محیط اشتراکی نمیتواند بر محیط اعدام پوسته تأثیر بگذارد.

اگر یک فرمان به وسیله یک & و کنترل شغل دنبال نشده باشد، ورودی پیش فرض استاندارد برای فرمان فایل empty / dev / null است . در غیر این صورت، دستور فراخوانی دستورات فایل پوسته فراخوانی را به گونه ای تغییر می دهد که با تغییر مسیر تغییر می کند.

همچنین ببینید

کتاب راهنما مرجع Brian Fox و Chet Ramey

کتابخانه Gnu Readline ، براون فاکس و چت رامی

کتابخانه تاریخچه Gnu ، براون فاکس و چت رامی

رابط کاربری سیستم عامل قابل حمل (POSIX) قسمت 2: Shell و Utilities ، IEEE

sh (1)، ksh (1)، csh (1)

emacs (1)، vi (1)

readline (3)