ZSHPARAM(1) General Commands Manual ZSHPARAM(1)

zshparam - پارامترهای zsh

هر پارامتر دارای یک نام، یک مقدار، و تعدادی صفت است. نام می‌تواند هر دنباله‌ای از نویسه‌های حرفی-عددی و زیرخط (underscore)، یا تک‌نویسه‌های `*'، `@'، `#'، `?'، `-'، `$'، یا `!' باشد. پارامتری که نام آن با یک نویسه حرفی-عددی یا زیرخط آغاز شود، یک متغیر نیز نامیده می‌شود.

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

پارامترهای اسکالر دارای نام ممکن است دارای صفت صادرشده، -x، باشند تا در محیط فرایند کپی شوند؛ این محیط سپس از پوسته به هر فرایند جدیدی که راه‌اندازی می‌کند منتقل می‌گردد. به پارامترهای صادرشده، متغیرهای محیطی گفته می‌شود. پوسته همچنین هنگام راه‌اندازی، متغیرهای محیطی را وارد کرده و پارامترهای متناظر را به‌طور خودکار به‌عنوان صادرشده علامت‌گذاری می‌کند. برخی از متغیرهای محیطی به دلایل امنیتی یا به این دلیل که ممکن است در عملکرد صحیح سایر ویژگی‌های پوسته اختلال ایجاد کنند، وارد نمی‌شوند.

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

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

مقدار یک پارامتر اسکالر را می‌توان با نوشتن موارد زیر نیز منتسب کرد:

name=value

در انتساب اسکالر، value به‌صورت یک رشته منفرد بسط می‌یابد که در آن عناصر آرایه‌ها به یکدیگر متصل می‌شوند؛ بسط نام فایل انجام نمی‌شود مگر اینکه گزینه GLOB_ASSIGN تنظیم شده باشد.

هنگامی که صفت عدد صحیح، -i، یا یک صفت ممیز شناور، -E یا -F، برای name تنظیم شده باشد، value تحت ارزیابی حسابی قرار می‌گیرد. علاوه بر این، با جایگزینی `=' با `+='، می‌توان مقدار یک پارامتر را افزایش داد یا به آن الحاق کرد. برای اَشکال دیگر انتساب، بخش `پارامترهای آرایه‌ای' و Arithmetic Evaluation (در zshmisc(1)) را ببینید.

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

برای ارجاع به مقدار یک پارامتر، `$name' یا `${name}' را بنویسید. برای جزئیات کامل، Parameter Expansion را در zshexpn(1) ببینید. آن بخش همچنین اثر تفاوت بین انتساب اسکالر و انتساب آرایه را بر بسط پارامتر توضیح می‌دهد.

برای انتساب مقدار آرایه‌ای، یکی از موارد زیر را بنویسید:

set -A name value ...
name=(value ...)
name=([key]=value ...)

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

در شکل سوم، key عبارتی است که در زمینه محاسباتی ارزیابی می‌شود (در ساده‌ترین حالت خود، یک عدد صحیح) که اندیس عنصری را که باید با value مقداردهی شود مشخص می‌کند. در این شکل، هر عنصری که صراحتاً ذکر نشده و قبل از بزرگ‌ترین اندیس مقداردهی‌شده قرار دارد، با یک رشته خالی مقداردهی می‌شود. اندیس‌ها می‌توانند به هر ترتیبی باشند. توجه داشته باشید که این نحو دقیق است: [ و ]= نباید در نقل‌قول قرار گیرند، و key نمی‌تواند شامل رشته بدون نقل‌قول ]= باشد، اما در غیر این صورت به‌عنوان یک رشته ساده در نظر گرفته می‌شود. اَشکال پیشرفته عبارت‌های زیرنویس که هنگام اندیس‌گذاری مستقیم روی یک نام متغیر استفاده می‌شوند (و در بخش `Array Subscripts' در ادامه توضیح داده شده‌اند)، در اینجا در دسترس نیستند.

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

به‌عنوان مثال، با فرض اینکه گزینه KSH_ARRAYS تنظیم نشده باشد، عبارت زیر:

array=(one [3]=three four)

باعث می‌شود متغیر آرایه‌ای array شامل چهار عنصر one، یک رشته خالی، three و four، به همان ترتیب باشد.

در اَشکالی که فقط value مشخص شده است، بسط کامل خط فرمان انجام می‌شود.

در شکل [key]=value، هم key و هم value تحت تمام اَشکال بسط مجاز برای بسط‌های تک‌کلمه‌ای پوسته قرار می‌گیرند (این شامل تولید نام فایل نمی‌شود)؛ این بسط‌ها همان‌گونه هستند که توسط پرچم بسط پارامتر (e) طبق توضیحات zshexpn(1) انجام می‌شوند. پرانتزهای تو در تو می‌توانند value را احاطه کنند و به‌عنوان بخشی از مقدار لحاظ می‌شوند که به یک رشته ساده تبدیل می‌گردد؛ این با ksh که اجازه می‌دهد خود مقادیر آرایه باشند تفاوت دارد. نسخه‌های آینده zsh ممکن است از آن پشتیبانی کنند. برای اینکه براکت‌ها به‌عنوان یک کلاس نویسه برای تولید نام فایل تفسیر شوند، و در نتیجه فهرست فایل‌های حاصل به‌عنوان مجموعه‌ای از مقادیر در نظر گرفته شود، علامت مساوی را با هر شکلی از نقل‌قول (کوتیشن) نقل کنید. مثال:

name=([a-z]'='*)

برای الحاق به یک آرایه بدون تغییر مقادیر موجود، از یکی از موارد زیر استفاده کنید:

name+=(value ...)
name+=([key]=value ...)

در شکل دوم، key می‌تواند یک اندیس موجود یا یک اندیس فراتر از انتهای آرایه قبلی را مشخص کند؛ هر مقدار موجود توسط value بازنویسی می‌شود. همچنین می‌توان از [key]+=value برای الحاق به مقدار موجود در آن اندیس استفاده کرد.

درون پرانتزهای سمت راست در هر یک از اَشکال انتساب، خطوط جدید و نقطه‌ویرگول‌ها همانند فضای خالی در نظر گرفته می‌شوند و valueهای جداگانه را از هم جدا می‌کنند. هر دنباله متوالی از چنین نویسه‌هایی اثری مشابه دارد.

پارامترهای آرایه معمولی را می‌توان به‌صراحت با دستور زیر نیز اعلان کرد:

typeset -a name

آرایه‌های انجمنی باید پیش از انتساب، با استفاده از دستور زیر اعلان شوند:

typeset -A name
هنگامی که name به یک آرایه انجمنی اشاره می‌کند، فهرست موجود در یک مقداردهی به‌صورت کلیدها و مقدارهای متناوب تفسیر می‌شود:
set -A name key value ...
name=(key value ...)
name=([key]=value ...)

توجه داشته باشید که در هر مقداردهی تنها یکی از دو نحو بالا می‌تواند استفاده شود؛ نمی‌توان این قالب‌ها را با یکدیگر ترکیب کرد. این برعکس وضعیت آرایه‌های دارای اندیس عددی است.

در این حالت، هر key باید دارای یک value باشد. توجه داشته باشید که این کار به کل آرایه مقداردهی می‌کند و هر عنصری را که در این فهرست نیامده باشد، حذف می‌نماید. نحو الحاق نیز می‌تواند برای یک آرایه انجمنی استفاده شود:

name+=(key value ...)
name+=([key]=value ...)

این دستور در صورتی که کلید از قبل موجود نباشد یک جفت کلید/مقدار جدید اضافه می‌کند، و اگر موجود باشد مقدار کلید فعلی را جایگزین می‌نماید. در شکل دوم همچنین می‌توان از [key]+=value برای الحاق به مقدار موجود در آن کلید استفاده کرد. فرایند گسترش عیناً مطابق با حالت‌های متناظر برای آرایه‌های عادی، همان‌طور که در بالا توضیح داده شد، انجام می‌شود.

برای ایجاد یک آرایه خالی (شامل آرایه‌های انجمنی)، از یکی از موارد زیر استفاده کنید:

set -A name
name=()

عناصر منفرد یک آرایه را می‌توان با استفاده از یک اندیس انتخاب کرد. یک اندیس به شکل `[exp]' عنصر تکی exp را انتخاب می‌کند، که در آن exp یک عبارت محاسباتی است که همانند زمانی که درون `$((...))' قرار گرفته باشد، تحت گسترش محاسباتی قرار می‌گیرد. شماره‌گذاری عناصر از ۱ شروع می‌شود، مگر اینکه گزینه KSH_ARRAYS تنظیم شده باشد که در این صورت از صفر شماره‌گذاری می‌شوند.

اندیس‌ها را می‌توان درون آکولادهایی که برای تحدید نام پارامتر استفاده می‌شوند به کار برد؛ بنابراین `${foo[2]}' معادل `$foo[2]' است. اگر گزینه KSH_ARRAYS تنظیم شده باشد، شکل دارای آکولاد تنها حالتی است که کار می‌کند، زیرا در غیر این صورت عبارت‌های درون کروشه به عنوان اندیس در نظر گرفته نمی‌شوند.

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

همین نحو اندیس‌گذاری برای آرایه‌های انجمنی نیز به کار می‌رود، با این تفاوت که هیچ گسترش محاسباتی روی exp اعمال نمی‌شود. با این حال، قواعد تجزیه برای عبارت‌های محاسباتی همچنان برقرار هستند، که بر نحوه محافظت از برخی نویسه‌های خاص در برابر تفسیر تأثیر می‌گذارد. برای جزئیات به بخش Subscript Parsing در زیر مراجعه کنید.

یک اندیس به شکل `[*]' یا `[@]' به تمام عناصر یک آرایه ارزیابی می‌شود؛ هیچ تفاوتی بین این دو وجود ندارد مگر زمانی که درون گیومه دوتایی قرار بگیرند. `"$foo[*]"' به `"$foo[1] $foo[2] ..."' ارزیابی می‌شود، در حالی که `"$foo[@]"' به `"$foo[1]" "$foo[2]" ...' ارزیابی می‌گردد. برای آرایه‌های انجمنی، `[*]' یا `[@]' به تمام مقادیر بدون هیچ ترتیب خاصی ارزیابی می‌شوند. توجه داشته باشید که این کار کلیدها را جایگزین نمی‌کند؛ برای جزئیات کامل به مستندات پرچم `k' ذیل Parameter Expansion Flags در zshexpn(1) مراجعه کنید. هنگامی که به یک پارامتر آرایه‌ای به‌صورت `$name' (بدون اندیس) ارجاع داده شود، به `$name[*]' ارزیابی می‌شود، مگر اینکه گزینه KSH_ARRAYS تنظیم شده باشد که در این صورت به `${name[0]}' ارزیابی خواهد شد (برای یک آرایه انجمنی، این به معنای مقدار کلید `0' است که ممکن است حتی با وجود مقادیری برای سایر کلیدها، اصلاً وجود نداشته باشد).

یک اندیس به شکل `[exp1,exp2]' تمام عناصر را در محدوده exp1 تا exp2، شامل هر دو، انتخاب می‌کند. (آرایه‌های انجمنی فاقد ترتیب هستند و بنابراین از محدوده‌ها پشتیبانی نمی‌کنند.) اگر یکی از اندیس‌ها به یک عدد منفی ارزیابی شود، به عنوان مثال -n، آنگاه nاُمین عنصر از انتهای آرایه استفاده می‌شود. بنابراین `$foo[-3]' سومین عنصر از انتهای آرایه foo است، و `$foo[1,-1]' معادل `$foo[*]' می‌باشد.

اندیس‌گذاری را می‌توان روی مقادیر غیرآرایه‌ای نیز انجام داد، که در این حالت اندیس‌ها یک زیررشته را برای استخراج مشخص می‌کنند. برای مثال، اگر FOO روی `foobar' تنظیم شده باشد، آنگاه `echo $FOO[2,5]' عبارت `ooba' را چاپ می‌کند. توجه داشته باشید که برخی از حالت‌های اندیس‌گذاری شرح‌داده‌شده در زیر تطبیق الگو انجام می‌دهند، و در آن حالت زیررشته از شروع تطبیق اندیس اول تا پایان تطبیق اندیس دوم امتداد می‌یابد. برای مثال،

string="abcdefghijklm"
print ${string[(r)d?,(r)h?]}

عبارت `defghi' را چاپ می‌کند. این یک تعمیم واضح از قاعده تطبیق‌های تک‌نویسه‌ای است. برای یک اندیس تکی، تنها به یک نویسه ارجاع داده می‌شود (نه به محدوده نویسه‌های پوشش‌داده‌شده توسط تطبیق).

توجه داشته باشید که در عملیات زیررشته، اندیس دوم توسط پرچم‌های اندیس r و R به‌طور متفاوتی پردازش می‌شود: اولی کوتاه‌ترین تطبیق را به عنوان طول در نظر می‌گیرد و دومی طولانی‌ترین تطبیق را. بنابراین در حالت اول، وجود یک * در انتها زائد است در حالی که در حالت دوم با کل باقی‌مانده رشته تطبیق می‌یابد. این موضوع تأثیری بر نتیجه حالت اندیس تکی ندارد چرا که در آنجا طول تطبیق بی‌اهمیت است.

می‌توان از یک اندیس در سمت چپ انتساب به این صورت استفاده کرد:

name[exp]=value

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

این نحو به عنوان آرگومانی برای دستور typeset نیز کار می‌کند:

typeset "name[exp]"=value

در این حالت، value نمی‌تواند فهرستی درون پرانتز باشد؛ با typeset تنها می‌توان انتساب‌های تک‌عنصری انجام داد. توجه داشته باشید که در این حالت، نقل‌قول‌ها برای جلوگیری از تفسیر براکت‌ها به عنوان عملگرهای تولید نام فایل ضروری هستند. می‌توان به جای آن از پیش‌اصلاح‌کنندهٔ دستور noglob استفاده کرد.

برای حذف عنصری از یک آرایهٔ معمولی، مقدار `()' را به آن عنصر منتسب کنید. برای حذف عنصری از یک آرایهٔ انجمنی، از دستور unset استفاده کنید:

unset "name[exp]"

اگر بلافاصله پس از براکت باز، یا ویرگول در یک بازه، در هر عبارت اندیس یک پرانتز باز قرار گیرد، رشتهٔ تا پرانتز بستهٔ متناظر به عنوان فهرستی از پرچم‌ها در نظر گرفته می‌شود، مانند `name[(flags)exp]'.

پرچم‌های s، n و b یک آرگومان می‌گیرند؛ نویسهٔ جداکننده در زیر به صورت `:' نشان داده شده است، اما هر نویسه‌ای، یا جفت‌های متناظر `(...)'، `{...}'، `[...]'، یا `<...>' می‌توانند استفاده شوند، اما توجه داشته باشید که `<...>' تنها در صورتی می‌تواند استفاده شود که اندیس درون عبارتی در گیومهٔ دوتایی باشد یا جایگزینی پارامتری محصور در آکولاد باشد، چرا که در غیر این صورت عبارت به عنوان یک تغییر مسیر (redirection) تفسیر می‌شود.

پرچم‌هایی که در حال حاضر شناخته می‌شوند عبارتند از:

w
اگر پارامتر اندیس‌گذاری‌شده یک اسکالر باشد، این پرچم باعث می‌شود اندیس‌گذاری به جای نویسه‌ها روی کلمات عمل کند. جداکنندهٔ پیش‌فرض کلمات، نویسه‌های فاصله‌ساز (whitespace) هستند. هنگام ترکیب با پرچم i یا I، اثر آن تولید اندیس اولین نویسه از اولین/آخرین کلمه‌ای است که با الگوی داده‌شده مطابقت دارد؛ توجه داشته باشید که تطابق ناموفق در این حالت همیشه مقدار 0 می‌دهد.
این string را به عنوان جداکنندهٔ کلمات مشخص می‌کند (برای استفاده با پرچم w). نویسهٔ جداکنندهٔ : اختیاری است؛ بالا را ببینید.
دنباله‌های گریز (escape sequences) مشابه دستور توکار print را در آرگومان رشته‌ایِ پرچم بعدی `s' تشخیص می‌دهد.
اگر پارامتر اندیس‌گذاری‌شده یک اسکالر باشد، این پرچم باعث می‌شود اندیس‌گذاری به جای نویسه‌ها روی خطوط عمل کند، یعنی با عناصری که با خطوط جدید (newlines) جدا شده‌اند. این یک کوته‌نوشت برای `pws:\n:' است.
اندیس‌گذاری معکوس: اگر این پرچم داده شود، exp به عنوان یک الگو در نظر گرفته می‌شود و نتیجه، اولین عنصر آرایه، زیررشته یا کلمهٔ منطبق خواهد بود (به ترتیب اگر پارامتر یک آرایه باشد، اگر اسکالر باشد، یا اگر اسکالر بوده و پرچم `w' داده شده باشد). اندیس استفاده‌شده، شمارهٔ عنصر منطبق است، به‌طوری که جفت‌های اندیس مانند `$foo[(r)??,3]' و `$foo[(r)??,(r)f*]' در صورتی که پارامتر آرایهٔ انجمنی نباشد امکان‌پذیر هستند. اگر پارامتر یک آرایهٔ انجمنی باشد، فقط بخش مقدار هر جفت با الگو مقایسه می‌شود و نتیجه همان مقدار است.

اگر جستجو در یک آرایهٔ معمولی ناموفق باشد، جستجو اندیس را روی یکی پس از انتهای آرایه تنظیم می‌کند، و بنابراین ${array[(r)pattern]} رشتهٔ خالی را جایگزین خواهد کرد. بدین ترتیب می‌توان موفقیت یک جستجو را مثلاً با استفاده از پرچم (i) بررسی کرد (با فرض اینکه گزینهٔ KSH_ARRAYS فعال نباشد):

[[ ${array[(i)pattern]} -le ${#array} ]]

اگر KSH_ARRAYS فعال باشد، -le باید با -lt جایگزین شود.

مشابه `r'، اما آخرین تطابق را برمی‌گرداند. برای آرایه‌های انجمنی، همهٔ تطابق‌های ممکن را برمی‌گرداند. می‌تواند برای انتساب به عناصر آرایه‌های معمولی استفاده شود، اما نه برای انتساب به آرایه‌های انجمنی. در صورت شکست، برای آرایه‌های عادی تأثیر آن بازگرداندن عنصر متناظر با اندیس 0 است؛ این مقدار خالی است مگر اینکه یکی از گزینه‌های KSH_ARRAYS یا KSH_ZERO_SUBSCRIPT فعال باشد.

توجه داشته باشید که در اندیس‌های دارای هر یک از پرچم‌های `r' و `R'، نویسه‌های الگو فعال هستند حتی اگر از یک پارامتر جایگزین شده باشند (صرف نظر از تنظیمات GLOB_SUBST که این ویژگی را در تطبیق الگوی معمولی کنترل می‌کند). می‌توان پرچم `e' را برای جلوگیری از تطبیق الگو اضافه کرد. از آنجا که این پرچم مانع دیگر اشکال جایگزینی نمی‌شود، همچنان دقت لازم است؛ استفاده از یک پارامتر برای نگهداری کلید، نتیجهٔ مطلوب را خواهد داشت:

key2='original key'
print ${array[(Re)$key2]}
مشابه `r'، اما به جای آن اندیس تطابق را برمی‌گرداند؛ این پرچم نباید با آرگومان دومی ترکیب شود. در سمت چپ یک انتساب، مانند `r' رفتار می‌کند. برای آرایه‌های انجمنی، بخش کلید از هر جفت با الگو مقایسه می‌شود و اولین کلید منطبقِ یافت‌شده نتیجه خواهد بود. در صورت شکست، طول آرایه به‌علاوهٔ یک را جایگزین می‌کند، همان‌طور که در توضیحات `r' بحث شد، یا برای یک آرایهٔ انجمنی رشتهٔ خالی را جایگزین می‌کند.

نکته: گرچه `i' می‌تواند روی جایگزینی اسکالر اعمال شود تا آفست (موقعیت) یک زیررشته را پیدا کند، اما هنگام جستجو در میان جایگزینی‌هایی که به یک رشتهٔ خالی می‌انجامند، یا هنگام جستجو برای زیررشتهٔ خالی، نتایج احتمالاً گمراه‌کننده خواهند بود.

مشابه `i'، اما اندیس آخرین تطابق، یا تمام کلیدهای منطبقِ ممکن در یک آرایهٔ انجمنی را برمی‌گرداند. در صورت شکست، مقدار 0 یا رشتهٔ خالی را برای آرایهٔ انجمنی جایگزین می‌کند. این پرچم هنگام بررسی مقادیر یا کلیدهایی که وجود ندارند، بهترین گزینه است.

نکته: اگر گزینهٔ KSH_ARRAYS فعال باشد و هیچ تطابقی پیدا نشود، نتیجه از حالتی که اولین عنصر آرایه تطابق دارد غیرقابل‌تشخیص خواهد بود.

اگر در اندیس یک آرایهٔ انجمنی استفاده شود، این پرچم باعث می‌شود کلیدها به عنوان الگو تفسیر شوند و مقدار مربوط به اولین کلید یافت‌شده‌ای را که exp با آن کلید مطابقت دارد برمی‌گرداند. توجه داشته باشید که این کلید می‌تواند هر کلیدی از این دست باشد زیرا هیچ ترتیبی برای آرایه‌های انجمنی تعریف نشده است. این پرچم در سمت چپ انتساب به عنصر آرایهٔ انجمنی کار نمی‌کند. در صورت استفاده روی نوع دیگری از پارامترها، این پرچم مانند `r' رفتار می‌کند.
روی یک آرایهٔ انجمنی، این مانند `k' است اما تمام مقادیری را که در آن‌ها exp با کلیدها مطابقت دارد برمی‌گرداند. روی انواع دیگر پارامترها، این پرچم همان تأثیر `R' را دارد.
اگر با `r'، `R'، `i' یا `I' ترکیب شود، باعث می‌شود آن‌ها nاُمین یا nاُمین آخرین تطابق را ارائه دهند (اگر expr به n ارزیابی شود). این پرچم زمانی که آرایه انجمنی باشد نادیده گرفته می‌شود. نویسهٔ جداکنندهٔ : اختیاری است؛ بالا را ببینید.
اگر با `r'، `R'، `i' یا `I' ترکیب شود، باعث می‌شود آن‌ها از nاُمین یا nاُمین آخرین عنصر، کلمه یا نویسه شروع کنند (اگر expr به n ارزیابی شود). این پرچم زمانی که آرایه انجمنی باشد نادیده گرفته می‌شود. نویسهٔ جداکنندهٔ : اختیاری است؛ بالا را ببینید..TP e این پرچم باعث می‌شود به جای هرگونه تطبیق الگویی که ممکن بود روی زیرنویس انجام شود، تطبیق رشته‌ای ساده به کار رود. بنابراین `${array[(re)*]}' فقط با آن عنصر آرایه تطبیق می‌یابد که مقدار آن * باشد. توجه داشته باشید که اشکال دیگر جایگزینی، مانند جایگزینی پارامتر، مهار نمی‌شوند (همچنان انجام می‌شوند).

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

برای روش‌های بیشتر دستکاری نتایج زیرنویس آرایه، بخش Parameter Expansion Flags (zshexpn(1)) را ببینید.

این مبحث عمدتاً برای رشته‌های کلید آرایه‌های انجمنی و الگوهای به‌کاررفته در زیرنویس‌گذاری معکوس (پرچم‌های `r'، `R'، `i' و غیره) صدق می‌کند، اما ممکن است بر جایگزینی‌های پارامتر که به عنوان بخشی از یک عبارت حسابی در یک زیرنویس معمولی ظاهر می‌شوند نیز تأثیر بگذارد.

برای اجتناب از محدودیت‌های تجزیه زیرنویس در انتساب به عناصر آرایه انجمنی، از نحو الحاق (append) استفاده کنید:

aa+=('key with "*strange*" characters' 'value string')

قاعده اساسی که هنگام نوشتن یک عبارت زیرنویس باید به خاطر داشت این است که تمام متن میان `[' آغازین و `]' پایانی، طوری تفسیر می‌شود که گویی درون نقل‌قول دوتایی قرار دارد (به zshmisc(1) مراجعه کنید). با این حال، برخلاف نقل‌قول‌های دوتایی که معمولاً نمی‌توانند تودرتو باشند، عبارات زیرنویس می‌توانند درون رشته‌های داخل نقل‌قول دوتایی یا درون دیگر عبارات زیرنویس (یا هر دو!) ظاهر شوند؛ از این رو قوانین دو تفاوت مهم دارند.

تفاوت نخست این است که براکت‌ها (`[' و `]') در یک عبارت زیرنویس باید به صورت جفت‌های متوازن ظاهر شوند، مگر اینکه پیش از آن‌ها یک بک‌اسلش (`\') قرار گرفته باشد. بنابراین، درون یک عبارت زیرنویس (و برخلاف نقل‌قول دوتایی واقعی) توالی `\[' تبدیل به `[' می‌شود و به همین ترتیب `\]' تبدیل به `]' می‌گردد. این امر حتی در مواردی که معمولاً به بک‌اسلش نیازی نیست نیز صدق می‌کند؛ به عنوان مثال، الگوی `[^[]' (برای تطبیق با هر نویسه‌ای غیر از براکت باز) در یک الگوی زیرنویس معکوس باید به صورت `[^\[]' نوشته شود. با این حال، توجه داشته باشید که `\[^\[\]' و حتی `\[^[]' یک معنی را می‌دهند، زیرا بک‌اسلش‌ها هنگامی که قبل از براکت‌ها ظاهر شوند، همیشه حذف می‌شوند!

همین قاعده برای پرانتزها (`(' و `)') و آکولادها (`{' و `}') نیز اعمال می‌شود: آن‌ها باید یا به صورت جفت‌های متوازن بیایند یا پیش از آن‌ها بک‌اسلش قرار گیرد، و بک‌اسلش‌هایی که از پرانتزها یا آکولادها محافظت می‌کنند در هنگام تجزیه حذف می‌شوند. دلیل این امر آن است که بسط‌های پارامتر ممکن است با آکولادهای متوازن احاطه شوند، و پرچم‌های زیرنویس توسط پرانتزهای متوازن معرفی می‌شوند.

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

برای استفاده از تعداد فردی نقل‌قول دوتایی به عنوان کلید در یک انتساب، از دستور توکار typeset و یک جفت نقل‌قول دوتایی دربرگیرنده استفاده کنید؛ جهت ارجاع به مقدار آن کلید نیز دوباره از نقل‌قول دوتایی استفاده نمایید:

typeset -A aa
typeset "aa[one\"two\"three\"quotes]"=QQQ
print "$aa[one\"two\"three\"quotes]"

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

پیچیدگی دیگر از جنبه‌ای ناشی می‌شود که در آن، تجزیه زیرنویس با تجزیه نقل‌قول دوتایی تفاوتی ندارد. همانند نقل‌قول دوتایی واقعی، توالی‌های `\*' و `\@' هنگامی که در یک عبارت زیرنویس ظاهر شوند به صورت دو نویسه باقی می‌مانند. برای استفاده لفظی از `*' یا `@' به عنوان کلید یک آرایه انجمنی، باید پرچم `e' به کار گرفته شود:

typeset -A aa
aa[(e)*]=star
print $aa[(e)*]

هنگام انجام زیرنویس‌گذاری معکوس باید نکته پایانی دیگری را مد نظر قرار داد. پارامترهایی که در عبارت زیرنویس ظاهر می‌شوند ابتدا بسط داده شده و سپس کل عبارت به عنوان یک الگو تفسیر می‌شود. این کار دو پیامد دارد: نخست، پارامترها طوری رفتار می‌کنند که گویی GLOB_SUBST فعال است (و نمی‌توان آن را خاموش کرد)؛ دوم، بک‌اسلش‌ها دو بار تفسیر می‌شوند، یک بار هنگام تجزیه زیرنویس آرایه و بار دیگر هنگام تجزیه الگو. در یک زیرنویس معکوس، لازم است از چهار بک‌اسلش استفاده شود تا یک بک‌اسلش منفرد به طور لفظی در الگو مطابقت پیدا کند. برای الگوهای پیچیده، معمولاً آسان‌ترین راه این است که الگوی مورد نظر را به یک پارامتر نسبت دهید و سپس در زیرنویس به آن پارامتر ارجاع دهید، زیرا در این صورت بک‌اسلش‌ها، براکت‌ها، پرانتزها و غیره تنها زمانی دیده می‌شوند که کل عبارت به یک الگو تبدیل شود. جهت تطبیق لفظی مقدار یک پارامتر در یک زیرنویس معکوس (به جای تطبیق به عنوان الگو)، از `${(q)name}' (به zshexpn(1) مراجعه کنید) برای نقل‌قول کردن مقدار بسط‌یافته استفاده نمایید.

توجه کنید که پرچم‌های `k' و `K' برای یک آرایه معمولی زیرنویس‌گذاری معکوس محسوب می‌شوند، اما برای یک آرایه انجمنی زیرنویس معکوس نیستند! (برای یک آرایه انجمنی، کلیدهای موجود در خود آرایه توسط آن پرچم‌ها به عنوان الگو تفسیر می‌شوند؛ در این حالت، زیرنویس یک رشته معمولی است.)

یک نکته نهایی که ارتباط مستقیمی با زیرنویس‌گذاری ندارد: نام‌های عددی پارامترهای مکانی (که در زیر شرح داده شده‌اند) به صورت ویژه‌ای تجزیه می‌شوند، به طوری که برای مثال `$2foo' معادل `${2}foo' است. بنابراین، برای استفاده از نحو زیرنویس جهت استخراج یک زیررشته از یک پارامتر مکانی، بسط باید با آکولاد احاطه شود؛ برای مثال، `${2[3,5]}' به نویسه‌های سوم تا پنجم پارامتر مکانی دوم ارزیابی می‌شود، در حالی که `$2[3,5]' کل پارامتر دوم الحاق‌شده با الگوی تولید نام فایل `[3,5]' است. پارامترهای موضعی دسترسی به آرگومان‌های خط فرمان یک تابع پوسته، اسکریپت پوسته یا خود پوسته را فراهم می‌کنند؛ بخش `Invocation` و همچنین بخش `Functions` را ببینید. پارامتر n، که در آن n یک عدد است، nاُمین پارامتر موضعی است. پارامتر `$0` یک حالت خاص است؛ بخش `Parameters Set By The Shell` را ببینید.

پارامترهای *، @ و argv آرایه‌هایی حاوی تمام پارامترهای موضعی هستند؛ بنابراین `$argv[n]` و غیره، دقیقاً معادل `$n` است. توجه داشته باشید که گزینه‌های KSH_ARRAYS یا KSH_ZERO_SUBSCRIPT برای این آرایه‌ها نیز اعمال می‌شوند، بنابراین در صورت تنظیم هر یک از آن گزینه‌ها، `${argv[0]}` معادل `$1` خواهد بود و به همین ترتیب.

پارامترهای موضعی را می‌توان پس از شروع به کار پوسته یا تابع، با استفاده از دستور توکار set، با انتساب به آرایهٔ argv یا با انتساب مستقیم به فرم `n=value` تغییر داد، که در آن n شمارهٔ پارامتر موضعی مورد نظر برای تغییر است. این کار همچنین هر یک از موقعیت‌های ۱ تا n را که از پیش مقداری نداشته‌اند، ایجاد می‌کند (با مقادیر خالی). توجه داشته باشید از آنجا که پارامترهای موضعی یک آرایه را تشکیل می‌دهند، انتساب آرایه‌ای به فرم `n=(value ...)` مجاز است و اثر آن شیفت دادن تمام مقادیر در موقعیت‌های بزرگ‌تر از n به تعداد موقعیت‌های لازم برای جای دادن مقادیر جدید است.

اجرای توابع پوسته، حوزه‌ها را برای پارامترهای پوسته مرزبندی می‌کند. (پارامترها دارای حوزهٔ پویا هستند.) دستور توکار typeset و فرم‌های جایگزین آن یعنی declare، integer، local و readonly (اما نه export) می‌توانند برای اعلان یک پارامتر به عنوان محلی در درونی‌ترین حوزه استفاده شوند.

هنگامی که یک پارامتر خوانده می‌شود یا مقداری به آن منتسب می‌گردد، درونی‌ترین پارامتر موجود با آن نام استفاده می‌شود. (به این معنی که پارامتر محلی هر پارامتر کمتر محلی را پنهان می‌کند.) با این حال، انتساب به یک پارامتر ناموجود یا اعلان یک پارامتر جدید با export، باعث ایجاد آن در بیرونی‌ترین حوزه می‌شود.

پارامترهای محلی با پایان یافتن حوزه‌شان از بین می‌روند. می‌توان از unset برای حذف یک پارامتر مادامی که هنوز در حوزه قرار دارد استفاده کرد؛ هر پارامتر بیرونی با همان نام همچنان پنهان باقی می‌ماند.

پارامترهای ویژه نیز می‌توانند محلی شوند؛ آنها ویژگی‌های خاص خود را حفظ می‌کنند مگر اینکه پارامتر موجود یا پارامتر تازه ایجادشده دارای صفت -h (پنهان‌سازی) باشد. این امر ممکن است اثرات غیرمنتظره‌ای داشته باشد: هیچ مقدار پیش‌فرضی وجود ندارد، بنابراین اگر در لحظهٔ محلی شدن متغیر هیچ انتسابی انجام نشود، مقدار آن خالی (یا در مورد اعداد صحیح، صفر) تنظیم خواهد شد. دستور زیر:

typeset PATH=/new/directory:$PATH

برای اینکه به پوسته یا برنامه‌های فراخوانی‌شده از آن موقتاً اجازه داده شود برنامه‌های موجود در /new/directory را درون یک تابع پیدا کنند، معتبر است.

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

در فهرست پارامترهایی که در ادامه می‌آید، نشان `<S>` مشخص می‌کند که پارامتر ویژه است. نشان `<Z>` مشخص می‌کند که این پارامتر هنگام راه‌اندازی پوسته در حالت شبیه‌سازی sh یا ksh وجود ندارد.

پارامترهای `!`، `#`، `*`، `-`، `?`، `@`، `$`، `ARGC`، `HISTCMD`، `LINENO`، `PPID`، `status`، `TTYIDLE`، `zsh_eval_context`، `ZSH_EVAL_CONTEXT` و `ZSH_SUBSHELL` فقط‌خواندنی هستند و از این رو توسط کاربر قابل بازیابی نیستند، بنابراین در خروجی `typeset -p` قرار نمی‌گیرند. این موضوع در مورد بسیاری از پارامترهای فقط‌خواندنی بارگذاری‌شده از ماژول‌ها نیز صدق می‌کند.

پارامترهای زیر به‌طور خودکار توسط پوسته تنظیم می‌شوند:

! <S>
شناسهٔ فرایند (PID) آخرین دستوری که با & در پس‌زمینه آغاز شده، با دستور توکار bg به پس‌زمینه فرستاده شده، یا با coproc اجرا گردیده است.
# <S>
تعداد پارامترهای موضعی به صورت ده‌دهی. توجه داشته باشید که ممکن است سردرگمی ناشی از نحو $#param که طول param را جایگزین می‌کند، رخ دهد. برای رفع ابهام از ${#} استفاده کنید. به‌ویژه، توالی `$#-...` در یک عبارت حسابی به صورت طول پارامتر - تفسیر می‌شود؛ به همان رجوع کنید.
همانند #.
$ <S>
شناسهٔ فرایند (PID) این پوسته، که هنگام راه‌اندازی پوسته تنظیم می‌شود. فرایندهایی که بدون اجرای برنامه‌ای جدید از پوسته مشتق می‌شوند (fork می‌شوند)، مانند جایگزینی دستورها و دستورهای گروه‌بندی‌شده با (...)، زیرپوسته‌هایی هستند که پوستهٔ فعلی را تکرار می‌کنند، و در نتیجه مقدار یکسانی را برای $$ به عنوان پوستهٔ والد خود جایگزین می‌نمایند.
- <S>
پرچم‌های ارسال‌شده به پوسته هنگام فراخوانی، یا تعیین‌شده توسط دستورهای set یا setopt.
* <S>
آرایه‌ای حاوی پارامترهای موضعی.
همانند *. انتساب به argv پارامترهای موضعی محلی را تغییر می‌دهد، اما خود argv یک پارامتر محلی نیست. حذف argv با unset در هر تابعی آن را در همه‌جا حذف می‌کند، اگرچه تنها درونی‌ترین آرایهٔ پارامترهای موضعی حذف می‌شود (بنابراین * و @ در سایر حوزه‌ها تحت تأثیر قرار نمی‌گیرند).
@ <S>
همانند argv[@]، حتی زمانی که argv تنظیم نشده باشد.
? <S>
وضعیت خروج بازگردانده‌شده توسط آخرین دستور.
0 <S>
نام استفاده‌شده برای فراخوانی پوستهٔ کنونی، یا آن‌گونه که با گزینهٔ خط فرمان -c هنگام فراخوانی تنظیم شده است. اگر گزینهٔ FUNCTION_ARGZERO تنظیم شده باشد، $0 در بدو ورود به یک تابع پوسته به نام تابع، و در بدو ورود به یک اسکریپت با منبع‌گیری (sourced) به نام اسکریپت تنظیم می‌شود، و هنگام بازگشت از تابع یا اسکریپت به مقدار قبلی خود بازنشانی می‌گردد.
همانند ?.
آرایه‌ای حاوی وضعیت‌های خروج بازگردانده‌شده توسط تمام دستورها در آخرین خط لوله (pipeline).
_ <S>
آخرین آرگومانِ دستور قبلی. همچنین، این پارامتر در محیط هر دستور اجراشده روی مسیر کامل نام فایل آن دستور تنظیم می‌شود.
نوع ماشین (ردهٔ ریزپردازنده یا مدل ماشین)، آن‌گونه که در زمان اجرا تعیین می‌شود.
شناسهٔ گروه مؤثر فرایند پوسته. اگر امتیازات کافی داشته باشید، می‌توانید شناسهٔ گروه مؤثر فرایند پوسته را با انتساب به این پارامتر تغییر دهید. همچنین (با فرض امتیازات کافی)، می‌توانید یک دستور منفرد را با یک شناسهٔ گروه مؤثر متفاوت توسط `(EGID=gid; command)` اجرا کنید.

اگر این متغیر محلی شود، مقدار آن به‌طور ضمنی برابر با 0 تنظیم نمی‌شود، اما می‌تواند به‌طور صریح به‌صورت محلی تنظیم گردد.

شناسهٔ کاربر مؤثر فرایند پوسته. اگر امتیازات کافی داشته باشید، می‌توانید شناسهٔ کاربر مؤثر فرایند پوسته را با انتساب به این پارامتر تغییر دهید. همچنین (با فرض امتیازات کافی)، می‌توانید یک دستور منفرد را با یک شناسهٔ کاربر مؤثر متفاوت توسط `(EUID=uid; command)` اجرا کنید.

اگر این متغیر محلی شود، مقدار آن به‌طور ضمنی برابر با 0 تنظیم نمی‌شود، اما می‌تواند به‌طور صریح به‌صورت محلی تنظیم گردد.

مقدار errno (به errno(3) مراجعه کنید) آن‌گونه که توسط جدیدترین فراخوانی سیستمیِ ناموفق تنظیم شده است. این مقدار وابسته به سیستم است و برای اهداف اشکال‌زدایی در نظر گرفته شده است. همچنین این متغیر همراه با ماژول zsh/system که امکان تبدیل این عدد به یک نام یا پیام را فراهم می‌کند، کاربرد دارد.

برای استفاده از این پارامتر، ابتدا باید مقداری (معمولاً 0 (صفر)) به آن منتسب شود. این متغیر در ابتدا جهت سازگاری با اسکریپت‌ها تنظیم‌نشده (unset) است. FUNCNEST <S> عدد صحیح. در صورتی که بزرگ‌تر یا مساوی صفر باشد، بیشینهٔ عمق تودرتویی توابع پوسته را مشخص می‌کند. هنگامی که از این مقدار فراتر رود، در نقطه‌ای که تابع فراخوانی می‌شود خطایی ایجاد می‌گردد. مقدار پیش‌فرض هنگام پیکربندی پوسته تعیین می‌شود، اما معمولاً 500 است. افزایش این مقدار، خطر بازگشت بی‌رویهٔ توابع و در نتیجه از کار افتادن (crash) پوسته را بالا می‌برد. قرار دادن یک مقدار منفی، این بررسی را غیرفعال می‌کند.

شناسه گروه واقعی (real group ID) فرایند پوسته. اگر اختیارات کافی داشته باشید، می‌توانید با مقداردهی به این متغیر، شناسه گروه فرایند پوسته را تغییر دهید. همچنین (با فرض وجود اختیارات کافی)، می‌توانید با `(GID=gid; command)' یک فرمان منفرد را تحت شناسه گروه دیگری اجرا کنید.

اگر این متغیر محلی شود، به طور ضمنی 0 نمی‌شود، اما می‌تواند صریحاً به صورت محلی مقداردهی شود.

شماره رویداد تاریخچهٔ فعلی در یک پوستهٔ تعاملی؛ به عبارت دیگر، شماره رویداد فرمانی که باعث خوانده شدن $HISTCMD شده است. اگر رویداد تاریخچهٔ فعلی، تاریخچه را ویرایش کند، HISTCMD به بیشینهٔ شماره رویداد تاریخچه جدید تغییر می‌یابد.
نام میزبان فعلی.
شماره سطر فعلی در اسکریپت جاری، فایل فراخوانی‌شده (sourced)، یا تابع پوسته‌ای که در حال اجرا است؛ هر کدام که اخیراً شروع شده باشد. توجه داشته باشید که در مورد توابع پوسته، شماره سطر به تابع آن‌گونه که در تعریف اولیه آن آمده بود اشاره دارد، نه لزوماً آن‌طور که توسط دستور توکار functions نمایش داده می‌شود.
اگر متغیر مربوطه در محیط پوسته مقداردهی نشده باشد، با نام کاربری مربوط به نشست ورود فعلی مقداردهی اولیه می‌شود. این متغیر به طور پیش‌فرض برون‌ریزی (export) می‌شود، اما این رفتار با استفاده از دستور توکار typeset قابل غیرفعال‌سازی است. این مقدار در صورت دسترسی، برابر با رشتهٔ بازگردانده شده توسط فراخوانی سیستمی getlogin(3) قرار می‌گیرد.
نوع ماشین (کلاس ریزپردازنده یا مدل ماشین)، همان‌طور که در زمان کامپایل تعیین شده است.
دایرکتوری کاری پیشین. این متغیر هنگام مقداردهی اولیه پوسته و هر بار که دایرکتوری تغییر می‌کند، تنظیم می‌شود.
مقدار آخرین آرگومان گزینه‌ای که توسط دستور getopts پردازش شده است.
اندیس آخرین آرگومان گزینه‌ای که توسط دستور getopts پردازش شده است.
سیستم‌عامل، همان‌طور که در زمان کامپایل تعیین شده است.
شناسه فرایند والد پوسته، که هنگام راه‌اندازی پوسته تنظیم می‌شود. مانند $$، این مقدار در زیرپوسته‌هایی که به صورت رونوشتی از پوسته فعلی ایجاد می‌شوند، تغییر نمی‌کند.
دایرکتوری کاری فعلی. این متغیر هنگام راه‌اندازی پوسته و هر بار که دایرکتوری تغییر می‌کند، تنظیم می‌شود.
یک عدد صحیح شبه‌تصادفی بین 0 تا 32767، که با هر بار ارجاع به این متغیر دوباره تولید می‌شود. مولد اعداد تصادفی می‌تواند با اختصاص یک مقدار عددی به RANDOM بذردهی (seed) شود.

مقادیر RANDOM یک دنبالهٔ شبه‌تصادفی عمداً تکرارپذیر را تشکیل می‌دهند؛ ارجاع زیرپوسته‌ها به RANDOM منجر به مقادیر شبه‌تصادفی یکسانی خواهد شد، مگر اینکه مقدار RANDOM در پوسته والد بین فراخوانی‌های زیرپوسته، ارجاع داده شده یا بذردهی شده باشد.

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

برخلاف سایر متغیرهای ویژه، نوع متغیر SECONDS را می‌توان با دستور typeset تغییر داد. نوع آن تنها می‌تواند به یکی از انواع ممیز شناور تغییر کند یا دوباره به عدد صحیح تبدیل شود. برای مثال، `typeset -F SECONDS' باعث می‌شود مقدار به صورت یک عدد ممیز شناور گزارش شود. این مقدار با دقت میکروثانیه در دسترس است، اگرچه ممکن است پوسته بسته به نحوه استفاده از typeset ارقام بیشتر یا کمتری را نشان دهد. برای جزئیات بیشتر، مستندات دستور توکار typeset در zshbuiltins(1) را ببینید.

با هر بار شروع یک پوسته جدید، یک واحد به آن افزوده می‌شود.
آرایه‌ای حاوی نام‌های سیگنال‌ها. توجه داشته باشید که با شماره‌گذاری استاندارد اندیس‌های آرایه در zsh، که در آن عنصر اول دارای اندیس 1 است، شماره سیگنال‌ها نسبت به شماره سیگنال استفاده‌شده توسط سیستم‌عامل یک واحد انحراف (offset) دارند. برای مثال، در سیستم‌های متداول شبه‌یونیکس، HUP سیگنال شماره 1 است، اما به صورت $signals[2] به آن ارجاع داده می‌شود. دلیل این امر وجود EXIT در موقعیت 1 آرایه است که به صورت درونی توسط zsh استفاده می‌شود اما برای سیستم‌عامل ناشناخته است. در بسیاری از سیستم‌ها، دسته‌ای از شماره‌های سیگنال رزروشده یا استفاده‌نشده قبل از سیگنال‌های بلادرنگ (real-time) پازیکس وجود دارد، بنابراین اندیس آرایه نمی‌تواند به عنوان نشانگر دقیقی برای شماره سیگنال آن‌ها استفاده شود. به جای آن، برای مثال از kill -l SIGRTMIN استفاده کنید.
در یک بلوک always، نشان می‌دهد که آیا فهرست کدهای قبلی باعث بروز خطا شده است یا خیر. مقدار 1 نشان‌دهنده خطا و در غیر این صورت 0 است. این متغیر می‌تواند بازنشانی شود و وضعیت خطا را پاک کند. بخش Complex Commands را در zshmisc(1) ببینید.
این متغیر به روشی مشابه با TRY_BLOCK_ERROR عمل می‌کند، اما وضعیت یک وقفه (interrupt) ناشی از سیگنال SIGINT را نشان می‌دهد که معمولاً هنگام فشردن ^C از صفحه‌کلید ایجاد می‌شود. اگر روی 0 تنظیم شود، هرگونه وقفه از این دست بازنشانی می‌شود؛ در غیر این صورت، وقفه پس از بلوک always منتشر (propagate) خواهد شد.

توجه داشته باشید که ممکن است وقفه‌ای در حین اجرای بلوک always رخ دهد؛ این وقفه نیز منتشر خواهد شد.

نام tty متصل به پوسته، در صورت وجود.
زمان بیکاری tty متصل به پوسته بر حسب ثانیه، یا -1 در صورتی که چنین ttyای وجود نداشته باشد.
شناسه کاربری واقعی (real user ID) فرایند پوسته. اگر اختیارات کافی داشته باشید، می‌توانید با انتساب مقدار به این متغیر، شناسه کاربری پوسته را تغییر دهید. همچنین (با فرض وجود اختیارات کافی)، می‌توانید با `(UID=uid; command)' یک فرمان منفرد را تحت شناسه کاربری دیگری اجرا کنید.

اگر این متغیر محلی شود، به طور ضمنی 0 نمی‌شود، اما می‌تواند صریحاً به صورت محلی مقداردهی شود.

نام کاربری متناظر با شناسه کاربری واقعی فرایند پوسته. اگر اختیارات کافی داشته باشید، می‌توانید با انتساب مقدار به این متغیر، نام کاربری (و همچنین شناسه کاربر و شناسه گروه) پوسته را تغییر دهید. همچنین (با فرض وجود اختیارات کافی)، می‌توانید با `(USERNAME=username; command)' یک فرمان منفرد را تحت نام کاربری (و شناسه کاربر و شناسه گروه) متفاوتی اجرا کنید.
سازنده/توزیع‌کننده، همان‌طور که در زمان کامپایل تعیین شده است.
آرایه‌ای (فهرست جداشده با دو نقطه) که بافتار کدهای در حال اجرای پوسته را نشان می‌دهد. هر بار که قطعه‌کدی ذخیره‌شده در پوسته اجرا می‌شود، یک رشته موقتاً به آرایه اضافه می‌گردد تا نوع عملیات در حال انجام را مشخص کند. با خواندن این آرایه به ترتیب، پشته‌ای از عملیات در حال انجام نشان داده می‌شود که نزدیک‌ترین بافتار در انتهای آن قرار دارد.

توجه داشته باشید که این متغیر اطلاعاتی درباره بافت نحوی مانند خط‌لوله‌ها یا زیرپوسته‌ها ارائه نمی‌دهد. برای تشخیص زیرپوسته‌ها از $ZSH_SUBSHELL استفاده کنید.

بافتار یکی از موارد زیر است:.PD 0

cmdarg
کدی که توسط گزینهٔ -c در خط فرمانی که پوسته را فراخوانی کرده، مشخص شده است.
جایگزینی دستور با استفاده از ساختار `...` یا $(...).
جایگزینی فایل با استفاده از ساختار =(...).
کدی که توسط دستور توکار eval اجرا شده است.
کدی که با سازوکار KSH_AUTOLOAD به‌منظور تعریف یک تابع بارگذاری‌خودکار اجرا شده است.
کدی از تاریخچهٔ پوسته که توسط گزینهٔ -e در دستور توکار fc اجرا می‌شود.
خطوطی از کد که مستقیماً از یک فایل خوانده می‌شوند، برای مثال توسط دستور توکار source.
خطوطی از کد که به‌جای خوانده‌شدن مستقیم از فایل منبع، از یک فایل .zwc خوانده می‌شوند.
کدی که توسط توصیف‌گر تطبیق (glob qualifier) e یا + اجرا شده است.
کدی که برای مرتب‌سازی فایل‌ها توسط توصیف‌گر تطبیق (glob qualifier) o اجرا شده است.
جایگزینی فایل با استفاده از ساختار <(...).
کدی که مستقیماً از یک فایل برای تعریف یک تابع بارگذاری‌خودکار خوانده شده است.
جایگزینی فایل با استفاده از ساختار >(...).
کدی که توسط دستور توکار sched اجرا شده است.
یک تابع پوسته.
کدی که توسط متغیر محیطی STTY به stty فرستاده شده است. معمولاً این مقدار مستقیماً به دستور stty سیستم فرستاده می‌شود، بنابراین بعید است این مقدار در عمل دیده شود.
کدی که به‌عنوان بخشی از یک سبک (style) بازیابی‌شده توسط دستور توکار zstyle از پودمان zsh/zutil اجرا شده است.
بالاترین سطح اجرای یک اسکریپت یا پوستهٔ تعاملی.
کدی که به‌عنوان تله‌ای تعریف‌شده توسط دستور توکار trap اجرا شده است. تله‌هایی که به‌صورت تابع تعریف می‌شوند، دارای بافت (context) shfunc هستند. از آنجا که تله‌ها ناهمگام هستند، ممکن است سلسله‌مراتب متفاوتی نسبت به کدهای دیگر داشته باشند.
کدی که توسط دستور توکار zpty از پودمان zsh/zpty اجرا شده است.
کدی که به‌عنوان یک محافظ (guard) توسط دستور zregexparse از پودمان zsh/zutil اجرا شده است.
کدی که به‌عنوان یک کنش (action) توسط دستور zregexparse از پودمان zsh/zutil اجرا شده است.
اگر zsh برای اجرای یک اسکریپت فراخوانی شده باشد، این متغیر نام آن اسکریپت است. در غیر این صورت، نامی است که برای فراخوانی پوستهٔ فعلی استفاده شده است. این مقدار مشابه مقدار $0 در هنگام فعال بودن گزینهٔ POSIX_ARGZERO است، اما همیشه در دسترس است.
اگر پوسته با گزینهٔ -c شروع شده باشد، این متغیر حاوی آرگومان فرستاده‌شده به این گزینه است. در غیر این صورت مقداردهی نشده است.
به نام پایهٔ (basename) دستوری بسط می‌یابد که برای فراخوانی این نمونه از zsh به کار رفته است.
خروجی «git describe --tags --long» برای مخزن zsh که برای ساخت پوسته استفاده شده است. این مقدار بیش از همه برای ردیابی نسخه‌های پوسته در طول توسعه بین انتشارها مفید است؛ از این رو بیشتر کاربران نباید از آن استفاده کنند و در عوض باید به $ZSH_VERSION تکیه نمایند.
بخش «The zsh/sched Module» را در zshmodules(1) ببینید.
اگر zsh برای اجرای یک اسکریپت فراخوانی شده باشد، این نام اسکریپت است، در غیر این صورت مقداردهی نشده است (unset).
عدد صحیح فقط‌خواندنی. در ابتدا صفر است و هر بار که پوسته برای ایجاد یک زیرپوسته جهت اجرای کد منشعب (fork) می‌شود، یک واحد افزایش می‌یابد. بنابراین «(print $ZSH_SUBSHELL)» و «print $(print $ZSH_SUBSHELL)» مقدار 1 را در خروجی می‌دهند، در حالی که «( (print $ZSH_SUBSHELL) )» خروجی 2 تولید می‌کند.
شمارهٔ نسخهٔ انتشار zsh..SH "پارامترهای مورد استفاده پوسته (PARAMETERS USED BY THE SHELL)" پارامترهای زیر توسط پوسته استفاده می‌شوند. مجدداً، `<S>' نشان‌دهندهٔ خاص بودن پارامتر است و `<Z>' نشان می‌دهد که پارامتر هنگام مقداردهی اولیهٔ پوسته در حالت شبیه‌سازی sh یا ksh وجود ندارد.

در مواردی که دو پارامتر با نگارش حروف کوچک و بزرگ از یک نام مشابه وجود دارند، مانند path و PATH، شکل حروف کوچک یک آرایه (array) است و شکل حروف بزرگ یک اسکالر (scalar) است که عناصر آرایه در آن با دونقطه (:) به یکدیگر پیوسته‌اند. این‌ها مشابه پارامترهای پیوندخورده‌ای (tied) هستند که با `typeset -T' ایجاد می‌شوند. کاربرد معمول برای حالت جداشده با دونقطه، جهت صدور به محیط (export) است، در حالی که دستکاری شکل آرایه‌ای در درون پوسته آسان‌تر است. توجه داشته باشید که لغو تنظیم (unset) هر یک از این جفت، دیگری را نیز لغو می‌کند؛ آن‌ها ویژگی‌های خاص خود را در هنگام ایجاد مجدد حفظ می‌کنند، و بازسازی یکی از اعضای جفت، دیگری را نیز بازسازی خواهد کرد.

ARGV0
در صورت صادر شدن (export)، مقدار آن به‌عنوان argv[0] دستورهای خارجی استفاده می‌شود. معمولاً در ساختارهایی مانند `ARGV0=emacs nethack' استفاده می‌شود.
نرخ انتقال داده بر حسب بیت در ثانیه که داده‌ها با آن به پایانه می‌رسند. ویرایشگر خط از این مقدار برای جبران کندی پایانه از طریق به تأخیر انداختن به‌روزرسانی‌های نمایشگر تا زمان لزوم، استفاده خواهد کرد. اگر پارامتر لغو شده باشد یا مقدار آن صفر باشد، سازوکار جبران‌سازی خاموش می‌شود. این پارامتر به‌طور پیش‌فرض تنظیم نشده است.

این پارامتر ممکن است در برخی شرایط با سودمندی تنظیم شود، برای مثال برای مودم‌های کُندی که به یک سرور ارتباطی شماره‌گیری می‌کنند، یا در یک شبکهٔ گستردهٔ (WAN) کند. برای دریافت بهترین کارایی، باید روی نرخ باود (baud rate) کندترین بخش پیوند تنظیم شود.

یک آرایه (فهرستی جداشده با دونقطه) از دایرکتوری‌ها که مسیر جستجو را برای دستور cd مشخص می‌کند.
تعداد ستون‌ها برای این نشست پایانه. برای چاپ فهرست‌های انتخاب و برای ویرایشگر خط استفاده می‌شود.
اگر تنظیم شود، در طول فرایند تصحیح املایی به‌عنوان یک الگو در نظر گرفته می‌شود. هر تصحیح احتمالی که با الگو مطابقت داشته باشد نادیده گرفته می‌شود. برای مثال، اگر مقدار آن `_*' باشد، توابع تکمیل (که بر اساس قرارداد، نام‌هایی دارند که با `_' آغاز می‌شوند) هرگز به‌عنوان تصحیح املایی پیشنهاد نخواهند شد. این الگو برای تصحیح نام‌های فایل‌ها، آن‌طور که توسط گزینهٔ CORRECT_ALL اعمال می‌شود، به کار نمی‌رود (بنابراین در مثال ذکرشده، فایل‌هایی در دایرکتوری جاری که با `_' شروع می‌شوند همچنان تکمیل خواهند شد).
اگر تنظیم شود، در طول تصحیح املایی نام‌های فایل‌ها به‌عنوان یک الگو در نظر گرفته می‌شود. هر نام فایلی که با این الگو مطابقت داشته باشد هرگز به‌عنوان تصحیح پیشنهاد نمی‌شود. برای مثال، اگر مقدار آن `.*' باشد، نام فایل‌های نقطه‌دار (dot files) هرگز به‌عنوان پیشنهاد تصحیح املایی ارائه نخواهند شد. این متغیر همراه با گزینهٔ CORRECT_ALL کاربردی است.
حداکثر اندازهٔ پشتهٔ دایرکتوری؛ به‌طور پیش‌فرض هیچ محدودیتی وجود ندارد. اگر پشته بزرگ‌تر از این مقدار شود، به‌طور خودکار کوتاه (truncate) خواهد شد. این پارامتر همراه با گزینهٔ AUTO_PUSHD مفید است.
اگر متغیر محیطی ENV هنگام فراخوانی zsh در حالت sh یا ksh تنظیم شده باشد، $ENV پس از اسکریپت‌های نمایه (profile) بارگذاری (source) می‌شود. مقدار ENV پیش از تفسیر شدن به‌عنوان یک مسیر، تحت بسط پارامتر، جایگزینی دستور، و بسط محاسباتی قرار می‌گیرد. توجه داشته باشید که از ENV استفاده نمی‌شود مگر اینکه پوسته تعاملی باشد و zsh در حال شبیه‌سازی sh یا ksh باشد.
ویرایشگر پیش‌فرض برای دستور توکار fc. اگر FCEDIT تنظیم نشده باشد، پارامتر EDITOR استفاده می‌شود؛ اگر آن هم تنظیم نشده باشد، یک مقدار پیش‌فرض توکار، معمولاً vi، استفاده خواهد شد.
یک آرایه (فهرستی جداشده با دونقطه) شامل پسوندهای فایل‌هایی که باید در طول تکمیل نام فایل نادیده گرفته شوند. با این حال، اگر فرایند تکمیل فقط فایل‌هایی با پسوندهای موجود در این فهرست تولید کند، این فایل‌ها در هر صورت تکمیل خواهند شد.
یک آرایه (فهرستی جداشده با دونقطه) از دایرکتوری‌ها که مسیر جستجو را برای تعاریف توابع مشخص می‌کند. این مسیر هنگامی جستجو می‌شود که تابعی با مشخصهٔ -u ارجاع داده شود. اگر یک فایل اجرایی پیدا شود، در محیط جاری خوانده و اجرا می‌شود.
سه نویسه که توسط سازوکار تاریخچه و تحلیل لغوی پوسته استفاده می‌شوند. نویسهٔ اول شروع یک بسط تاریخچه را مشخص می‌کند (پیش‌فرض `!'). نویسهٔ دوم شروع یک جایگزینی سریع تاریخچه را مشخص می‌کند (پیش‌فرض `^'). نویسهٔ سوم، نویسهٔ توضیح (comment) است (پیش‌فرض `#').

این نویسه‌ها باید در مجموعه نویسه‌های ASCII باشند؛ هرگونه تلاش برای تنظیم histchars روی نویسه‌هایی با معنای وابسته به محلی‌سازی (locale)، با یک پیام خطا رد خواهد شد.

مشابه histchars. (منسوخ‌شده.)
فایلی برای ذخیرهٔ تاریخچه در هنگام خروج یک پوستهٔ تعاملی. اگر تنظیم نشده باشد، تاریخچه ذخیره نخواهد شد.
اگر تنظیم شود، در زمان نوشتن فایل‌های تاریخچه به‌عنوان یک الگو در نظر گرفته می‌شود. هر مدخل احتمالی تاریخچه که با الگو مطابقت داشته باشد نادیده گرفته می‌شود. برای مثال، اگر مقدار آن `fc *' باشد، دستورهایی که ویرایشگر تعاملی تاریخچه را فراخوانی می‌کنند هرگز در فایل تاریخچه نوشته نمی‌شوند.

توجه داشته باشید که HISTORY_IGNORE یک الگوی واحد را تعریف می‌کند: برای مشخص کردن حالت‌های جایگزین از نحو `(first|second|...)' استفاده کنید.

این را با گزینهٔ HIST_NO_STORE یا قلاب (hook) zshaddhistory مقایسه کنید؛ هر یک از آن‌ها می‌توانند از اضافه شدن چنین دستورهایی به تاریخچهٔ تعاملی از همان ابتدا جلوگیری کنند. اگر مایلید از HISTORY_IGNORE برای جلوگیری از ثبت تاریخچه در وهلهٔ اول استفاده کنید، می‌توانید قلاب زیر را تعریف کنید:

zshaddhistory() {
  emulate -L zsh
  ## uncomment if HISTORY_IGNORE
  ## should use EXTENDED_GLOB syntax
  # setopt extendedglob
  [[ $1 != ${~HISTORY_IGNORE} ]]
}
حداکثر تعداد رویدادهای ذخیره‌شده در فهرست تاریخچهٔ داخلی. اگر از گزینهٔ HIST_EXPIRE_DUPS_FIRST استفاده می‌کنید، تنظیم این مقدار بزرگ‌تر از اندازهٔ SAVEHIST تفاضل آن‌ها را به‌عنوان یک ضربه‌گیر برای ذخیرهٔ رویدادهای تکراری تاریخچه در اختیارتان قرار می‌دهد.

اگر این متغیر محلی (local) شود، مقدار آن به‌طور ضمنی به 0 تنظیم نمی‌شود، بلکه می‌تواند به‌صورت صریح به‌طور محلی تنظیم شود.

آرگومان پیش‌فرض برای دستور cd. این مقدار به‌طور خودکار توسط پوسته در شبیه‌سازی sh، ksh یا csh تنظیم نمی‌شود، اما در هر صورت معمولاً در محیط وجود دارد، و در صورت مقداردهی، رفتار خاص معمول خود را خواهد داشت.
جداکننده‌های فیلد داخلی (به‌طور پیش‌فرض فاصله، تب، خط جدید و NUL)، که برای جداسازی کلمات حاصل از بسط دستور یا بسط پارامتر و کلمات خوانده‌شده توسط دستور توکار read استفاده می‌شوند. هر نویسه‌ای از مجموعهٔ فاصله، تب و خط جدید که در IFS ظاهر شود، فضای خالی IFS نامیده می‌شود. یک یا چند نویسهٔ فضای خالی IFS یا یک نویسهٔ غیر فضای خالی IFS به‌همراه هر نویسهٔ فضای خالی IFS مجاور آن، مرز یک فیلد را مشخص می‌کنند. اگر یک نویسهٔ فضای خالی IFS دو بار متوالی در IFS ظاهر شود، با آن طوری رفتار می‌شود که گویی یک نویسهٔ فضای خالی IFS نبوده است.

اگر این پارامتر لغو تنظیم (unset) باشد، مقدار پیش‌فرض استفاده می‌شود. توجه داشته باشید که این کار تأثیری متفاوت با تنظیم پارامتر روی یک رشتهٔ خالی دارد.

اگر گزینهٔ MULTIBYTE فعال باشد و IFS شامل نویسه‌های نامعتبر در محلی‌سازی (locale) جاری باشد، به مقدار پیش‌فرض بازنشانی می‌شود.

این متغیر نویسه‌ای را تعریف می‌کند که باید پیش از تفسیر خط فرمان، از انتهای آن حذف شود (تنها در پوسته‌های تعاملی). هدف آن برطرف کردن مشکل کلیدهایی است که به شکل آزاردهنده‌ای نزدیک کلید return قرار گرفته‌اند و جایگزین گزینهٔ SUNKEYBOARDHACK می‌شود که این کار را فقط برای نقل‌قول وارون (backquote) انجام می‌داد. اگر نویسهٔ انتخاب‌شده یکی از نویسه‌های نقل‌قول تکی، نقل‌قول دوتایی یا نقل‌قول وارون باشد، باید تعداد فردی از آن‌ها در خط فرمان وجود داشته باشد تا آخرین مورد حذف شود. برای سازگاری رو به عقب، اگر گزینهٔ SUNKEYBOARDHACK صراحتاً تنظیم شده باشد، مقدار KEYBOARD_HACK به backquote برمی‌گردد. اگر این گزینه صراحتاً لغو شده باشد، این متغیر روی خالی تنظیم می‌شود.
مدت زمانی که پوسته، به صدم ثانیه، هنگام خواندن توالی‌های چندنویسه‌ای مقید، برای فشرده شدن کلید دیگری منتظر می‌ماند.
این متغیر ردهٔ محلی (locale) را برای هر رده‌ای که مشخصاً از طریق متغیری که با `LC_' آغاز می‌شود انتخاب نشده باشد، تعیین می‌کند.
این متغیر مقدار متغیر `LANG' و مقدار هر یک از متغیرهای دیگری را که با `LC_' آغاز می‌شوند بازنویسی (override) می‌کند.
این متغیر ردهٔ محلی را برای اطلاعات تطبیق و چینش نویسه‌ها (collation) درون محدوده‌های کروشه در تطبیق الگو (glob) و برای مرتب‌سازی تعیین می‌کند.
این متغیر ردهٔ محلی را برای توابع دست‌کاری نویسه تعیین می‌کند. اگر گزینهٔ MULTIBYTE فعال باشد، این متغیر یا LANG باید شامل مقداری باشد که مجموعه نویسه در حال استفاده را بازتاب دهد، حتی اگر یک مجموعه نویسه تک‌بایتی باشد، مگر اینکه فقط زیرمجموعهٔ ۷-بیتی (ASCII) استفاده شود. برای نمونه، اگر مجموعه نویسه ISO-8859-1 باشد، یک مقدار مناسب می‌تواند en_US.iso88591 (در برخی توزیع‌های لینوکس) یا en_US.ISO8859-1 (در MacOS) باشد.
این متغیر زبانی را که پیام‌ها باید با آن نوشته شوند تعیین می‌کند. توجه داشته باشید که zsh از کاتالوگ‌های پیام استفاده نمی‌کند.
این متغیر بر نویسهٔ ممیز اعشاری و نویسهٔ جداکنندهٔ هزارگان برای توابع ورودی/خروجی قالب‌بندی‌شده و توابع تبدیل رشته اثر می‌گذارد. توجه داشته باشید که zsh هنگام تجزیه عبارت‌های ریاضی ممیز شناور این تنظیم را نادیده می‌گیرد.
این متغیر ردهٔ محلی را برای قالب‌بندی تاریخ و زمان در توالی‌های گریز اعلان (prompt) تعیین می‌کند.
تعداد خطوط برای این نشست ترمینال. برای چاپ فهرست‌های select و برای ویرایشگر خط استفاده می‌شود.
در ویرایشگر خط، تعداد تطابق‌هایی است که بدون پرسش قبلی فهرست می‌شوند. اگر مقدار منفی باشد، فهرست در صورتی نشان داده خواهد شد که حداکثر به تعداد خطوط تعیین‌شده با قدر مطلق باشد. اگر روی صفر تنظیم شود، پوسته تنها در صورتی می‌پرسد که بالای فهرست از صفحه به بیرون پیمایش (اسکرول) شود.
اگر این پارامتر تنظیم شده باشد و mailpath تنظیم نشده باشد، پوسته در فایل مشخص‌شده به دنبال نامه می‌گردد.
بازه زمانی به ثانیه بین بررسی‌ها برای نامهٔ جدید.
آرایه‌ای (فهرست جداشده با دونقطه) از نام فایل‌ها برای بررسی نامه‌های جدید. پس از هر نام فایل می‌تواند یک `?' و پیامی بیاید که چاپ خواهد شد. روی پیام بسط پارامتر، جایگزینی دستور و بسط محاسباتی با متغیر $_ تعریف‌شده به عنوان نام فایلی که تغییر کرده است، اعمال می‌شود. پیام پیش‌فرض `You have new mail' است. اگر عنصری به جای فایل، یک دایرکتوری باشد، پوسته به صورت بازگشتی هر فایل را در هر زیردایرکتوری از آن عنصر بررسی می‌کند.
آرایه‌ای (فهرست جداشده با دونقطه) که مقدار آن توسط پوسته استفاده نمی‌شود. با این حال، آرایهٔ manpath می‌تواند سودمند باشد، زیرا تنظیم آن MANPATH را نیز تنظیم می‌کند، و برعکس.
match
mbegin
mend
آرایه‌هایی که هنگام استفاده از پرچم تطبیق الگوی b در تطابق‌های الگو توسط پوسته تنظیم می‌شوند. زیربخش Globbing flags را در مستندات Filename Generation در zshexpn(1) ببینید.
MATCH
MBEGIN
MEND
هنگامی که پرچم تطبیق الگوی m در تطابق‌های الگو استفاده می‌شود، توسط پوسته تنظیم می‌شوند. زیربخش Globbing flags را در مستندات Filename Generation در zshexpn(1) ببینید.
آرایه‌ای (فهرست جداشده با دونقطه) از دایرکتوری‌هایی که zmodload در آن‌ها به دنبال ماژول‌های بارگذاری‌پذیر پویا می‌گردد. این مقدار با یک مسیر استاندارد مقداردهی اولیه می‌شود که معمولاً `/usr/local/lib/zsh/$ZSH_VERSION' است. (بخش `/usr/local/lib' از نصبی به نصب دیگر متفاوت است.) به دلایل امنیتی، هر مقداری که هنگام آغاز پوسته در محیط تنظیم شده باشد نادیده گرفته خواهد شد.

این پارامترها تنها در صورتی وجود دارند که نصب از بارگذاری پویای ماژول پشتیبانی کند.

نام دستوری که در صورت مشخص شدن تغییر مسیر (redirection) بدون هیچ دستوری در نظر گرفته می‌شود. پیش‌فرض آن cat است. برای رفتار مشابه sh/ksh، این را به : تغییر دهید. برای رفتار شبه-csh، این پارامتر را لغو (unset) کنید؛ پوسته در صورت وارد شدن دستورهای تهی یک پیام خطا چاپ خواهد کرد.
آرایه‌ای (فهرست جداشده با دونقطه) از دایرکتوری‌ها برای جستجوی دستورها. هنگامی که این پارامتر تنظیم شود، هر دایرکتوری پویش شده و تمام فایل‌های یافته‌شده در یک جدول درهم‌سازی (hash table) قرار می‌گیرند. دایرکتوری‌هایی که با مسیر نسبی نام‌گذاری شده‌اند برای درهم‌سازی پویش نمی‌شوند.
این رشته هر زمان که ویرایشگر خط خارج شود خروجی داده می‌شود. معمولاً حاوی رشته‌های termcap برای بازنشانی ترمینال است.
PROMPT <S> <Z>
PROMPT2 <S> <Z>
PROMPT3 <S> <Z>
PROMPT4 <S> <Z>
به ترتیب همانند PS1، PS2، PS3 و PS4 هستند.
همانند PS1.
هنگامی که گزینه‌های PROMPT_CR و PROMPT_SP تنظیم شده باشند، پارامتر PROMPT_EOL_MARK می‌تواند برای سفارشی‌سازی چگونگی نمایش پایان خطوط جزئی استفاده شود. این پارامتر تحت بسط اعلان، با فعال بودن گزینهٔ PROMPT_PERCENT قرار می‌گیرد. اگر تنظیم نشود، رفتار پیش‌فرض معادل مقدار `%B%S%#%s%b' است.
رشتهٔ اعلان اصلی، که پیش از خواندن یک دستور چاپ می‌شود. این رشته پیش از نمایش تحت شکل خاصی از بسط قرار می‌گیرد؛ بخش EXPANSION OF PROMPT SEQUENCES در zshmisc(1) را ببینید. پیش‌فرض `%m%# ' است.
اعلان ثانویه، که زمانی چاپ می‌شود که پوسته برای تکمیل یک دستور به اطلاعات بیشتری نیاز دارد. به همان شیوهٔ PS1 بسط می‌یابد. پیش‌فرض `%_> ' است، که هر ساختار پوسته یا علامت‌های نقل‌قولی را که در حال حاضر در حال پردازش هستند نمایش می‌دهد.
اعلان انتخاب که درون یک حلقهٔ select استفاده می‌شود. به همان شیوهٔ PS1 بسط می‌یابد. پیش‌فرض `?# ' است.
اعلان ردگیری اجرا. پیش‌فرض `+%N:%i> ' است، که نام ساختار فعلی پوسته و شمارهٔ خط درون آن را نمایش می‌دهد. در شبیه‌سازی sh یا ksh، پیش‌فرض `+ ' است..TP psvar <S> <Z> (PSVAR <S>) آرایه‌ای (فهرستی جداشده با دونقطه) که عناصر آن می‌توانند در رشته‌های PROMPT استفاده شوند. مقداردهی psvar همچنین PSVAR را تنظیم می‌کند، و بالعکس.
نام دستوری که در صورت تعیین یک تغییر مسیر ورودی به تنهایی و بدون دستور در نظر گرفته می‌شود. مقدار پیش‌فرض more است.
اگر نامنفی باشد، برای دستوراتی که بیشینه اندازه مقیم در حافظه (resident set size یا به‌طور تقریبی، میزان استفاده از حافظه اصلی) آن‌ها بر حسب کیلوبایت بزرگ‌تر از این مقدار باشد، آمارهای زمانی گزارش می‌شود. قالب مورد استفاده برای خروجی آمارها مقدار پارامتر TIMEFMT است، که مشابه متغیر REPORTTIME و دستور توکار time می‌باشد؛ توجه داشته باشید که این قالب به‌طور پیش‌فرض میزان مصرف حافظه را چاپ نمی‌کند. افزودن " max RSS %M" به انتهای مقدار TIMEFMT باعث می‌شود مقداری که موجب فعال شدن گزارش شده است نمایش یابد. در صورتی که REPORTTIME نیز در حال استفاده باشد، حداکثر یک گزارش تکی برای هر دو محرک چاپ خواهد شد. این قابلیت نیازمند فراخوان سیستمی getrusage() است که عموماً توسط سیستم‌های شبه‌یونیکس امروزی پشتیبانی می‌شود.
اگر نامنفی باشد، برای دستوراتی که مجموع زمان اجرای کاربری و سیستمی آن‌ها (اندازه‌گیری‌شده بر حسب ثانیه) بیشتر از این مقدار باشد، آمارهای زمانی چاپ می‌شود. خروجی برای دستوراتی که درون ویرایشگر خط اجرا می‌شوند، شامل تکمیل خودکار (completion)، منع می‌گردد؛ با این حال دستوراتی که صراحتاً با کلمه کلیدی time مشخص شده باشند، همچنان موجب چاپ خلاصه در این حالت خواهند شد.
این پارامتر بر اساس قرارداد برای انتقال مقادیر رشته‌ای بین اسکریپت‌های پوسته و دستورات توکار پوسته در شرایطی که فراخوانی تابع یا تغییر مسیر غیرممکن یا نامطلوب باشد، رزرو شده است. دستور توکار read و دستور مرکب select ممکن است REPLY را مقداردهی کنند، و تولید نام فایل هنگام ارزیابی عباراتی خاص، هم مقدار آن را تنظیم و هم بررسی می‌کند. برخی از ماژول‌ها نیز از REPLY برای مقاصد مشابه استفاده می‌کنند.
مانند REPLY، اما برای مقادیر آرایه‌ای به جای رشته‌ها.
RPROMPT <S>
RPS1 <S>
این اعلان هنگامی که اعلان اصلی در سمت چپ نمایش داده می‌شود، در سمت راست صفحه به نمایش درمی‌آید. در صورت فعال بودن گزینه SINGLE_LINE_ZLE کار نمی‌کند. به همان روش PS1 بسط می‌یابد.
RPROMPT2 <S>
RPS2 <S>
این اعلان هنگامی که اعلان ثانویه در سمت چپ نمایش داده می‌شود، در سمت راست صفحه به نمایش درمی‌آید. در صورت فعال بودن گزینه SINGLE_LINE_ZLE کار نمی‌کند. به همان روش PS2 بسط می‌یابد.
حداکثر تعداد رویدادهای تاریخچه برای ذخیره در فایل تاریخچه.

اگر این متغیر محلی شود، به‌طور ضمنی برابر با 0 تنظیم نمی‌شود، اما می‌تواند صراحتاً به‌صورت محلی مقداردهی شود.

اعلان مورد استفاده برای تصحیح املا. دنباله `%R' به رشته‌ای که احتمالاً نیاز به تصحیح املا دارد، و `%r' به تصحیح پیشنهادی بسط می‌یابد. تمامی دیگر نویسه‌های گریز اعلان نیز مجاز هستند.

اقدامات موجود در اعلان عبارتند از [nyae]:

نادیده گرفتن تصحیح و اجرای دستور.
اعمال تصحیح و اجرای دستور.
کنار گذاشتن کل خط فرمان بدون اجرای آن.
ادامه دادن ویرایش خط فرمان.
اگر این پارامتر در محیط یک دستور تنظیم شود، پوسته دستور stty را با مقدار این پارامتر به عنوان آرگومان اجرا می‌کند تا پیش از اجرای دستور، ترمینال را برپا سازد. این حالت‌ها تنها بر همان دستور اعمال می‌شوند و پس از پایان یا تعلیق آن به حالت اول بازمی‌گردند. اگر دستور معلق شود و بعداً با دستورات توکار fg یا wait ادامه یابد، حالت‌های مشخص‌شده توسط STTY را درست مانند اینکه معلق نشده باشد مشاهده خواهد کرد. این موضوع (عمداً) در صورتی که دستور از طریق `kill -CONT' ادامه یابد اعمال نمی‌شود. در صورتی که دستور در پس‌زمینه اجرا شود یا این پارامتر در محیط پوسته باشد ولی صراحتاً در خط ورودی مقداردهی نشده باشد، STTY نادیده گرفته می‌شود. این کار مانع از اجرای stty برای هر دستور خارجی به دلیل صدور (export) تصادفی آن می‌شود. همچنین توجه داشته باشید که STTY نباید برای مشخص کردن اندازه پنجره استفاده شود؛ این موارد مختص به دستور باقی نخواهند ماند.

اگر پارامتر تنظیم شده ولی خالی باشد، تمام موارد بالا به جز اجرای stty اعمال می‌شود. این ویژگی می‌تواند به عنوان روشی برای منجمد کردن tty در حین اجرای یک دستور منفرد و مسدود کردن تغییرات آن بر تنظیمات tty، مشابه با دستور توکار ttyctl، مفید باشد.

نوع ترمینال مورد استفاده. این متغیر هنگام جستجوی دنباله‌های termcap استفاده می‌شود. یک مقداردهی به TERM باعث راه‌اندازی مجدد ترمینال توسط zsh می‌شود، حتی اگر مقدار آن تغییر نکند (مانند `TERM=$TERM'). برای اینکه تنظیمات جدید اعمال شوند، انجام چنین مقداردهی پس از هرگونه تغییر در پایگاه‌داده تعاریف ترمینال یا نوع ترمینال الزامی است.
ارجاعی به پایگاه‌داده terminfo شما، که در صورت موجود بودن در سیستم، توسط کتابخانه `terminfo' استفاده می‌شود؛ terminfo(5) را ببینید. در صورت تنظیم، باعث راه‌اندازی مجدد ترمینال توسط پوسته می‌شود و راهکار موقت `TERM=$TERM' را غیرضروری می‌کند.
فهرستی جداشده با دونقطه از پایگاه‌های داده terminfo، که در صورت موجود بودن در سیستم، توسط کتابخانه `terminfo' استفاده می‌شود؛ terminfo(5) را ببینید. این متغیر تنها توسط کتابخانه‌های ترمینال خاصی، به‌ویژه ncurses استفاده می‌شود؛ برای بررسی پشتیبانی در سیستم خود terminfo(5) را ببینید. در صورت تنظیم، باعث راه‌اندازی مجدد ترمینال توسط پوسته می‌شود و ترفند `TERM=$TERM' را غیرضروری می‌کند. توجه داشته باشید که بر خلاف سایر آرایه‌های جداشده با دونقطه، این متغیر به یک آرایه zsh متصل نیست.
قالب گزارش‌های زمانی فرایند همراه با کلمه کلیدی time. مقدار پیش‌فرض `%J %U user %S system %P cpu %*E total' است. دنباله‌های گریز زیر را شناسایی می‌کند، گرچه ممکن است همه آن‌ها در تمامی سیستم‌ها موجود نباشند و برخی از موارد موجود نیز ممکن است کاربردی نباشند:
%%
یک `%'.
%U
ثانیه‌های پردازنده صرف‌شده در حالت کاربر (user mode).
%S
ثانیه‌های پردازنده صرف‌شده در حالت هسته (kernel mode).
%E
زمان سپری‌شده به ثانیه.
%P
درصد پردازنده، محاسبه‌شده به‌صورت 100*(%U+%S)/%E.
%W
تعداد دفعاتی که فرایند swap شده است.
%X
میانگین فضای متنی (اشتراکی) استفاده‌شده بر حسب کیلوبایت.
%D
میانگین فضای داده/پشته (غیراشتراکی) استفاده‌شده بر حسب کیلوبایت.
%K
کل فضای استفاده‌شده (%X+%D) بر حسب کیلوبایت.
%M
بیشینه حافظه‌ای که فرایند در هر زمان استفاده کرده است بر حسب کیلوبایت..TP %F تعداد خطاهای عمدهٔ صفحه (صفحه‌ای که باید از دیسک خوانده می‌شد).
%R
تعداد خطاهای جزئی صفحه.
%I
تعداد عملیات ورودی.
%O
تعداد عملیات خروجی.
%r
تعداد پیام‌های سوکتِ دریافت‌شده.
%s
تعداد پیام‌های سوکتِ ارسال‌شده.
%k
تعداد سیگنال‌های دریافت‌شده.
%w
تعداد تعویض زمینه‌های داوطلبانه (انتظارها).
%c
تعداد تعویض زمینه‌های غیرداوطلبانه.
%J
نام این کار (job).

می‌توان یک ستاره بین علامت درصد و پرچم‌های چاپ زمان قرار داد (برای نمونه، «%*E»)؛ این کار باعث می‌شود زمان در قالب «hh:mm:ss.ttt» چاپ شود (ساعت و دقیقه تنها در صورتی چاپ می‌شوند که صفر نباشند). متناوباً، می‌توان از «m» یا «u» (مثلاً «%mE») استفاده کرد تا خروجی زمان به‌ترتیب بر حسب میلی‌ثانیه یا میکروثانیه تولید شود.

اگر این پارامتر غیرصفر باشد، در صورتی که پس از صدور اعلان (prompt) فرمانی ظرف تعداد ثانیه‌های مشخص‌شده وارد نشود، شل یک سیگنال ALRM دریافت خواهد کرد. اگر یک تله (trap) روی SIGALRM تنظیم شده باشد، اجرا می‌شود و پس از اجرای تله، یک هشدار جدید با استفاده از مقدار پارامتر TMOUT زمان‌بندی خواهد شد. اگر تله‌ای تنظیم نشده باشد، و مدت‌زمان بیکاری ترمینال کمتر از مقدار پارامتر TMOUT نباشد، zsh خاتمه می‌یابد. در غیر این صورت، یک هشدار جدید برای TMOUT ثانیه پس از آخرین فشردن کلید زمان‌بندی می‌شود.
پیشوند مسیر نامی که شل برای تمام فایل‌های موقت استفاده خواهد کرد. توجه داشته باشید که این پیشوند علاوه بر هر نام دایرکتوری، باید بخش آغازین نام فایل را نیز شامل شود. مقدار پیش‌فرض «/tmp/zsh» است.
پسوند نام فایلی که شل برای فایل‌های موقت ایجاد شده توسط جایگزینی فرایند (برای نمونه، «=(list)») استفاده خواهد کرد. توجه داشته باشید در صورتی که قصد دارید مقدار به عنوان پسوند فایل تفسیر شود، باید شامل یک نقطهٔ آغازین «.» باشد. مقدار پیش‌فرض این است که هیچ پسوندی اضافه نشود، بنابراین این پارامتر باید تنها در صورت نیاز مقداردهی شده و سپس دوباره لغو شود (unset).
فهرستی از نویسه‌های غیرحرفی-عددی که ویرایشگر خط آن‌ها را بخشی از یک کلمه در نظر می‌گیرد.
در صورت تنظیم بودن، رشته‌ای از نویسه‌ها را تعیین می‌کند که می‌تواند از تمام کدهای مشابه دستور bindkey به‌طوری که در مدخل پودمان zsh/zle در zshmodules(1) توصیف شده استفاده کند، و به جای بوق زدن به ترمینال فرستاده خواهد شد. این ممکن است به جای اثر شنیداری، جلوهٔ دیداری داشته باشد؛ برای نمونه، رشتهٔ «\e[?5h\e[?5l» روی یک vt100 یا xterm اثری معادل چشمک زدن تصویر معکوس (روشن و خاموش شدن reverse video) خواهد داشت (اگر معمولاً از تصویر معکوس استفاده می‌کنید، باید در عوض از رشتهٔ «\e[?5l\e[?5h» استفاده کنید). این تنظیم بر گزینهٔ NOBEEP تقدم دارد.
دایرکتوری جستجو برای فایل‌های راه‌اندازی شل (.zshrc و غیره)، در صورتی که دایرکتوری $HOME نباشد.
بسیاری از شبیه‌سازهای ترمینال قابلیتی دارند که به برنامه‌ها امکان می‌دهد زمانی را که متن به جای تایپ عادی، در ترمینال جای‌گذاری (paste) می‌شود، شناسایی کنند. برای ZLE، این بدان معناست که نویسه‌های خاص مانند تب‌ها و خطوط جدید می‌توانند به‌جای فراخوانی دستورهای ویرایشگر درج شوند. علاوه بر این، متن چسبانده‌شده یک رویداد واگرد (undo) تکی تشکیل می‌دهد و اگر ناحیه (region) فعال باشد، متن جای‌گذاری‌شده جایگزین ناحیه خواهد شد.

این آرایهٔ دو عنصری حاوی توالی‌های گریز (escape sequences) ترمینال برای فعال‌سازی و غیرفعال‌سازی این ویژگی است. این توالی‌های گریز برای فعال کردن جای‌گذاری قلاب‌دار (bracketed paste) هنگام فعال بودن ZLE و غیرفعال کردن آن در سایر زمان‌ها استفاده می‌شوند. لغو مقدار این پارامتر (unset) این اثر را دارد که تضمین می‌کند bracketed paste غیرفعال باقی بماند.

آرایه‌ای که زمینه‌هایی را توصیف می‌کند که ZLE باید در آن‌ها متن ورودی را برجسته‌سازی کند. بخش Character Highlighting در zshzle(1) را ببینید.
این پارامتر هنگام رخ دادن خطا توسط ویرایشگر خط تنظیم می‌شود. این پارامتر حاوی خطی است که در زمان وقوع خطا در حال ویرایش بوده است. می‌توان از «print -zr -- $ZLE_LINE_ABORTED» برای بازیابی خط استفاده کرد. تنها تازه‌ترین خط از این نوع به خاطر سپرده می‌شود.
ZLE_REMOVE_SUFFIX_CHARS
ZLE_SPACE_SUFFIX_CHARS
این پارامترها توسط ویرایشگر خط استفاده می‌شوند. در شرایط خاص، پسوندهایی (معمولاً فاصله یا ممیز) که توسط سیستم تکمیل اضافه شده‌اند، به طور خودکار حذف خواهند شد؛ خواه به این دلیل که دستور ویرایشی بعدی یک نویسهٔ قابل درج نبوده، یا به این دلیل که آن نویسه به عنوان نیازمند حذف پسوند علامت‌گذاری شده باشد.

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

اگر ZLE_REMOVE_SUFFIX_CHARS تنظیم نشده باشد، رفتار پیش‌فرض معادل زیر است:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

اگر ZLE_REMOVE_SUFFIX_CHARS تنظیم شده باشد اما خالی باشد، هیچ نویسه‌ای این رفتار را نخواهد داشت. ZLE_SPACE_SUFFIX_CHARS تقدم دارد، به‌طوری که عبارت زیر:

ZLE_SPACE_SUFFIX_CHARS=$'&|'

باعث می‌شود نویسه‌های «&» و «|» پسوند را حذف کنند اما آن را با یک فاصله جایگزین نمایند.

برای نشان دادن تفاوت، فرض کنید گزینهٔ AUTO_REMOVE_SLASH فعال است و دایرکتوری DIR به تازگی همراه با یک / در انتها تکمیل شده است، و پس از آن کاربر «&» را تایپ می‌کند. نتیجهٔ پیش‌فرض «DIR&» است. در صورتی که ZLE_REMOVE_SUFFIX_CHARS تنظیم شده باشد اما شامل «&» نباشد، نتیجه «DIR/&» خواهد بود. با تنظیم ZLE_SPACE_SUFFIX_CHARS به‌گونه‌ای که شامل «&» باشد، نتیجه «DIR &» خواهد بود.

توجه داشته باشید که برخی از تکمیل‌ها ممکن است رفتار حذف یا جایگزینی پسوند ویژهٔ خود را ارائه دهند که بر مقادیر توصیف‌شده در اینجا برتری می‌یابد. مستندات سیستم تکمیل را در zshcompsys(1) ببینید.

در صورت تنظیم بودن، برای تعیین تورفتگی (فاصله) بین سمت راست اعلان سمت راست در ویرایشگر خط (به‌گونه‌ای که توسط RPS1 یا RPROMPT تعیین شده) و لبهٔ سمت راست صفحه نمایش استفاده می‌شود. اگر تنظیم نشده باشد، مقدار 1 استفاده می‌شود.

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

July 12, 2026 zsh 5.9.2