Scroll to navigation

BASH(1) General Commands Manual BASH(1)

الاسم

bash - صدفة جنو بورن-أغين (Bourne-Again SHell)

موجز

bash [خيارات] [سلسلة_أوامر | ملف]

حقوق النسخ

Bash is Copyright (C) 1989-2022 by the Free Software Foundation, Inc.

الوصف

Bash هي مفسر لغة أوامر متوافق مع sh ينفذ الأوامر المقروءة من المدخلات القياسية أو من ملف. وتتضمن Bash أيضاً ميزات مفيدة من صدفتي Korn و C (ksh و csh).

يُقصد من Bash أن تكون تنفيذاً مطابقاً لجزء الصدفة والأدوات المساعدة من مواصفات IEEE POSIX (معيار IEEE 1003.1). ويمكن ضبط Bash لتكون مطابقة لـ POSIX مبدئياً.

الخيارات

يمكن استخدام كافة خيارات الصدفة أحادية المحرف الموثقة في وصف أمر set المدمج، بما في ذلك -o، كخيارات عند استدعاء الصدفة. بالإضافة إلى ذلك، يفسر bash الخيارات التالية عند استدعائه:

إذا وُجد الخيار -c، تُقرأ الأوامر من أول معامل ليس خياراً command_string. إذا وُجدت معاملات بعد command_string، يُسند المعامل الأول إلى $0 وتُسند بقية المعاملات إلى المعاملات الموضعية. التعيين لـ $0 يضبط اسم الصدفة، والذي يُستخدم في رسائل التحذير والخطأ.
إذا وُجد الخيار -i، تكون الصدفة تفاعلية.
جعل bash يتصرف كما لو أنه استُدعي كصدفة ولوج (انظر الاستدعاء أدناه).
إذا وُجد الخيار -r، تصبح الصدفة مقيدة (انظر الصدفة المقيدة أدناه).
إذا وُجد الخيار -s، أو لم تبقَ أي معاملات بعد معالجة الخيارات، فتُقرأ الأوامر من المدخلات القياسية. يسمح هذا الخيار بتعيين المعاملات الموضعية عند استدعاء صدفة تفاعلية أو عند قراءة المدخلات عبر أنبوب.
اطبع أسطر مدخلات الصدفة فور قراءتها.
طباعة الأوامر ومعاملاتها أثناء تنفيذها.
تُطبع قائمة بجميع السلاسل المقتبسة اقتباساً مزدوجاً والمسبوقة بـ $ على المخرجات القياسية. هذه هي السلاسل الخاضعة للترجمة اللغوية عندما لا تكون المحلية الحالية هي C أو POSIX. يتضمن هذا الخيار -n؛ ولن تُنفذ أي أوامر.
[-+]O [shopt_option]
shopt_option هو أحد خيارات الصدفة التي يقبلها الأمر المدمج shopt (انظر أوامر الصدفة المدمجة أدناه). إذا وُجد shopt_option، فإن -O يعين قيمة ذلك الخيار؛ و +O يلغي تعيينه. إذا لم يُقدم shopt_option، تُطبع أسماء وقيم خيارات الصدفة التي يقبلها shopt على المخرجات القياسية. إذا كان خيار الاستدعاء هو +O، تُعرض المخرجات بتنسيق يمكن إعادة استخدامه كمدخلات.
--
تشير -- إلى نهاية الخيارات وتعطل المزيد من معالجة الخيارات. وتُعامل أي معاملات بعد -- كأسماء ملفات ومعاملات. ومعامل - يكافئ --.

يفسر Bash أيضاً عدداً من الخيارات متعددة المحارف. يجب أن تظهر هذه الخيارات على سطر الأوامر قبل الخيارات أحادية المحرف ليُتعرف عليها.

الترتيب لتنفيذ تشكيلة المنقح قبل بدء الصدفة. يُفعل نمط التنقيح الموسع (انظر وصف خيار extdebug لأمر shopt المدمج أدناه).
مكافئ لـ -D، ولكن المخرجات تكون بتنسيق ملف GNU gettext po (portable object).
يعادل -D.
اعرض رسالة الاستخدام على الخرج القياسي واخرج بنجاح.
تنفيذ الأوامر من file بدلاً من ملف تهيئة النظام /etc/bash.bashrc وملف التهيئة الشخصي القياسي ~/.bashrc إذا كانت الصدفة تفاعلية (انظر استدعاء أدناه).
يكافئ -l.
لا تستخدم مكتبة GNU readline لقراءة أسطر الأوامر عندما تكون الصدفة تفاعلية.
Do not read either the system-wide startup file /etc/profile or any of the personal initialization files ~/.bash_profile, ~/.bash_login, or ~/.profile. By default, bash reads these files when it is invoked as a login shell (see INVOCATION below).
عدم قراءة وتنفيذ ملف تهيئة النظام /etc/bash.bashrc وملف التهيئة الشخصي ~/.bashrc إذا كانت الصدفة تفاعلية. يكون هذا الخيار مفعلاً مبدئياً إذا استُدعيت الصدفة باسم sh.
تغيير سلوك bash عندما يختلف التشغيل المبدئي عن معيار POSIX ليطابق المعيار (وضع posix). انظر انظر أيضاً أدناه للحصول على مرجع لوثيقة تفصل كيف يؤثر وضع posix على سلوك bash.
تصبح الصدفة مقيدة (انظر الصدفة المقيدة أدناه).
يعادل -v.
اعرض معلومات الإصدار لنسخة bash هذه على الخرج القياسي واخرج بنجاح.

المعطيات

إذا تبقىت وسائط بعد معالجة الخيارات، ولم يُمرر أي من الخيارين -c أو -s، يُفترض أن الوسيط الأول هو اسم ملف يحتوي على أوامر صدفة. إذا استُدعي bash بهذا الأسلوب، يُضبط $0 على اسم الملف، وتُضبط المعلمات الموضعية على الوسائط المتبقية. يقرأ bash الأوامر من هذا الملف وينفذها، ثم يخرج. حالة خروج bash هي حالة خروج آخر أمر نُفذ في السكربت. إذا لم تُنفذ أي أوامر، تكون حالة الخروج 0. تُجرى محاولة أولى لفتح الملف في الدليل الحالي، وإذا لم يُعثر على أي ملف، تبحث الصدفة في الأدلة الموجودة في PATH عن السكربت.

الاستدعاء

صدفة الولوج هي التي يكون المحرف الأول من معاملها رقم صفر هو -، أو التي بدأت بخيار --login.

الصدفة التفاعلية هي صدفة تبدأ بدون وسائط غير خيارية (ما لم يُحدد -s) وبدون الخيار -c، ويكون مدخلها القياسي ومخرج خطئها القياسي متصلين بمحطات طرفية (كما يحدده isatty(3))، أو التي تبدأ بالخيار -i. يُضبط PS1 ويتضمن $- الحرف i إذا كان bash تفاعليًا، مما يسمح لسكربت صدفة أو ملف بدء تشغيل باختبار هذه الحالة.

تصف الفقرات التالية كيف ينفذ bash ملفات بدء التشغيل الخاصة به. إذا وُجد أي من الملفات وتعذرت قراءته، يبلغ bash عن خطأ. تُوسع علامات المدة (Tildes) في أسماء الملفات كما هو موضح أدناه في قسم توسيع علامة المدة في قسم التوسع.

عند استدعاء bash كصدفة ولوج تفاعلية، أو كصدفة غير تفاعلية مع الخيار --login، يقرأ أولاً الأوامر وينفذها من الملف /etc/profile، إذا كان هذا الملف موجودًا. بعد قراءة ذلك الملف، يبحث عن ~/.bash_profile، و ~/.bash_login، و ~/.profile، بهذا الترتيب، ويقرأ الأوامر وينفذها من أول ملف موجود وقابل للقراءة. يمكن استخدام الخيار --noprofile عند بدء الصدفة لمنع هذا السلوك.

عندما تخرج صدفة ولوج تفاعلية، أو عندما تنفذ صدفة ولوج غير تفاعلية الأمر المدمج exit، يقرأ bash الأوامر وينفذها من الملف ~/.bash_logout، إذا كان موجودًا.

عند بدء تشغيل صدفة تفاعلية ليست صدفة ولوج، يقرأ bash الأوامر وينفذها من /etc/bash.bashrc و ~/.bashrc، إذا كانت هذه الملفات موجودة. يمكن منع ذلك باستخدام الخيار --norc. سيجبر الخيار --rcfile file الصدفة bash على قراءة الأوامر وتنفيذها من file بدلاً من /etc/bash.bashrc و ~/.bashrc.

عند بدء bash بشكل غير تفاعلي، لتشغيل سكربت صدفة مثلاً، فإنه يبحث عن المتغير BASH_ENV في البيئة، ويوسع قيمته إذا ظهرت هناك، ويستخدم القيمة الموسعة كاسم ملف لقراءته وتنفيذه. يتصرف bash كما لو نُفذ الأمر التالي:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

ولكن لا تُستخدم قيمة المتغير PATH للبحث عن اسم الملف.

إذا استُدعي bash باسم sh، فإنه يحاول محاكاة سلوك بدء التشغيل للإصدارات التاريخية من sh قدر الإمكان، مع الالتزام بمعيار POSIX أيضًا. عند استدعائه كصدفة ولوج تفاعلية، أو صدفة غير تفاعلية مع الخيار --login، فإنه يحاول أولاً قراءة الأوامر وتنفيذها من /etc/profile و ~/.profile، بهذا الترتيب. يمكن استخدام الخيار --noprofile لمنع هذا السلوك. عند استدعائه كصدفة تفاعلية باسم sh، يبحث bash عن المتغير ENV، ويوسع قيمته إذا كان معرفًا، ويستخدم القيمة الموسعة كاسم لملف للقراءة والتنفيذ. بما أن الصدفة المستدعاة كـ sh لا تحاول قراءة أوامر من أي ملفات بدء تشغيل أخرى، فليس للخيار --rcfile أي تأثير. الصدفة غير التفاعلية المستدعاة باسم sh لا تحاول قراءة أي ملفات بدء تشغيل أخرى. عند استدعائه كـ sh، يدخل bash في وضع posix بعد قراءة ملفات بدء التشغيل.

عند بدء تشغيل bash في وضع posix، كما هو الحال مع خيار سطر الأوامر --posix، فإنه يتبع معيار POSIX لملفات بدء التشغيل. في هذا الوضع، تقوم الصدفات التفاعلية بتوسيع المتغير ENV وتُقرأ الأوامر وتُنفذ من الملف الذي يكون اسمه هو القيمة الموسعة. لا تُقرأ أي ملفات بدء تشغيل أخرى.

يحاول bash تحديد متى يتم تشغيله مع توصيل دخله القياسي باتصال شبكة، كما هو الحال عند تنفيذه بواسطة عفريت الصدفة البعيدة التاريخي، عادة rshd، أو عفريت الصدفة الآمنة sshd. إذا قرر bash أنه يتم تشغيله بشكل غير تفاعلي بهذا الأسلوب، فإنه يقرأ الأوامر وينفذها من /etc/bash.bashrc و ~/.bashrc، إذا كانت هذه الملفات موجودة وقابلة للقراءة. لن يفعل ذلك إذا استُدعي كـ sh. يمكن استخدام الخيار --norc لمنع هذا السلوك، ويمكن استخدام الخيار --rcfile لإجبار قراءة ملف آخر، ولكن لا rshd ولا sshd يستدعيان الصدفة عمومًا بتلك الخيارات أو يسمحان بتحديدها.

إذا بدأت الصدفة مع معرف مستخدم (أو مجموعة) فعلي لا يساوي معرف المستخدم (أو المجموعة) الحقيقي، ولم يُزود الخيار -p، فلا تُقرأ أي ملفات بدء تشغيل، ولا تُورث وظائف الصدفة من البيئة، وتُتجاهل المتغيرات SHELLOPTS، و BASHOPTS، و CDPATH، و GLOBIGNORE إذا ظهرت في البيئة، ويُضبط معرف المستخدم الفعلي ليكون هو معرف المستخدم الحقيقي. إذا زُوِّد الخيار -p عند الاستدعاء، يكون سلوك بدء التشغيل هو نفسه، ولكن لا يُعاد ضبط معرف المستخدم الفعلي.

تعريفات

تُستخدم التعريفات التالية في بقية هذا المستند.

فراغ (blank)
مسافة أو علامة جدولة (tab).
كلمة (word)
تسلسل من المحارف التي تعتبرها الصدفة وحدة واحدة. تُعرف أيضاً باسم علامة (token).
كلمة تتكون فقط من محارف أبجدية رقمية وشرطات سفلية، وتبدأ بمحرف أبجدي أو بشرطة سفلية. يُشار إليها أيضاً باسم معرف (identifier).
محرف واصف (metacharacter)
محرف، عندما لا يكون محاطاً بعلامات اقتباس، يفصل بين الكلمات. وهو أحد المحارف التالية:

| & ; ( ) < > space tab newline

عامل تحكم (control operator)
علامة (token) تؤدي وظيفة تحكم. وهي أحد الرموز التالية:

|| & && ; ;; ;& ;;& ( ) | |& <newline>

الكلمات المحجوزة

الكلمات المحجوزة هي كلمات لها معنى خاص للصدفة. يُتعرف على الكلمات التالية كمحجوزة عندما لا تكون محاطة باقتباس وتكون إما الكلمة الأولى في أمر (انظر قواعد الصدفة أدناه)، أو الكلمة الثالثة في أمر case أو select (تصلح in فقط)، أو الكلمة الثالثة في أمر for (تصلح in و do فقط):

! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]

قواعد الصدفة

يصف هذا القسم بناء الجملة لمختلف أشكال أوامر الصدفة.

الأوامر البسيطة

الأمر البسيط هو تسلسل من تعيينات اختيارية لمتغيرات تليها كلمات مفصولة بـ فراغ وإعادة توجيه، وينتهي بـ عامل تحكم. تحدد الكلمة الأولى الأمر المراد تنفيذه، وتُمرر كمعامل رقم صفر. تُمرر الكلمات المتبقية كمعاملات للأمر المستدعى.

قيمة الإرجاع لـ أمر بسيط هي حالة خروجه، أو 128+n إذا أُنهي الأمر بواسطة الإشارة n.

الأنابيب (Pipelines)

الأنبوب هو تسلسل من أمر واحد أو أكثر يفصل بينها أحد عاملي التحكم | أو |&. تنسيق الأنبوب هو:

[time [-p]] [ ! ] command1 [ [||&] command2 ... ]

يتم توصيل المخرج القياسي لـ command1 عبر أنبوب بالمدخل القياسي لـ command2. يُجرى هذا الاتصال قبل أي عمليات إعادة توجيه يحددها command1 (انظر REDIRECTION أدناه). إذا استُخدم |&، فإن خطأ command1 القياسي، بالإضافة إلى مخرجه القياسي، يتم توصيله بالمدخل القياسي لـ command2 عبر الأنبوب؛ وهو اختصار لـ 2>&1 |. يُجرى إعادة التوجيه الضمني لخطأ المعياري إلى المخرج القياسي بعد أي عمليات إعادة توجيه يحددها command1.

حالة العودة للأنبوب البرمجي هي حالة الخروج لآخر أمر، ما لم يتم تمكين خيار pipefail. إذا تم تمكين pipefail، فإن حالة عودة الأنبوب البرمجي هي قيمة آخر أمر (في أقصى اليمين) يخرج بحالة غير صفرية، أو صفر إذا خرجت جميع الأوامر بنجاح. إذا سبقت الكلمة المحجوزة ! أنبوبًا برمجيًا، فإن حالة خروج ذلك الأنبوب هي النفي المنطقي لحالة الخروج كما هو موضح أعلاه. تنتظر الصدفة جميع الأوامر في الأنبوب البرمجي لتنتهي قبل إرجاع قيمة.

إذا سبقت الكلمة المحجوزة time أنبوبًا برمجيًا، يتم الإبلاغ عن الوقت المنقضي بالإضافة إلى وقت المستخدم والنظام المستهلك في تنفيذه عند انتهاء الأنبوب البرمجي. يغير الخيار -p تنسيق المخرجات إلى التنسيق المحدد بواسطة POSIX. عندما تكون الصدفة في وضع posix mode، فإنها لا تتعرف على time ككلمة محجوزة إذا بدأت الرمز التالي بـ '-'. يمكن ضبط المتغير TIMEFORMAT على سلسلة تنسيق تحدد كيفية عرض معلومات التوقيت؛ انظر وصف TIMEFORMAT تحت Shell Variables أدناه.

عندما تكون الصدفة في وضع posix mode، قد يتبع time سطر جديد. في هذه الحالة، تعرض الصدفة إجمالي وقت المستخدم والنظام المستهلك بواسطة الصدفة وعملياتها التابعة. يمكن استخدام المتغير TIMEFORMAT لتحديد تنسيق معلومات الوقت.

كل أمر في أنبوب برمجي متعدد الأوامر، حيث تُنشأ الأنابيب، يُنفذ في صدفة فرعية (subshell)، وهي عملية منفصلة. انظر COMMAND EXECUTION ENVIRONMENT للحصول على وصف للصدفات الفرعية وبيئة الصدفة الفرعية. إذا تم تمكين الخيار lastpipe باستخدام الأمر المدمج shopt (انظر وصف shopt أدناه)، فقد يُشغل العنصر الأخير من الأنبوب البرمجي بواسطة عملية الصدفة عندما لا يكون التحكم في الوظائف نشطًا.

قوائم

القائمة هي تسلسل من أنبوب واحد أو أكثر يفصل بينها أحد العوامل ;، أو &، أو &&، أو ||، وتنتهي اختيارياً بـ ;، أو &، أو <سطر_جديد>.

من بين عوامل القائمة هذه، يتمتع && و || بأولوية متساوية، يليهما ; و &، واللذان يتمتعان أيضاً بأولوية متساوية.

قد يظهر تسلسل من سطر جديد واحد أو أكثر في قائمة بدلاً من الفاصلة المنقوطة لترسيم الأوامر.

إذا أُنهي أمر بعامل التحكم &، تنفذ الصدفة الأمر في الخلفية في صدفة فرعية. لا تنتظر الصدفة انتهاء الأمر، وتكون حالة الإرجاع 0. يُشار إليها باسم الأوامر غير المتزامنة. تُنفذ الأوامر المفصولة بـ ; بشكل متسلسل؛ حيث تنتظر الصدفة انتهاء كل أمر بدوره. حالة الإرجاع هي حالة خروج آخر أمر نُفذ.

قوائم AND و OR هي تسلسلات من أنبوب واحد أو أكثر تفصل بينها عوامل التحكم && و || على التوالي. تُنفذ قوائم AND و OR بترابط من اليسار. تأخذ قائمة AND الشكل التالي

command1 && command2

يُنفيذ command2 إذا، وفقط إذا، أرجع command1 حالة خروج صفرية (نجاح).

تأخذ قائمة OR الشكل التالي

command1 || command2

يُنفيذ command2 إذا، وفقط إذا، أرجع command1 حالة خروج غير صفرية. حالة الإرجاع لقوائم AND و OR هي حالة خروج آخر أمر نُفذ في القائمة.

الأوامر المركبة

الأمر المركب هو أحد الأوامر التالية. في معظم الحالات، قد تُفصل قائمة في وصف الأمر عن بقية الأمر بسطر جديد واحد أو أكثر، وقد يتبعها سطر جديد بدلاً من الفاصلة المنقوطة.

(list)
تُنفيذ قائمة في صدفة فرعية (انظر بيئة تنفيذ الأوامر أدناه لوصف لبيئة الصدفة الفرعية). تعيينات المتغيرات والأوامر المدمجة التي تؤثر على بيئة الصدفة لا يظل مفعولها سارياً بعد اكتمال الأمر. حالة الإرجاع هي حالة خروج القائمة.
{ list; }
تُنفذ الlist ببساطة في بيئة الصدفة الحالية. يجب إنهاء الlist بسطر جديد أو فاصلة منقوطة. يُعرف هذا بـ أمر المجموعة. حالة العودة هي حالة خروج الlist. لاحظ أنه على عكس الرموز الميتا ( و )، فإن { و } هما كلمتان محجوزتان ويجب أن تظهرا حيث يُسمح بالتعرف على الكلمات المحجوزة. ولأنها لا تسبب كسرًا للكلمات، يجب فصلها عن الlist بمساحة بيضاء أو رمز ميتا آخر للصدفة.
((expression))
يتم تقييم الexpression وفقًا للقواعد الموضحة أدناه تحت ARITHMETIC EVALUATION. إذا كانت قيمة التعبير غير صفرية، تكون حالة العودة 0؛ وإلا تكون حالة العودة 1. يخضع الexpression لنفس التوسيعات كما لو كان داخل علامات اقتباس مزدوجة، ولكن لا تُعامل أحرف الاقتباس المزدوجة في الexpression معاملة خاصة وتُحذف.
[[ expression ]]
إرجاع حالة 0 أو 1 اعتمادًا على تقييم التعبير الشرطي expression. تتكون التعبيرات من الأساسيات الموضحة أدناه تحت CONDITIONAL EXPRESSIONS. لا تخضع الكلمات الموجودة بين [[ و ]] لتقسيم الكلمات وتوسيع اسم المسار. تجري الصدفة توسيع التلدة، وتوسيع المعلمات والمتغيرات، والتوسيع الحسابي، واستبدال الأوامر، واستبدال العمليات، وحذف الاقتباس من تلك الكلمات (التوسيعات التي قد تحدث لو كانت الكلمات محاطة بعلامات اقتباس مزدوجة). يجب أن تكون المعاملات الشرطية مثل -f غير مقتبسة ليتم التعرف عليها كأساسيات.

عند استخدامها مع [[، يقوم العاملان < و > بالفرز معجمياً باستخدام المحلية الحالية.

انظر وصف الأمر المدمج test (قسم SHELL BUILTIN COMMANDS أدناه) لمعرفة كيفية التعامل مع المعلمات (أي المعلمات المفقودة).

عند استخدام المعاملين == و !=، تُعتبر السلسلة الموجودة على يمين المعامل نمطًا وتتم مطابقتها وفقًا للقواعد الموضحة أدناه تحت Pattern Matching، كما لو كان خيار الصدفة extglob ممكناً. المعامل = يعادل ==. إذا تم تمكين خيار الصدفة nocasematch، تُجرى المطابقة دون اعتبار لحالة الأحرف الأبجدية. تكون قيمة العودة 0 إذا كانت السلسلة تطابق (==) أو لا تطابق (!=) النمط، و 1 بخلاف ذلك. يمكن اقتباس أي جزء من النمط لإجبار مطابقة الجزء المقتبس كسلسلة نصية.

يتوفر معامل ثنائي إضافي، =~، بنفس أسبقية == و !=. عند استخدامه، تُعتبر السلسلة التي على يمين المعامل تعبيرًا نمطيًا ممتدًا من POSIX وتتم مطابقتها وفقًا لذلك (باستخدام واجهات POSIX regcomp و regexec الموضحة عادةً في regex(3)). قيمة العودة هي 0 إذا طابقت السلسلة النمط، و 1 بخلاف ذلك. إذا كان التعبير النمطي غير صحيح من الناحية النحوية، تكون قيمة عودة التعبير الشرطي 2. إذا تم تمكين خيار الصدفة nocasematch، تُجرى المطابقة دون اعتبار لحالة الأحرف الأبجدية. إذا اقتُبس أي جزء من النمط، فستتم مطابقة الجزء المقتبس حرفيًا. هذا يعني أن كل حرف في الجزء المقتبس يطابق نفسه، بدلاً من أن يكون له أي معنى خاص بمطابقة الأنماط. إذا كان النمط مخزناً في متغير صدفة، فإن اقتباس توسيع المتغير يجبر مطابقة النمط بالكامل حرفيًا. تعامل مع تعبيرات الأقواس في التعبيرات النمطية بعناية، لأن أحرف الاقتباس والأنماط العادية تفقد معانيها بين الأقواس.

سيطابق النمط إذا طابق أي جزء من السلسلة. ثبت النمط باستخدام معاملي التعبير النمطي ^ و $ لإجباره على مطابقة السلسلة بأكملها. يسجل متغير المصفوفة BASH_REMATCH الأجزاء من السلسلة التي طابقت النمط. يحتوي عنصر BASH_REMATCH ذو الفهرس 0 على الجزء من السلسلة الذي يطابق التعبير النمطي بالكامل. السلاسل الفرعية التي تطابقها التعبيرات الفرعية الموجودة بين قوسين داخل التعبير النمطي تُحفظ في فهارس BASH_REMATCH المتبقية. العنصر ذو الفهرس n في BASH_REMATCH هو الجزء من السلسلة الذي يطابق التعبير الفرعي رقم n الموجود بين قوسين. يضبط Bash المتغير BASH_REMATCH في النطاق العام؛ وسيؤدي التصريح عنه كمتغير محلي إلى نتائج غير متوقعة.

يمكن دمج التعبيرات باستخدام العوامل التالية، مرتبة تنازلياً حسب الأولوية:

( expression )
يعيد قيمة التعبير. يمكن استخدام هذا لتجاوز الأولوية العادية للعوامل.
! expression
صحيح إذا كان التعبير خاطئاً.
صحيح إذا كان كل من expression1 و expression2 صحيحين.
صحيح إذا كان أي من expression1 أو expression2 صحيحاً.

لا يُقيم العاملان && و || التعبير expression2 إذا كانت قيمة expression1 كافية لتحديد قيمة الإرجاع للتعبير الشرطي بأكمله.

تُوسع قائمة الكلمات التي تلي in، مما يؤدي إلى إنشاء قائمة من العناصر. يُضبط المتغير name على كل عنصر من عناصر هذه القائمة بدورها، وتُنفذ الlist في كل مرة. إذا حُذفت in word، فإن الأمر for ينفذ الlist مرة واحدة لكل معلمة موضعية مضبوطة (انظر PARAMETERS أدناه). حالة العودة هي حالة الخروج لآخر أمر نُفذ. إذا أدى توسيع العناصر بعد in إلى قائمة فارغة، فلا تُنفذ أي أوامر، وتكون حالة العودة 0.
أولاً، يتم تقييم التعبير الحسابي expr1 وفقًا للقواعد الموضحة أدناه تحت ARITHMETIC EVALUATION. ثم يتم تقييم التعبير الحسابي expr2 بشكل متكرر حتى يتم تقييمه إلى صفر. في كل مرة يتم فيها تقييم expr2 إلى قيمة غير صفرية، تُنفذ الlist ويتم تقييم التعبير الحسابي expr3. إذا حُذف أي تعبير، فإنه يتصرف كما لو تم تقييمه إلى 1. قيمة العودة هي حالة خروج آخر أمر نُفذ في الlist، أو خطأ إذا كان أي من التعبيرات غير صالح.
تُوسع قائمة الكلمات التي تلي in، مما يولد قائمة من العناصر، وتُطبع مجموعة الكلمات الموسعة على مخرج الخطأ القياسي، مسبوقة كل منها برقم. إذا حُذفت الكلمة بعد in، تُطبع المعلمات الموضعية (انظر PARAMETERS أدناه). ثم يعرض select محث PS3 ويقرأ سطرًا من المدخل القياسي. إذا كان السطر يتكون من رقم مقابل لإحدى الكلمات المعروضة، فسيتم ضبط قيمة name على تلك الكلمة. إذا كان السطر فارغًا، تُعرض الكلمات والمحث مرة أخرى. إذا قُرئ EOF، ينتهي الأمر select ويعيد 1. أي قيمة أخرى تُقرأ تؤدي إلى ضبط name على قيمة فارغة. يتم حفظ السطر المقروء في المتغير REPLY. تُنفذ الlist بعد كل اختيار حتى يتم تنفيذ الأمر break. حالة خروج select هي حالة خروج آخر أمر نُفذ في الlist، أو صفر إذا لم تُنفذ أي أوامر.
يقوم الأمر case أولاً بتوسيع word، ويحاول مطابقتها مع كل pattern بالدور، باستخدام قواعد المطابقة الموضحة تحت Pattern Matching أدناه. يتم توسيع word باستخدام توسيع التلدة، وتوسيع المعلمات والمتغيرات، والتوسيع الحسابي، واستبدال الأوامر، واستبدال العمليات، وحذف الاقتباس. يتم توسيع كل pattern يُفحص باستخدام توسيع التلدة، وتوسيع المعلمات والمتغيرات، والتوسيع الحسابي، واستبدال الأوامر، واستبدال العمليات، وحذف الاقتباس. إذا تم تمكين خيار الصدفة nocasematch، تُجرى المطابقة دون اعتبار لحالة الأحرف الأبجدية. عند العثور على مطابقة، تُنفذ الlist المقابلة. إذا استُخدم المعامل ;;، فلن تُجرى أي محاولات مطابقة لاحقة بعد مطابقة النمط الأولى. يؤدي استخدام ;& بدلاً من ;; إلى استمرار التنفيذ مع الlist المرتبطة بمجموعة الأنماط التالية. يؤدي استخدام ;;& بدلاً من ;; إلى قيام الصدفة باختبار قائمة الأنماط التالية في العبارة، إن وجدت، وتنفيذ أي list مرتبطة عند نجاح المطابقة، مع الاستمرار في تنفيذ عبارة case كما لو أن قائمة الأنماط لم تتطابق. تكون حالة الخروج صفرًا إذا لم يتطابق أي نمط. وإلا، فهي حالة خروج آخر أمر نُفذ في الlist.
تُنفيذ if list. إذا كانت حالة خروجها صفراً، تُنفذ then list. خلاف ذلك، تُنفذ كل elif list بدورها، وإذا كانت حالة خروجها صفراً، تُنفذ then list المقابلة ويكتمل الأمر. خلاف ذلك، تُنفذ else list، إن وُجدت. حالة الخروج هي حالة خروج آخر أمر نُفذ، أو صفر إذا لم يختبر أي شرط كصحيح.
ينفذ أمر while القائمة list-2 بشكل مستمر طالما أن آخر أمر في القائمة list-1 يعيد حالة خروج صفرية. أمر until مطابق لأمر while، إلا أن الاختبار منفي: تُنفذ list-2 طالما أن آخر أمر في list-1 يعيد حالة خروج غير صفرية. حالة الخروج لأمري while و until هي حالة خروج آخر أمر نُفذ في list-2، أو صفر إذا لم يُنفذ أي منها.

العمليات الرديفة (Coprocesses)

العملية الرديفة هي أمر صدفة تسبقه الكلمة المحجوزة coproc. تُنفذ العملية الرديفة بشكل غير متزامن في صدفة فرعية، كما لو أن الأمر قد أُنهي بعامل التحكم &، مع إنشاء أنبوب ثنائي الاتجاه بين الصدفة المنفذة والعملية الرديفة.

بناء الجملة للعملية الرديفة هو:

coproc [الاسم] الأمر [إعادة_التوجيه]

ينشئ هذا عملية مشتركة تُسمى الاسم. قد يكون الأمر إما أمراً بسيطاً أو أمراً مركباً (انظر أعلاه). الاسم هو اسم متغير صدفة. إذا لم يُزود الاسم، فإن الاسم المبدئي هو COPROC.

الصيغة الموصى بها للاستخدام مع العملية المشتركة هي

coproc الاسم { الأمر [إعادة_التوجيه]; }

يوصى بهذا الشكل لأن الأوامر البسيطة تؤدي إلى تسمية العملية المشتركة دائمًا باسم COPROC، وهي أبسط في الاستخدام وأكثر اكتمالاً من الأوامر المركبة الأخرى.

إذا كان الأمر أمراً مركباً، يكون الاسم اختيارياً. تحدد الكلمة التي تلي coproc ما إذا كانت تلك الكلمة ستُفسر كاسم متغير: تُفسر على أنها الاسم إذا لم تكن كلمة محجوزة تقدم أمراً مركباً. إذا كان الأمر أمراً بسيطاً، فلا يُسمح بوجود الاسم؛ وذلك لتجنب الالتباس بين الاسم والكلمة الأولى من الأمر البسيط.

عند تنفيذ العملية المشتركة، تنشئ الصدفة متغيراً مصفوفاً (انظر المصفوفات أدناه) يُسمى الاسم في سياق الصدفة المنفذة. يُربط المخرج القياسي لـ الأمر عبر أنبوب بواصف ملف في الصدفة المنفذة، ويُعين واصف الملف هذا إلى الاسم[0]. ويُربط المدخل القياسي لـ الأمر عبر أنبوب بواصف ملف في الصدفة المنفذة، ويُعين واصف الملف هذا إلى الاسم[1]. يُنشأ هذا الأنبوب قبل أي عمليات إعادة توجيه يحددها الأمر (انظر إعادة_التوجيه أدناه). يمكن استخدام واصفات الملفات كوسائط لأوامر الصدفة وعمليات إعادة التوجيه باستخدام توسعات الكلمات القياسية. وباستثناء تلك التي أُنشئت لتنفيذ استبدال الأوامر والعمليات، لا تتوفر واصفات الملفات في الصدفات الفرعية.

معرف العملية (PID) للصدفة التي أُنشئت لتنفيذ العملية المشتركة متاح كقيمة للمتغير NAME_PID. يمكن استخدام الأمر المدمج wait للانتظار حتى تنتهي العملية المشتركة.

بما أن العملية المشتركة تُنشأ كأمر غير متزامن، فإن الأمر coproc يعود دائماً بالنجاح. حالة العودة للعملية المشتركة هي حالة الخروج لـ الأمر.

تعريفات وظائف الصدفة

وظيفة الصدفة هي كائن يُستدعى مثل أمر بسيط وينفذ أمراً مركباً مع مجموعة جديدة من المعاملات الموضعية. تُصرح وظائف الصدفة على النحو التالي:

اسم_الوظيفة () أمر-مركب [إعادة-توجيه]
يعرف هذا دالة باسم fname. الكلمة المحجوزة function اختيارية. إذا تم توفير الكلمة المحجوزة function، تكون الأقواس اختيارية. body الخاص بالدالة هو الأمر المركب compound-command (انظر Compound Commands أعلاه). عادة ما يكون هذا الأمر list من الأوامر بين { و }، ولكن يمكن أن يكون أي أمر مدرج تحت Compound Commands أعلاه. إذا استُخدمت الكلمة المحجوزة function ولم تُوفر الأقواس، يوصى باستخدام الأقواس المتعرجة. يُنفذ compound-command كلما تم تحديد fname كاسم لأمر بسيط. في وضع posix mode، يجب أن يكون fname اسم صدفة صالحًا ولا يجوز أن يكون اسمًا لأحد أوامر POSIX المدمجة الخاصة (special builtins). في الوضع المبدئي، يمكن أن يكون اسم الدالة أي كلمة صدفة غير مقتبسة لا تحتوي على $. يتم تنفيذ أي عمليات إعادة توجيه (انظر REDIRECTION أدناه) محددة عند تعريف الدالة عند تنفيذ الدالة. حالة الخروج لتعريف الدالة هي صفر ما لم يحدث خطأ نحوي أو كانت هناك دالة للقراءة فقط بنفس الاسم موجودة بالفعل. عند التنفيذ، تكون حالة خروج الدالة هي حالة خروج آخر أمر نُفذ في المتن. (انظر FUNCTIONS أدناه).

تعليقات

في صدفة غير تفاعلية، أو صدفة تفاعلية يكون فيها خيار interactive_comments للأمر المدمج shopt ممكناً (انظر SHELL BUILTIN COMMANDS أدناه)، تؤدي أي كلمة تبدأ بـ # إلى تجاهل تلك الكلمة وجميع الأحرف المتبقية في ذلك السطر. لا تسمح الصدفة التفاعلية بدون تمكين خيار interactive_comments بالتعليقات. يكون خيار interactive_comments نشطًا بشكل مبدئي في الصدفات التفاعلية.

الاقتباس

يُستخدم الاقتباس لإزالة المعنى الخاص لأحرف أو كلمات معينة بالنسبة للصدفة. يمكن استخدام الاقتباس لتعطيل المعاملة الخاصة للأحرف الخاصة، ولمنع التعرف على الكلمات المحجوزة ككلمات محجوزة، ولمنع توسيع المعاملات.

كل من الأحرف الوصفية المدرجة أعلاه تحت التعريفات له معنى خاص للصدفة ويجب اقتباسه إذا كان ليمثل نفسه.

عند استخدام تسهيلات توسيع تاريخ الأوامر (انظر توسيع التاريخ أدناه)، يجب اقتباس حرف توسيع التاريخ، وهو عادةً !، لمنع توسيع التاريخ.

هناك ثلاث آليات للاقتباس: escape character، وعلامات الاقتباس المفردة، وعلامات الاقتباس المزدوجة.

الشرطة المائلة الخلفية غير المقتبسة (\) هي الescape character. إنها تحفظ القيمة الحرفية للحرف التالي الذي يليها، باستثناء <newline>. إذا ظهر زوج \<newline>، ولم تكن الشرطة المائلة الخلفية مقتبسة في حد ذاتها، فإنه يُعامل كاستمرار للسطر (أي أنه يُحذف من دفق المدخلات ويُتجاهل فعليًا).

إحاطة الأحرف بعلامات اقتباس مفردة يحافظ على القيمة الحرفية لكل حرف داخل علامات الاقتباس. لا يجوز ظهور علامة اقتباس مفردة بين علامتي اقتباس مفردتين، حتى لو كانت مسبوقة بشرطة مائلة خلفية.

إحاطة الأحرف بعلامات اقتباس مزدوجة يحفظ القيمة الحرفية لجميع الأحرف داخل علامات الاقتباس، باستثناء $ و ` و \، وعند تمكين توسيع السجل (history expansion)، الحرف !. عندما تكون الصدفة في وضع posix mode، لا يكون لـ ! أي معنى خاص داخل علامات الاقتباس المزدوجة، حتى عند تمكين توسيع السجل. تحتفظ الأحرف $ و ` بمعناها الخاص داخل علامات الاقتباس المزدوجة. تحتفظ الشرطة المائلة الخلفية بمعناها الخاص فقط عندما يتبعها أحد الأحرف التالية: $، `، "، \، أو <newline>. يمكن اقتباس علامة اقتباس مزدوجة داخل علامات اقتباس مزدوجة بسبقها بشرطة مائلة خلفية. إذا تم تمكينه، سيُجرى توسيع السجل ما لم يتم الهروب من ! التي تظهر في علامات اقتباس مزدوجة باستخدام شرطة مائلة خلفية. لا تُحذف الشرطة المائلة الخلفية التي تسبق !.

المعاملات الخاصة * و @ لها معنى خاص عندما تكون داخل علامات اقتباس مزدوجة (انظر المعاملات أدناه).

تُعامل تسلسلات الأحرف التي تأخذ الشكل $'string' كبديل خاص لعلامات الاقتباس المفردة. يتوسع التسلسل إلى string، مع استبدال الأحرف المسبوقة بشرطة مائلة خلفية في string كما هو محدد في معيار ANSI C. يتم فك ترميز تسلسلات الهروب بالشرطة المائلة الخلفية، إذا وجدت، كما يلي:

تنبيه (جرس)
backspace
محرف هروب
تغذية الصفحة
سطر جديد
رجوع العربة
جدولة أفقية
علامة جدولة عمودية
\\
backslash
\'
علامة اقتباس مفردة
\"
علامة اقتباس مزدوجة
\?
علامة استفهام
حرف الثمانية بتات الذي قيمته هي القيمة الثمانية nnn (من رقم واحد إلى ثلاثة أرقام ثمانية)
حرف الثمانية بتات الذي قيمته هي القيمة الست عشرية HH (رقم واحد أو رقمان ست عشريان)
حرف يونيكود (ISO/IEC 10646) الذي قيمته هي القيمة الست عشرية HHHH (من رقم واحد إلى أربعة أرقام ست عشرية)
حرف يونيكود (ISO/IEC 10646) الذي قيمته هي القيمة الست عشرية HHHHHHHH (من رقم واحد إلى ثمانية أرقام ست عشرية)
حرف تحكم-x

توضع النتيجة الموسعة بين علامتي اقتباس مفردتين، كما لو أن علامة الدولار لم تكن موجودة.

سلسلة مقتبسة باقتباس مزدوج مسبوقة بعلامة دولار ($"string") ستؤدي إلى ترجمة السلسلة وفقًا للمحلية الحالية. تقوم البنية التحتية gettext بعملية البحث والترجمة، باستخدام متغيرات الصدفة LC_MESSAGES و TEXTDOMAINDIR و TEXTDOMAIN. إذا كانت المحلية الحالية هي C أو POSIX، أو إذا لم تكن هناك ترجمات متاحة، أو إذا لم تترجم السلسلة، يتم تجاهل علامة الدولار. هذا شكل من أشكال الاقتباس المزدوج، لذا تظل السلسلة مقتبسة باقتباس مزدوج مبدئياً، سواء تُرجمت واستُبدلت أم لا. إذا تم تمكين خيار noexpand_translation باستخدام الأمر المدمج shopt، فستُقتبس السلاسل المترجمة باقتباس مفرد بدلاً من الاقتباس المزدوج. انظر وصف shopt أدناه تحت SHELLBUILTINCOMMANDS.

المعاملات

المعلمة هي كيان يخزن القيم. يمكن أن تكون name أو رقمًا أو أحد الأحرف الخاصة المدرجة أدناه تحت Special Parameters. المتغير هو معلمة يُشار إليها بـ name. للمتغير value وصفر أو أكثر من الattributes. تُعين السمات باستخدام الأمر المدمج declare (انظر declare أدناه في SHELL BUILTIN COMMANDS).

يُعتبر المعامل مُعيناً إذا خُصصت له قيمة. السلسلة الفارغة هي قيمة صالحة. بمجرد تعيين متغير، لا يمكن إلغاء تعيينه إلا باستخدام الأمر المدمج unset (انظر أوامر الصدفة المدمجة أدناه).

يمكن التعيين لمتغير بواسطة عبارة على الشكل

الاسم=[القيمة]

إذا لم تُعط value، يتم تعيين السلسلة الفارغة للمتغير. تخضع جميع الvalues لتوسيع التلدة، وتوسيع المعلمات والمتغيرات، واستبدال الأوامر، والتوسيع الحسابي، وحذف الاقتباس (انظر EXPANSION أدناه). إذا كان للمتغير سمة integer مضبوطة، يتم تقييم value كتعبير حسابي حتى لو لم يُستخدم توسيع $((...)) (انظر Arithmetic Expansion أدناه). لا يتم تقسيم الكلمات وتوسيع اسم المسار. قد تظهر عبارات التعيين أيضًا كوسائط للأوامر المدمجة alias و declare و typeset و export و readonly و local (أوامر التصريح). عندما تكون في وضع posix mode، قد تظهر هذه الأوامر المدمجة في أمر بعد واحد أو أكثر من حالات الأمر المدمج command وتحتفظ بخصائص عبارة التعيين هذه.

في السياق الذي تقوم فيه عبارة تعيين بتعيين قيمة لمتغير صدفة أو فهرس مصفوفة، يمكن استخدام المعامل += للإلحاق بقيمة المتغير السابقة أو الإضافة إليها. يشمل ذلك وسائط الأوامر المدمجة مثل declare التي تقبل عبارات التعيين (أوامر التصريح). عندما يتم تطبيق += على متغير تم ضبط سمة integer له، يتم تقييم value كتعبير حسابي وتُضاف إلى قيمة المتغير الحالية، والتي يتم تقييمها أيضًا. عندما يتم تطبيق += على متغير مصفوفة باستخدام تعيين مركب (انظر Arrays أدناه)، لا تُلغى قيمة المتغير (كما هو الحال عند استخدام =)، وتُلحق قيم جديدة بالمصفوفة بدءًا من قيمة أكبر بواحد من أقصى فهرس للمصفوفة (للمصفوفات المفهرسة) أو تُضاف كأزواج مفتاح-قيمة إضافية في مصفوفة ترابطية. عند تطبيقه على متغير ذو قيمة نصية، يتم توسيع value وإلحاقها بقيمة المتغير.

يمكن تعيين سمة nameref لمتغير باستخدام خيار -n للأوامر المدمجة declare أو local (انظر أوصاف declare و local أدناه) لإنشاء مرجع اسم، أو مرجع لمتغير آخر. يتيح ذلك التلاعب بالمتغيرات بشكل غير مباشر. كلما تمت الإشارة إلى متغير مرجع الاسم، أو التعيين له، أو إلغاء تعيينه، أو تعديل سماته (بخلاف استخدام أو تغيير سمة nameref نفسها)، تُنفذ العملية فعلياً على المتغير المحدد بواسطة قيمة متغير مرجع الاسم. يشيع استخدام مرجع الاسم داخل وظائف الصدفة للإشارة إلى متغير مُرر اسمه كوسيط للوظيفة. على سبيل المثال، إذا مُرر اسم متغير إلى وظيفة صدفة كوسيط أول لها، فإن تشغيل

declare -n ref=$1

داخل الدالة ينشئ متغير مرجع اسم (nameref) باسم ref قيمته هي اسم المتغير الممرر كوسيط أول. تُعامل المراجعة والتعيينات لـ ref، والتغييرات في سماته، كمراجعات وتعيينات وتعديلات للسمات للمتغير الذي تم تمرير اسمه كـ $1. إذا كان متغير التحكم في حلقة for لديه سمة مرجع الاسم، فيمكن أن تكون قائمة الكلمات قائمة بمتغيرات الصدفة، وسيتم إنشاء مرجع اسم لكل كلمة في القائمة، بالدور، عند تنفيذ الحلقة. لا يمكن إعطاء متغيرات المصفوفة سمة nameref. ومع ذلك، يمكن لمتغيرات مرجع الاسم الإشارة إلى متغيرات المصفوفة ومتغيرات المصفوفة المفهرسة. يمكن إلغاء تعيين مراجع الأسماء باستخدام الخيار -n للأمر المدمج unset. وخلاف ذلك، إذا تم تنفيذ unset مع اسم متغير مرجع اسم كوسيط، فسيتم إلغاء تعيين المتغير الذي يشير إليه متغير مرجع الاسم.

المعاملات الموضعية

المعامل الموضعي هو معامل يُشار إليه برقم واحد أو أكثر، بخلاف الرقم المنفرد 0. تُعين المعاملات الموضعية من وسائط الصدفة عند استدعائها، وقد يُعاد تعيينها باستخدام الأمر المدمج set. لا يجوز التعيين للمعاملات الموضعية باستخدام جمل التعيين. تُستبدل المعاملات الموضعية مؤقتاً عند تنفيذ وظيفة صدفة (انظر الوظائف أدناه).

عند توسيع معلمة موضعية تتكون من أكثر من رقم واحد، يجب إحاطتها بأقواس متعرجة (انظر EXPANSION أدناه).

المعاملات الخاصة

تعامل الصدفة عدة معلمات بشكل خاص. لا يجوز إلا الرجوع إلى هذه المعلمات؛ ولا يُسمح بالتعيين لها.

*
يتوسع إلى المعلمات الموضعية، بدءًا من المعلمة الأولى. عندما لا يكون التوسيع داخل علامات اقتباس مزدوجة، تتوسع كل معلمة موضعية إلى كلمة منفصلة. في السياقات التي يتم فيها ذلك، تخضع تلك الكلمات لمزيد من تقسيم الكلمات وتوسيع اسم المسار. عندما يحدث التوسيع داخل علامات اقتباس مزدوجة، فإنه يتوسع إلى كلمة واحدة مع فصل قيمة كل معلمة بالحرف الأول من المتغير الخاص IFS. أي أن "$*" تعادل "$1c$2c..."، حيث c هو الحرف الأول من قيمة المتغير IFS. إذا كان IFS غير معين، يتم فصل المعلمات بمسافات. إذا كان IFS فارغًا، يتم ضم المعلمات دون فواصل بينها.
@
يتوسع إلى المعلمات الموضعية، بدءًا من المعلمة الأولى. في السياقات التي يتم فيها تقسيم الكلمات، يوسع هذا كل معلمة موضعية إلى كلمة منفصلة؛ وإذا لم تكن داخل علامات اقتباس مزدوجة، تخضع هذه الكلمات لتقسيم الكلمات. في السياقات التي لا يتم فيها تقسيم الكلمات، يتوسع هذا إلى كلمة واحدة مع فصل كل معلمة موضعية بمسافة. عندما يحدث التوسيع داخل علامات اقتباس مزدوجة، تتوسع كل معلمة إلى كلمة منفصلة. أي أن "$@" تعادل "$1" "$2" ... إذا حدث التوسيع المقتبس داخل علامة اقتباس مزدوجة داخل كلمة، يتم ضم توسيع المعلمة الأولى مع الجزء الأول من الكلمة الأصلية، ويتم ضم توسيع المعلمة الأخيرة مع الجزء الأخير من الكلمة الأصلية. عند عدم وجود معلمات موضعية، يتوسع "$@" و $@ إلى لا شيء (أي يتم حذفهما).
#
يتوسع إلى عدد المعلمات الموضعية بالنظام العشري.
?
يتوسع إلى حالة الخروج لأحدث أنبوب برمجي نُفذ في الواجهة.
-
يتوسع إلى أعلام الخيارات الحالية كما هي محددة عند الاستدعاء، بواسطة الأمر المدمج set، أو تلك التي تضبطها الصدفة نفسها (مثل الخيار -i).
$
يتوسع إلى معرف العملية (PID) للصدفة. في الصدفة الفرعية، يتوسع إلى معرف العملية للصدفة الحالية، وليس الصدفة الفرعية.
!
يتوسع إلى معرف العملية (PID) للوظيفة التي وُضعت مؤخرًا في الخلفية، سواء نُفذت كأمر غير متزامن أو باستخدام الأمر المدمج bg (انظر JOB CONTROL أدناه).
0
يتوسع إلى اسم الصدفة أو سكربت الصدفة. يتم ضبط هذا عند تهيئة الصدفة. إذا استُدعي bash مع ملف من الأوامر، يتم ضبط $0 على اسم ذلك الملف. إذا بدأ bash بالخيار -c، فسيتم ضبط $0 على الوسيط الأول بعد السلسلة المراد تنفيذها، إذا وجد. وبخلاف ذلك، يتم ضبطه على اسم الملف المستخدم لاستدعاء bash، كما هو معطى في الوسيط صفر.

متغيرات الصدفة

تضبط الصدفة المتغيرات التالية:

_
عند بدء تشغيل الصدفة، يُضبط على اسم المسار المستخدم لاستدعاء الصدفة أو سكربت الصدفة الذي يتم تنفيذه كما تم تمريره في البيئة أو قائمة الوسائط. وبعد ذلك، يتوسع إلى الوسيط الأخير للأمر البسيط السابق الذي نُفذ في الواجهة، بعد التوسيع. يُضبط أيضًا على اسم المسار الكامل المستخدم لاستدعاء كل أمر نُفذ ووُضع في البيئة المصدرة إلى ذلك الأمر. عند فحص البريد، تحتفظ هذه المعلمة باسم ملف البريد الذي يتم فحصه حاليًا.
يتوسع إلى اسم الملف الكامل المستخدم لاستدعاء نسخة bash هذه.
قائمة مفصولة بنقطتين لخيارات الصدفة الممكّنة. كل كلمة في القائمة هي وسيط صالح للخيار -s للأمر المدمج shopt (انظر SHELL BUILTIN COMMANDS أدناه). الخيارات التي تظهر في BASHOPTS هي تلك التي أبلغ عنها shopt بأنها قيد التشغيل (on). إذا كان هذا المتغير موجودًا في البيئة عند بدء تشغيل bash، فسيتم تمكين كل خيار صدفة في القائمة قبل قراءة أي ملفات بدء تشغيل. هذا المتغير للقراءة فقط.
يتوسع إلى معرف العملية (PID) لعملية bash الحالية. يختلف هذا عن $$ في ظروف معينة، مثل الصدفات الفرعية التي لا تتطلب إعادة تهيئة bash. ليس للتعيينات لـ BASHPID أي تأثير. إذا تم إلغاء تعيين BASHPID، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد ضبطه لاحقًا.
متغير مصفوفة ترابطية تتوافق عناصره مع القائمة الداخلية للأسماء المستعارة كما يحتفظ بها الأمر المدمج alias. تظهر العناصر المضافة إلى هذه المصفوفة في قائمة الأسماء المستعارة؛ ومع ذلك، فإن إلغاء تعيين عناصر المصفوفة لا يؤدي حاليًا إلى إزالة الأسماء المستعارة من قائمة الأسماء المستعارة. إذا تم إلغاء تعيين BASH_ALIASES، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد ضبطه لاحقًا.
متغير مصفوفة قيمها هي عدد المعلمات في كل إطار من مكدس استدعاء تنفيذ bash الحالي. عدد المعلمات للروتين الفرعي الحالي (دالة صدفة أو سكربت نُفذ بـ . أو source) موجود في أعلى المكدس. عند تنفيذ روتين فرعي، يتم دفع عدد المعلمات الممررة إلى BASH_ARGC. تضبط الصدفة BASH_ARGC فقط عندما تكون في وضع التنقيح الممتد (انظر وصف خيار extdebug للأمر المدمج shopt أدناه). قد يؤدي ضبط extdebug بعد أن بدأت الصدفة في تنفيذ سكربت، أو الرجوع إلى هذا المتغير عندما لا يكون extdebug مضبوطاً، إلى قيم غير متسقة.
متغير مصفوفة يحتوي على جميع المعلمات في مكدس استدعاء تنفيذ bash الحالي. المعلمة الأخيرة لآخر استدعاء روتين فرعي موجودة في أعلى المكدس؛ والمعلمة الأولى للاستدعاء الأولي موجودة في الأسفل. عند تنفيذ روتين فرعي، يتم دفع المعلمات المزودة إلى BASH_ARGV. تضبط الصدفة BASH_ARGV فقط عندما تكون في وضع التنقيح الممتد (انظر وصف خيار extdebug للأمر المدمج shopt أدناه). قد يؤدي ضبط extdebug بعد أن بدأت الصدفة في تنفيذ سكربت، أو الرجوع إلى هذا المتغير عندما لا يكون extdebug مضبوطاً، إلى قيم غير متسقة.
عند الرجوع إليه، يتوسع هذا المتغير إلى اسم الصدفة أو سكربت الصدفة (مطابق لـ $0؛ انظر وصف المعلمة الخاصة 0 أعلاه). يؤدي التعيين لـ BASH_ARGV0 إلى تعيين القيمة المسندة إلى $0 أيضًا. إذا تم إلغاء تعيين BASH_ARGV0، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد ضبطه لاحقًا.
متغير مصفوفة ترابطية تتوافق عناصره مع جدول التجزئة (hash table) الداخلي للأوامر كما يحتفظ به الأمر المدمج hash. تظهر العناصر المضافة إلى هذه المصفوفة في جدول التجزئة؛ ومع ذلك، فإن إلغاء تعيين عناصر المصفوفة لا يؤدي حاليًا إلى إزالة أسماء الأوامر من جدول التجزئة. إذا تم إلغاء تعيين BASH_CMDS، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد ضبطه لاحقًا.
الأمر الذي يتم تنفيذه حاليًا أو الذي يوشك على التنفيذ، ما لم تكن الصدفة تنفذ أمرًا نتيجة لمصيدة (trap)، وفي هذه الحالة يكون هو الأمر الذي كان يُنفذ وقت حدوث المصيدة. إذا تم إلغاء تعيين BASH_COMMAND، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد ضبطه لاحقًا.
وسيط الأمر لخيار الاستدعاء -c.
متغير مصفوفة عناصره هي أرقام الأسطر في ملفات المصدر حيث تم استدعاء كل عنصر مقابل من FUNCNAME. ${BASH_LINENO[$i]} هو رقم السطر في ملف المصدر (${BASH_SOURCE[$i+1]}) حيث تم استدعاء ${FUNCNAME[$i]} (أو ${BASH_LINENO[$i-1]} إذا تم الرجوع إليه داخل دالة صدفة أخرى). استخدم LINENO للحصول على رقم السطر الحالي.
قائمة مفصولة بنقطتين من الأدلة التي تبحث فيها الصدفة عن الأوامر المدمجة القابلة للتحميل ديناميكيًا والمحددة بواسطة الأمر enable.
متغير مصفوفة يتم تعيين عناصرها بواسطة المعامل الثنائي =~ للأمر الشرطي [[. العنصر ذو الفهرس 0 هو الجزء من السلسلة الذي يطابق التعبير النمطي بالكامل. العنصر ذو الفهرس n هو الجزء من السلسلة الذي يطابق التعبير الفرعي رقم n الموجود بين قوسين.
متغير مصفوفة عناصره هي أسماء ملفات المصدر حيث تم تعريف أسماء دوال الصدفة المقابلة في متغير المصفوفة FUNCNAME. دالة الصدفة ${FUNCNAME[$i]} معرفة في الملف ${BASH_SOURCE[$i]} ومستدعاة من ${BASH_SOURCE[$i+1]}.
يُزاد بمقدار واحد داخل كل صدفة فرعية أو بيئة صدفة فرعية عندما تبدأ الصدفة في التنفيذ في تلك البيئة. القيمة الأولية هي 0. إذا أُلغي تعيين BASH_SUBSHELL، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقًا.
متغير مصفوفة للقراءة فقط تحمل عناصره معلومات الإصدار لنسخة bash هذه. القيم المعينة لعناصر المصفوفة هي كما يلي:

رقم الإصدار الرئيس (release).
رقم الإصدار الفرعي (version).
مستوى الترقيع (patch level).
إصدار البناء.
حالة الإصدار (مثل beta1).
قيمة MACHTYPE.
يتوسع إلى سلسلة تصف إصدار هذه النسخة من bash.
فهرس داخل ${COMP_WORDS} للكلمة التي تحتوي على موضع المؤشر الحالي. يتوفر هذا المتغير فقط في وظائف الصدفة المستدعاة بواسطة تسهيلات الإكمال القابلة للبرمجة (انظر الإكمال القابل للبرمجة أدناه).
المفتاح (أو المفتاح الأخير في تسلسل مفاتيح) المستخدم لاستدعاء دالة الإكمال الحالية.
سطر الأوامر الحالي. يتوفر هذا المتغير فقط في وظائف الصدفة والأوامر الخارجية المستدعاة بواسطة تسهيلات الإكمال القابلة للبرمجة (انظر الإكمال القابل للبرمجة أدناه).
فهرس موضع المؤشر الحالي بالنسبة لبداية الأمر الحالي. إذا كان موضع المؤشر الحالي في نهاية الأمر الحالي، فإن قيمة هذا المتغير تساوي ${#COMP_LINE}. يتوفر هذا المتغير فقط في وظائف الصدفة والأوامر الخارجية المستدعاة بواسطة تسهيلات الإكمال القابلة للبرمجة (انظر الإكمال القابل للبرمجة أدناه).
يُضبط على قيمة عددية مقابلة لنوع محاولة الإكمال التي تسببت في استدعاء دالة الإكمال: TAB للإكمال العادي، ? لعرض عمليات الإكمال بعد ضغطات TAB متتالية، ! لعرض البدائل عند إكمال كلمة جزئية، @ لعرض عمليات الإكمال إذا لم تُعدل الكلمة، أو % لإكمال القائمة. يتوفر هذا المتغير فقط في دوال الصدفة والأوامر الخارجية التي تستدعيها مرافق الإكمال القابلة للبرمجة (انظر الإكمال القابل للبرمجة أدناه).
مجموعة الأحرف التي تعاملها مكتبة readline كفواصل كلمات عند إجراء إكمال الكلمات. إذا أُلغي تعيين COMP_WORDBREAKS، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقاً.
متغير مصفوفة (انظر المصفوفات أدناه) يتكون من الكلمات الفردية في سطر الأوامر الحالي. يُقسم السطر إلى كلمات كما تفعل readline، باستخدام COMP_WORDBREAKS كما هو موضح أعلاه. يتوفر هذا المتغير فقط في وظائف الصدفة المستدعاة بواسطة تسهيلات الإكمال القابلة للبرمجة (انظر الإكمال القابل للبرمجة أدناه).
متغير مصفوفة (انظر المصفوفات أدناه) أُنشئ ليحمل واصفات الملفات للمخرجات من والمدخلات إلى عملية مشتركة غير مسماة (انظر العمليات المشتركة أعلاه).
متغير مصفوفة (انظر المصفوفات أدناه) يحتوي على المحتويات الحالية لمكدس المجلدات. تظهر المجلدات في المكدس بالترتيب الذي تُعرض به بواسطة الأمر المدمج dirs. يمكن استخدام التعيين لأعضاء متغير المصفوفة هذا لتعديل المجلدات الموجودة بالفعل في المكدس، ولكن يجب استخدام الأمرين المدمجين pushd و popd لإضافة وحذف المجلدات. التعيين لهذا المتغير لن يغير المجلد الحالي. إذا أُلغي تعيين DIRSTACK، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقًا.
في كل مرة يُشار فيها إلى هذه المعلمة، تتوسع إلى عدد الثواني منذ حقبة يونكس (انظر time(3)) كقيمة نقطة عائمة بدقة ميكروثانية. تُتجاهل عمليات التعيين لـ EPOCHREALTIME. إذا أُلغي تعيين EPOCHREALTIME، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقًا.
في كل مرة يُشار فيها إلى هذا المعامل، فإنه يتوسع إلى عدد الثواني منذ حقبة يونكس (انظر time(3)). تُتجاهل عمليات التعيين لـ EPOCHSECONDS. إذا أُلغي تعيين EPOCHSECONDS، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقاً.
يتوسع إلى معرف المستخدم الفعلي للمستخدم الحالي، ويُهيأ عند بدء تشغيل الصدفة. هذا المتغير للقراءة فقط.
متغير مصفوفة يحتوي على أسماء جميع وظائف الصدفة الموجودة حالياً في مكدس استدعاءات التنفيذ. العنصر ذو الفهرس 0 هو اسم أي وظيفة صدفة يجري تنفيذها حالياً. العنصر الأكثر انخفاضاً (الذي له أعلى فهرس) هو "main". يوجد هذا المتغير فقط عند تنفيذ وظيفة صدفة. لا تأثير لعمليات التعيين لـ FUNCNAME. إذا أُلغي تعيين FUNCNAME، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقاً.

يمكن استخدام هذا المتغير مع BASH_LINENO و BASH_SOURCE. لكل عنصر في FUNCNAME عناصر مقابلة في BASH_LINENO و BASH_SOURCE لوصف مكدس الاستدعاءات. على سبيل المثال، استُدعي ${FUNCNAME[$i]} من الملف ${BASH_SOURCE[$i+1]} عند السطر رقم ${BASH_LINENO[$i]}. يعرض الأمر المدمج caller مكدس الاستدعاءات الحالي باستخدام هذه المعلومات.

متغير مصفوفة يحتوي على قائمة المجموعات التي ينتمي إليها المستخدم الحالي. لا تأثير لعمليات التعيين لـ GROUPS. إذا أُلغي تعيين GROUPS، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقاً.
رقم التاريخ، أو الفهرس في قائمة التاريخ، للأمر الحالي. تُتجاهل عمليات التعيين لـ HISTCMD. إذا أُلغي تعيين HISTCMD، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقًا.
يُضبط آليًا إلى اسم المضيف الحالي.
يُضبط آليًا إلى سلسلة تصف بشكل فريد نوع الجهاز الذي يشتغل عليه bash. القيمة المبدئية تعتمد على النظام.
في كل مرة يُشار فيها إلى هذا المعامل، تستبدله الـ صدفة برقم عشري يمثل رقم السطر التسلسلي الحالي (بدءًا من 1) داخل سكربت أو دالة. عندما لا يكون في سكربت أو دالة، لا يُضمن أن تكون القيمة المستبدلة ذات معنى. إذا أُلغي تعيين LINENO، فإنها تفقد خصائصها الخاصة، حتى لو أُعيد تعيينها لاحقًا.
يُضبط آليًا إلى سلسلة تصف تمامًا نوع النظام الذي يشتغل عليه bash، بتنسيق cpu-company-system القياسي لـ GNU. القيمة المبدئية تعتمد على النظام.
متغير مصفوفة (انظر Arrays أدناه) أُنشئ ليحوي النص المقروء بواسطة أمر mapfile المدمج عند عدم توفير اسم متغير.
دليل العمل السابق كما عينه الأمر cd.
قيمة آخر معطى خيار عولج بواسطة أمر getopts المدمج (انظر أوامر الصدفة المدمجة أدناه).
فهرس المعطى التالي الذي سيُعالجه أمر getopts المدمج (انظر أوامر الصدفة المدمجة أدناه).
يُضبط آليًا إلى سلسلة تصف نظام التشغيل الذي يشتغل عليه bash. القيمة المبدئية تعتمد على النظام.
متغير مصفوفة (انظر المصفوفات أدناه) يحتوي على قائمة بقيم حالة الخروج من العمليات في أنبوب الواجهة الأمامية المنفذ مؤخرًا (والذي قد يحتوي على أمر واحد فقط).
معرف عملية (PID) والد الـ صدفة. هذا المتغير للقراءة فقط.
دليل العمل الحالي كما عينه الأمر cd.
في كل مرة يُشار فيها إلى هذه المعلمة، تتوسع إلى عدد صحيح عشوائي بين 0 و 32767. يؤدي تعيين قيمة لـ RANDOM إلى تهيئة (بذر) تسلسل الأرقام العشوائية. إذا أُلغي تعيين RANDOM، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقًا.
أي معامل عددي يُعطى لأمر readline والذي عُرّف باستخدام "bind -x" (انظر أوامر الصدفة المدمجة أدناه) عند استدعائه.
محتويات مخزن سطر readline المؤقت، للاستخدام مع "bind -x" (انظر أوامر الصدفة المدمجة أدناه).
موضع الـ علامة (نقطة الإدراج المحفوظة) في مخزن سطر readline المؤقت، للاستخدام مع "bind -x" (انظر أوامر الصدفة المدمجة أدناه). غالبًا ما تسمى الأحرف بين نقطة الإدراج والـ علامة باسم المنطقة.
موضع نقطة الإدراج في مخزن سطر readline المؤقت، للاستخدام مع "bind -x" (انظر أوامر الصدفة المدمجة أدناه).
يُضبط على سطر المدخلات المقروء بواسطة أمر read المدمج عند عدم توفير أي معطيات.
في كل مرة يُشار فيها إلى هذه المعلمة، تتوسع إلى عدد الثواني منذ استدعاء الصدفة. إذا عُيّنت قيمة لـ SECONDS، فإن القيمة المعادة عند الإشارات اللاحقة هي عدد الثواني منذ التعيين زائد القيمة المعينة. يُحدد عدد الثواني عند استدعاء الصدفة والوقت الحالي دائمًا عن طريق الاستعلام من ساعة النظام. إذا أُلغي تعيين SECONDS، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقًا.
قائمة مفصولة بنقطتين لخيارات الصدفة المفعّلة. كل كلمة في القائمة هي معامل صحيح للخيار -o للأمر المدمج set (انظر أوامر الصدفة المدمجة أدناه). الخيارات التي تظهر في SHELLOPTS هي تلك التي يُبلّغ عنها بأنها on بواسطة set -o. إذا كان هذا المتغير في البيئة عند بدء تشغيل bash، فسيُفعّل كل خيار صدفة في القائمة قبل قراءة أي ملفات بدء تشغيل. هذا المتغير للقراءة فقط.
يُزاد بمقدار واحد في كل مرة يُبدأ فيها تشغيل نسخة من bash.
يتوسع هذا المتغير إلى رقم عشوائي زائف بطول 32 بت في كل مرة يُشار إليه. مولد الأرقام العشوائية ليس خطيًا على الأنظمة التي تدعم /dev/urandom أو arc4random، لذا فإن كل رقم ناتج ليس له علاقة بالأرقام التي تسبقه. لا يمكن بذر مولد الأرقام العشوائية، لذا فإن عمليات التعيين لهذا المتغير ليس لها أي تأثير. إذا أُلغي تعيين SRANDOM، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقًا.
يتوسع إلى معرّف المستخدم (user ID) للمستخدم الحالي، ويُهيّأ عند بدء تشغيل الصدفة. هذا المتغير للقراءة فقط.

المتغيرات التالية تستخدمها الصدفة. في بعض الحالات، يعين bash قيمة مبدئية لمتغير؛ وتُذكر هذه الحالات أدناه.

تُستخدم القيمة لضبط مستوى توافق الصدفة. انظر نمط توافق الصدفة أدناه للحصول على وصف لمستويات التوافق المختلفة وآثارها. قد تكون القيمة رقمًا عشريًا (مثل 4.2) أو عددًا صحيحًا (مثل 42) يقابل مستوى التوافق المطلوب. إذا كان BASH_COMPAT غير معين أو معين كسلسلة فارغة، فسيُضبط مستوى التوافق على القيمة المبدئية للإصدار الحالي. إذا عُيّن BASH_COMPAT على قيمة ليست من مستويات التوافق الصالحة، فستطبع الصدفة رسالة خطأ وتضبط مستوى التوافق على القيمة المبدئية للإصدار الحالي. تتوافق القيم الصالحة مع مستويات التوافق الموصوفة أدناه ضمن نمط توافق الصدفة. على سبيل المثال، 4.2 و 42 هي قيم صالحة تقابل خيار shopt المسمى compat42 وتضبط مستوى التوافق على 42. الإصدار الحالي هو أيضًا قيمة صالحة.
إذا عُيّنت هذه المعلمة عندما ينفذ bash سكربت صدفة، فستُفسر قيمتها كاسم ملف يحتوي على أوامر لتهيئة الصدفة، كما في ~/.bashrc. تخضع قيمة BASH_ENV لتوسيع المعلمات، واستبدال الأوامر، والتوسيع الحسابي قبل تفسيرها كاسم ملف. لا يُستخدم PATH للبحث عن اسم الملف الناتج.
إذا عُيّن إلى عدد صحيح يقابل واصف ملف صالح، فسيكتب bash مخرجات التتبع المولدة عندما set -x يُفعّل إلى واصف الملف هذا. يُغلق واصف الملف عند إلغاء تعيين BASH_XTRACEFD أو تعيين قيمة جديدة له. يؤدي إلغاء تعيين BASH_XTRACEFD أو تعيينه كسلسلة فارغة إلى إرسال مخرجات التتبع إلى الخطأ القياسي. لاحظ أن تعيين BASH_XTRACEFD على 2 (واصف ملف الخطأ القياسي) ثم إلغاء تعيينه سيؤدي إلى إغلاق الخطأ القياسي.
مسار البحث للأمر cd. هذا عبارة عن قائمة مفصولة بنقطتين من المجلدات التي تبحث فيها الصدفة عن المجلدات الهدف المحددة بواسطة الأمر cd. قيمة عينة هي ".:~:/usr".
يضبط عدد قيم حالة الأبناء المنتهية التي يجب أن تتذكرها الصدفة. لن يسمح Bash بتقليل هذه القيمة عن الحد الأدنى الذي يفرضه POSIX، وهناك قيمة قصوى (حالياً 8192) لا يجوز تجاوزها. الحد الأدنى يعتمد على النظام.
يستخدمه الأمر المركب select لتحديد عرض الطرفية عند طباعة قوائم الاختيار. يُضبط آليًا إذا فُعّل خيار checkwinsize أو في صدفة تفاعلية عند استلام SIGWINCH.
متغير مصفوفة يقرأ منه bash عمليات الإكمال الممكنة التي ولدتها دالة صدفة استدعتها ميزة الإكمال القابلة للبرمجة (انظر الإكمال القابل للبرمجة أدناه). يحتوي كل عنصر في المصفوفة على إكمال واحد ممكن.
إذا وجد bash هذا المتغير في البيئة عند بدء تشغيل الصدفة بالقيمة "t", فإنه يفترض أن الصدفة تعمل في مخزن مؤقت لصدفة Emacs ويعطل تحرير السطور.
يُوسع ويُنفذ بشكل مشابه لـ BASH_ENV (انظر الاستدعاء أعلاه) عند استدعاء صدفة تفاعلية في نمط posix.
قائمة مفصولة بنقطتين من أنماط الصدفة (انظر مطابقة الأنماط) التي تحدد قائمة أسماء الملفات التي يجب تجاهلها عند البحث عن الأوامر باستخدام PATH. الملفات التي تطابق مساراتها الكاملة أحد هذه الأنماط لا تُعتبر ملفات قابلة للتنفيذ لأغراض الإكمال وتنفيذ الأوامر عبر البحث في PATH. هذا لا يؤثر على سلوك الأوامر [ و test و [[. لا تخضع المسارات الكاملة في جدول هاش الأوامر لـ EXECIGNORE. استخدم هذا المتغير لتجاهل ملفات المكتبات المشتركة التي تم ضبط بت التنفيذ لها، ولكنها ليست ملفات قابلة للتنفيذ. تحترم مطابقة الأنماط إعداد خيار الصدفة extglob.
المحرر المبدئي للأمر المدمج fc.
قائمة مفصولة بنقطتين من اللاحقات التي يجب تجاهلها عند إجراء إكمال أسماء الملفات (انظر READLINE أدناه). يُستبعد اسم الملف الذي تطابق لاحقته أحد المدخلات في FIGNORE من قائمة أسماء الملفات المطابقة. قيمة عينة هي ".o:~" (الاقتباس مطلوب عند تعيين قيمة لهذا المتغير، والذي يحتوي على علامات مدة ~).
إذا ضُبط على قيمة عددية أكبر من 0، فإنه يحدد أقصى مستوى لتعشيش الدوال. استدعاءات الدوال التي تتجاوز مستوى التعشيش هذا ستؤدي إلى إجهاض الأمر الحالي.
قائمة مفصولة بنقطتين من الأنماط التي تحدد مجموعة أسماء الملفات التي يجب تجاهلها عند توسيع مسار الملف. إذا كان اسم الملف المطابق لنمط توسيع المسار يطابق أيضًا أحد الأنماط في GLOBIGNORE، فسيُحذف من قائمة المطابقات.
قائمة مفصولة بنقطتين من القيم التي تتحكم في كيفية حفظ الأوامر في قائمة التاريخ. إذا تضمنت قائمة القيم ignorespace، فلن تُحفظ السطور التي تبدأ بمسافة (space) في قائمة التاريخ. وتؤدي القيمة ignoredups إلى عدم حفظ السطور المطابقة لمدخل التاريخ السابق. القيمة ignoreboth هي اختصار لـ ignorespace و ignoredups. وتؤدي القيمة erasedups إلى حذف جميع السطور السابقة المطابقة للسطر الحالي من قائمة التاريخ قبل حفظ هذا السطر. تُتجاهل أي قيمة ليست في القائمة أعلاه. إذا كان HISTCONTROL غير معين، أو لا يتضمن قيمة صالحة، فسيُحفظ جميع السطور التي يقرأها محلل الصدفة في قائمة التاريخ، مع مراعاة قيمة HISTIGNORE. لا تُختبر الأسطر الثانية واللاحقة من أمر مركب متعدد الأسطر، وتُضاف إلى التاريخ بغض النظر عن قيمة HISTCONTROL.
اسم الملف الذي يُحفظ فيه تاريخ الأوامر (انظر التاريخ أدناه). القيمة المبدئية هي ~/.bash_history. إذا أُلغي تعيينه، فلن يُحفظ تاريخ الأوامر عند خروج الصدفة.
أقصى عدد من السطور التي يحتويها ملف التاريخ. عند تعيين قيمة لهذا المتغير، يُقص ملف التاريخ، إذا لزم الأمر، بحيث لا يحتوي على أكثر من هذا العدد من السطور عن طريق حذف أقدم المدخلات. يُقص ملف التاريخ أيضًا إلى هذا الحجم بعد كتابته عند خروج الصدفة. إذا كانت القيمة 0، فسيُقص ملف التاريخ إلى حجم صفري. تمنع القيم غير العددية والقيم العددية الأقل من الصفر عملية القص. تضبط الصدفة القيمة المبدئية على قيمة HISTSIZE بعد قراءة أي ملفات بدء تشغيل.
قائمة مفصولة بنقطتين من الأنماط المستخدمة لتحديد أي أسطر الأوامر يجب حفظها في قائمة التاريخ. كل نمط يكون مرتبطاً ببداية السطر ويجب أن يطابق السطر بالكامل (لا تُلحق علامة `*' ضمنيًا). يُختبر كل نمط مقابل السطر بعد تطبيق عمليات التحقق المحددة بواسطة HISTCONTROL. بالإضافة إلى أحرف مطابقة أنماط الصدفة العادية، تطابق `&' سطر التاريخ السابق. يمكن هروب `&' باستخدام الخط المائل العكسي؛ ويُحذف الخط المائل العكسي قبل محاولة المطابقة. لا تُختبر الأسطر الثانية واللاحقة من أمر مركب متعدد الأسطر، وتُضاف إلى التاريخ بغض النظر عن قيمة HISTIGNORE. تحترم مطابقة الأنماط إعداد خيار الصدفة extglob.
عدد الأوامر التي يجب تذكرها في تأريخ الأوامر (انظر التأريخ أدناه). إذا كانت القيمة 0، فلن تُحفظ الأوامر في قائمة التأريخ. تؤدي القيم العددية الأقل من الصفر إلى حفظ كل أمر في قائمة التأريخ (لا يوجد حد). تضبط الـ صدفة القيمة المبدئية على 500 بعد قراءة أي ملفات بدء تشغيل.
إذا ضُبط هذا المتغير ولم يكن فارغًا، تُستخدم قيمته كسلسلة تنسيق لـ strftime(3) لطباعة الطابع الزمني المرتبط بكل مدخل تاريخ يعرضه الأمر المدمج history. إذا ضُبط هذا المتغير، تُكتب الطوابع الزمنية في ملف التاريخ بحيث يمكن الحفاظ عليها عبر جلسات الصدفة. يستخدم هذا حرف تعليق التاريخ لتمييز الطوابع الزمنية عن أسطر التاريخ الأخرى.
الدليل الرئيسي للمستخدم الحالي؛ المعطى المبدئي للأمر المدمج cd. تُستخدم قيمة هذا المتغير أيضًا عند إجراء توسيع التلدة (tilde).
Contains the name of a file in the same format as /etc/hosts that should be read when the shell needs to complete a hostname. The list of possible hostname completions may be changed while the shell is running; the next time hostname completion is attempted after the value is changed, bash adds the contents of the new file to the existing list. If HOSTFILE is set, but has no value, or does not name a readable file, bash attempts to read /etc/hosts to obtain the list of possible hostname completions. When HOSTFILE is unset, the hostname list is cleared.
فاصل الحقول الداخلي (Internal Field Separator) الذي يُستخدم لتقسيم الكلمات بعد التوسيع ولتقسيم السطور إلى كلمات باستخدام الأمر المدمج read. القيمة المبدئية هي “<مسافة><جدولة><سطر جديد>”.
يتحكم في تصرف الصدفة التفاعلية عند استلام محرف EOF كمدخل وحيد. إذا ضُبط، تكون القيمة هي عدد محارف EOF المتتالية التي يجب كتابتها كأول محارف في سطر الإدخال قبل خروج bash. إذا كان المتغير موجوداً ولكن ليس له قيمة عددية، أو ليس له قيمة، فإن القيمة المبدئية هي 10. إذا لم يكن موجوداً، فإن EOF يشير إلى نهاية الإدخال للصدفة.
The filename for the readline startup file, overriding the default of ~/.inputrc (see READLINE below).
إذا ظهر هذا المتغير في البيئة عند بدء تشغيل الصدفة، يفترض bash أنه يعمل داخل مخزن مؤقت لصدفة Emacs وقد يعطل تحرير السطور، اعتماداً على قيمة TERM.
يُستخدم لتحديد فئة الإعدادات المحلية لأي فئة لم تُحدد صراحة بمتغير يبدأ بـ LC_.
يتجاوز هذا المتغير قيمة LANG وأي متغير LC_ آخر يحدد فئة إعدادات محلية.
يحدد هذا المتغير ترتيب المقارنة المستخدم عند فرز نتائج توسيع مسار الملف، ويحدد سلوك تعبيرات النطاق، وفئات التكافؤ، وتسلسلات المقارنة داخل توسيع مسار الملف ومطابقة الأنماط.
يحدد هذا المتغير تفسير المحارف وسلوك فئات المحارف داخل توسيع مسار الملف ومطابقة الأنماط.
يحدد هذا المتغير الإعدادات المحلية المستخدمة لترجمة السلاسل الموضوعة بين علامتي اقتباس مزدوجتين والمسبوقة بـ $.
يحدد هذا المتغير فئة الإعدادات المحلية المستخدمة لتنسيق الأرقام.
يحدد هذا المتغير فئة الإعدادات المحلية المستخدمة لتنسيق التاريخ والوقت.
يستخدمه الأمر المركب select لتحديد طول العمود عند طباعة قوائم الاختيار. يُضبط آليًا إذا مُكّن خيار checkwinsize أو في صدفة تفاعلية عند تلقي إشارة SIGWINCH.
إذا عُيّنت هذه المعلمة على اسم ملف أو مجلد ولم يُعيّن متغير MAILPATH، فإن bash يبلغ المستخدم بوصول بريد في الملف المحدد أو المجلد بتنسيق Maildir.
يحدد عدد المرات (بالثواني) التي يتحقق فيها bash من البريد. القيمة المبدئية هي 60 ثانية. عندما يحين وقت التحقق من البريد، تقوم الـ صدفة بذلك قبل عرض المحث الرئيس. إذا أُلغي تعيين هذا المتغير، أو عُين لقيمة ليست رقمًا أكبر من أو يساوي الصفر، فإن الـ صدفة تعطّل التحقق من البريد.
قائمة مفصولة بنقطتين من أسماء الملفات التي يجب فحصها بحثاً عن البريد. يمكن تحديد الرسالة التي ستُطبع عند وصول بريد في ملف معين عن طريق فصل اسم الملف عن الرسالة بعلامة `?'. عند استخدامها في نص الرسالة، يتوسع $_ إلى اسم ملف البريد الحالي. مثال:

MAILPATH='/var/mail/bfox?"لديك بريد":~/shell-mail?"$_ لديه بريد!"'

يمكن ضبط Bash لتوفير قيمة مبدئية لهذا المتغير (لا توجد قيمة افتراضيًا)، لكن موقع ملفات بريد المستخدم التي يستخدمها يعتمد على النظام (مثلًا، /var/mail/$USER).

إذا عُين للقيمة 1، يعرض bash رسائل الخطأ الناتجة عن أمر getopts المدمج (انظر أوامر الصدفة المدمجة أدناه). يُهيأ OPTERR إلى 1 في كل مرة تُستدعى فيها الـ صدفة أو يُنفذ فيها سكربت صدفة.
مسار البحث عن الأوامر. وهو قائمة مفصولة بنقطتين للأدلة التي تبحث فيها الـ صدفة عن الأوامر (انظر تنفيذ الأوامر أدناه). اسم الدليل بطول صفر (null) في قيمة PATH يشير إلى الدليل الحالي. قد يظهر اسم دليل فارغ كنقطتين متجاورتين، أو كنقطة في البداية أو النهاية. المسار المبدئي يعتمد على النظام، ويضبطه المسؤول الذي يثبت bash. القيمة الشائعة هي ``/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin''.
إذا كان هذا المتغير في البيئة عند بدء تشغيل bash، تدخل الصدفة في نمط posix قبل قراءة ملفات بدء التشغيل، كما لو كان خيار الاستدعاء --posix قد زُوّد. إذا عُيّن أثناء تشغيل الصدفة، يُفعّل bash نمط posix، كما لو كان الأمر set -o posix قد نُفّذ. عندما تدخل الصدفة في نمط posix، فإنها تعين هذا المتغير إذا لم يكن معيناً بالفعل.
إذا عُين هذا المتغير، وكان مصفوفة، تُنفذ قيمة كل عنصر معين كأمر قبل إصدار كل محث رئيس. إذا عُين هذا المتغير ولكن لم يكن مصفوفة، تُستخدم قيمته كأمر ليُنقذ بدلاً من ذلك.
إذا ضُبطت على رقم أكبر من الصفر، تُستخدم القيمة كعدد لمكونات المسار اللاحقة التي يُحتفظ بها عند توسيع هروب سلاسل المحث \w و \W (انظر PROMPTING أدناه). تُستبدل المحارف المحذوفة بنقاط حذف.
تُوسع قيمة هذا المعامل (انظر PROMPTING أدناه) وتعرضها الصدف التفاعلية بعد قراءة الأمر وقبل تنفيذه.
تُوسع قيمة هذه المعلمة (انظر المحارثة أدناه) وتُستخدم كسلسلة المحارثة الرئيسة. القيمة المبدئية هي “\s-\v\$ ”.
تُوسع قيمة هذه المعلمة كما هو الحال مع PS1 وتُستخدم كسلسلة المحارثة الثانوية. القيمة المبدئية هي “> ”.
تُستخدم قيمة هذا المعامل كمحث لأمر select (انظر SHELL GRAMMAR أعلاه).
تُوسع قيمة هذه المعلمة كما هو الحال مع PS1 وتُطبع القيمة قبل كل أمر يعرضه bash أثناء تتبع التنفيذ. يُكرر الحرف الأول من القيمة الموسعة لـ PS4 عدة مرات، حسب الضرورة، للإشارة إلى مستويات متعددة من غير المباشرة. القيمة المبدئية هي “+ ”.
يتوسع هذا المتغير إلى مسار الاسم الكامل للصدفة. إذا لم يُضبط عند بدء تشغيل الصدفة، يخصص bash له مسار الاسم الكامل لصدفة ولوج المستخدم الحالي.
تُستخدم قيمة هذه المعلمة كسلسلة تنسيق تحدد كيفية عرض معلومات التوقيت للأنابيب المسبوقة بكلمة time المحجوزة. يقدم محرف % تسلسل هروب يُوسع إلى قيمة وقت أو معلومات أخرى. تسلسلات الهروب ومعانيها هي كما يلي؛ تشير الأقواس المعرجة إلى أجزاء اختيارية.

%%
حرف % حرفي.
%[p][l]R
الوقت المنقضي بالثواني.
%[p][l]U
عدد ثواني وحدة المعالجة المركزية المستغرقة في وضع المستخدم.
%[p][l]S
عدد ثواني وحدة المعالجة المركزية المستغرقة في وضع النظام.
%P
نسبة وحدة المعالجة المركزية، تُحسب كـ (%U + %S) / %R.
p الاختيارية هي رقم يحدد الدقة، وهو عدد الأرقام الكسرية بعد الفاصلة العشرية. تؤدي القيمة 0 إلى عدم إخراج فاصلة عشرية أو كسر. يمكن تحديد ثلاثة خانات كحد أقصى بعد الفاصلة العشرية؛ تُغير قيم p الأكبر من 3 إلى 3. إذا لم تُحدد p، تُستخدم القيمة 3.
يحدد الخيار l تنسيقاً أطول، يتضمن الدقائق، على شكل MMmSS.FFs. تحدد قيمة p ما إذا كان الكسر سيُضمّن أم لا.
إذا لم يُضبط هذا المتغير، يتصرف bash كما لو كان يمتلك القيمة $'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'. إذا كانت القيمة فارغة، فلا تُعرض أي معلومات توقيت. يُضاف سطر جديد في النهاية عند عرض سلسلة التنسيق.
إذا ضُبط على قيمة أكبر من الصفر، يُعامل TMOUT كمهلة الانتظار المبدئية للأمر المدمج read. ينتهي الأمر select إذا لم يصل مدخل بعد TMOUT ثانية عندما يأتي الإدخال من طرفية. في الصدفة التفاعلية، تُفسر القيمة على أنها عدد الثواني لانتظار سطر من الإدخال بعد إصدار المحارثة الرئيسة. ينتهي Bash بعد الانتظار لهذا العدد من الثواني إذا لم يصل سطر كامل من الإدخال.
إذا ضُبط، يستخدم bash قيمته كاسم لدليل ينشئ فيه bash ملفات مؤقتة لاستخدام الصدفة.
يتحكم هذا المتغير في كيفية تفاعل الصدفة مع المستخدم والتحكم في المهام. إذا ضُبط هذا المتغير، تُعامل الأوامر البسيطة المكونة من كلمة واحدة بدون إعادة توجيه كمرشحات لاستئناف مهمة متوقفة موجودة. لا يُسمح بالغموض؛ فإذا كان هناك أكثر من مهمة تبدأ بالسلسلة المكتوبة، تُختار المهمة التي تم الوصول إليها مؤخراً. اسم المهمة المتوقفة، في هذا السياق، هو سطر الأوامر المستخدم لبدئها. إذا ضُبط على القيمة exact، يجب أن تطابق السلسلة المزودة اسم المهمة المتوقفة تماماً؛ وإذا ضُبط على substring، يجب أن تطابق السلسلة المزودة سلسلة فرعية من اسم المهمة المتوقفة. توفر القيمة substring وظيفة مماثلة لمعرف المهمة %? (انظر التحكم في المهام أدناه). وإذا ضُبط على أي قيمة أخرى، يجب أن تكون السلسلة المزودة سابقة لاسم مهمة متوقفة؛ وهذا يوفر وظيفة مماثلة لمعرف المهمة %string.
المحرفان أو الثلاثة التي تتحكم في توسيع التاريخ وتقسيمه (انظر توسيع التاريخ أدناه). المحرف الأول هو محرف توسيع التاريخ، وهو المحرف الذي يشير إلى بدء توسيع التاريخ، وعادة ما يكون `!'. المحرف الثاني هو محرف الاستبدال السريع، والذي يُستخدم كاختصار لإعادة تشغيل الأمر السابق المدخل، مع استبدال سلسلة بأخرى في الأمر. المبدئي هو `^'. المحرف الثالث الاختياري هو المحرف الذي يشير إلى أن بقية السطر هي تعليق عندما يوجد كأول محرف في الكلمة، وعادة ما يكون `#'. يتسبب محرف تعليق التاريخ في تجاوز استبدال التاريخ للكلمات المتبقية في السطر. ولا يتسبب بالضرورة في أن يعامل محلل الصدفة بقية السطر كتعليق.

المصفوفات

يوفر Bash متغيرات مصفوفة مفهرسة أحادية البعد ومصفوفات ترابطية. يمكن استخدام أي متغير كمصفوفة مفهرسة؛ وسيعلن الأمر المدمج declare صراحة عن المصفوفة. لا يوجد حد أقصى لحجم المصفوفة، ولا يوجد شرط بأن تُفهرس الأعضاء أو تُعين بشكل متصل. تتم الإشارة إلى المصفوفات المفهرسة باستخدام أعداد صحيحة (بما في ذلك التعبيرات الحسابية) وتعتمد على الصفر؛ بينما تتم الإشارة إلى المصفوفات الترابطية باستخدام سلاسل نصية اختيارية. ما لم يذكر خلاف ذلك، يجب أن تكون فهارس المصفوفة المفهرسة أعداداً صحيحة غير سالبة.

تُنشأ مصفوفة مفهرسة آلياً إذا عُيّن أي متغير باستخدام الصيغة name[subscript]=value. يُعامل subscript كتعبير حسابي يجب أن يؤول إلى رقم. للإعلان صراحة عن مصفوفة مفهرسة، استخدم declare -a name (انظر أوامر الصدفة المدمجة أدناه). يُقبل أيضاً declare -a name[subscript]؛ ويُتجاهل subscript.

تُنشأ المصفوفات الترابطية باستخدام declare -A name.

يمكن تحديد السمات لمتغير مصفوفة باستخدام الأمرين المدمجين declare و readonly. تنطبق كل سمة على جميع أعضاء المصفوفة.

تُعين المصفوفات باستخدام تعيينات مركبة على الشكل name=(value1 ... valuen)، حيث يمكن أن يكون كل value على الشكل [subscript]=string. لا تتطلب تعيينات المصفوفة المفهرسة سوى string. يُوسع كل value في القائمة باستخدام كافة توسيعات الصدفة الموضحة أدناه تحت التوسيع. عند التعيين لمصفوفات مفهرسة، إذا زُوّدت الأقواس والاختزال الاختياري، فيُعين هذا الفهرس؛ وإلا فإن فهرس العنصر المعين هو آخر فهرس عُيّن بواسطة الجملة زائد واحد. يبدأ الفهرسة من الصفر.

عند التعيين لمصفوفة ترابطية، يمكن أن تكون الكلمات في التعيين المركب إما جمل تعيين، والتي تتطلب الفهرس، أو قائمة من الكلمات التي تُفسر كـ تسلسل من المفاتيح والقيم المتناوبة: name=( key1 value1 key2 value2 ...). تُعامل هذه بشكل مماثل لـ name=( [key1]=value1 [key2]=value2 ...). تحدد الكلمة الأولى في القائمة كيفية تفسير الكلمات المتبقية؛ ويجب أن تكون جميع التعيينات في القائمة من نفس النوع. عند استخدام أزواج مفتاح/قيمة، لا يمكن أن تكون المفاتيح مفقودة أو فارغة؛ وتُعامل القيمة المفقودة النهائية كـ سلسلة فارغة.

هذه الصيغة مقبولة أيضاً بواسطة الأمر المدمج declare. يمكن تعيين عناصر المصفوفة الفردية باستخدام صيغة name[subscript]=value المذكورة أعلاه. عند التعيين لمصفوفة مفهرسة، إذا كان name مفهرساً برقم سالب، فإن هذا الرقم يُفسر كنسبة لواحد أكبر من أقصى فهرس لـ name، لذا فإن الفهارس السالبة تُعد من نهاية المصفوفة، ويشير الفهرس -1 إلى العنصر الأخير.

سوف يقوم عامل التشغيل += بالإلحاق بمتغير المصفوفة عند التعيين باستخدام صيغة التعيين المركب؛ انظر المعلمات أعلاه.

يمكن الإشارة إلى أي عنصر في المصفوفة باستخدام ${name[subscript]}. الأقواس المعرجة مطلوبة لتجنب التضارب مع توسيع مسار الملف. إذا كان subscript هو @ أو *، تتوسع الكلمة إلى كافة أعضاء name. تختلف هذه الفهارس فقط عندما تظهر الكلمة داخل علامات اقتباس مزدوجة. إذا كانت الكلمة مقتبسة اقتباساً مزدوجاً، يتوسع ${name[*]} إلى كلمة واحدة تحتوي على قيمة كل عضو في المصفوفة مفصولاً بالحرف الأول من متغير IFS الخاص، بينما يتوسع ${name[@]} لكل عنصر في name إلى كلمة منفصلة. عندما لا توجد أعضاء في المصفوفة، يتوسع ${name[@]} إلى لا شيء. إذا حدث التوسيع المقتبس اقتباساً مزدوجاً داخل كلمة، يُدمج توسيع المعلمة الأولى مع الجزء الأول من الكلمة الأصلية، ويُدمج توسيع المعلمة الأخيرة مع الجزء الأخير من الكلمة الأصلية. وهذا يماثل توسيع المعلمات الخاصة * و @ (انظر المعلمات الخاصة أعلاه). يتوسع ${#name[subscript]} إلى طول ${name[subscript]}. إذا كان subscript هو * أو @، يكون التوسيع هو عدد العناصر في المصفوفة. إذا آل subscript المستخدم للإشارة إلى عنصر في مصفوفة مفهرسة إلى رقم أقل من الصفر، فإنه يُفسر كنسبة لواحد أكبر من أقصى فهرس للمصفوفة، لذا فإن الفهارس السالبة تُعد من نهاية المصفوفة، ويشير الفهرس -1 إلى العنصر الأخير.

الإشارة إلى متغير مصفوفة بدون فهرس تعادل الإشارة إلى المصفوفة بالفهرس 0. تُعد أي إشارة لمتغير باستخدام فهرس صالح قانونية، وسيقوم bash بإنشاء مصفوفة إذا لزم الأمر.

يعتبر متغير المصفوفة معيناً إذا خُصصت قيمة لدليل ما. وتعتبر السلسلة الفارغة قيمة صالحة.

من الممكن الحصول على مفاتيح (فهارس) مصفوفة بالإضافة إلى القيم. تتوسع ${!name[@]} و ${!name[*]} إلى الفهارس المخصصة في متغير المصفوفة name. المعاملة عند وجودها داخل اقتباس مزدوج تشبه توسيع المعاملات الخاصة @ و * داخل الاقتباس المزدوج.

يُستخدم الأمر المدمج unset لتدمير المصفوفات. unset name[subscript] يدمر عنصر المصفوفة عند الفهرس subscript، لكل من المصفوفات المفهرسة والترابطية. تُفسر الفهارس السالبة للمصفوفات المفهرسة كما هو موضح أعلاه. إلغاء تعيين العنصر الأخير من متغير المصفوفة لا يلغي تعيين المتغير نفسه. unset name، حيث name هو مصفوفة، يزيل المصفوفة بأكملها. يتصرف unset name[subscript]، حيث subscript هو * أو @، بشكل مختلف اعتماداً على ما إذا كان name مصفوفة مفهرسة أو ترابطية. إذا كان name مصفوفة ترابطية، فإن هذا يلغي تعيين العنصر الذي فهرسه * أو @. إذا كان name مصفوفة مفهرسة، فإن unset يزيل كافة العناصر ولكنه لا يزيل المصفوفة نفسها.

عند استخدام اسم متغير مع فهرس كمعامل لأمر ما، كما هو الحال مع unset، دون استخدام صيغة توسيع الكلمات الموضحة أعلاه، يخضع المعامل لتوسيع مسار الملف. إذا لم يكن توسيع مسار الملف مرغوباً فيه، فيجب اقتباس المعامل.

تقبل الأوامر المدمجة declare و local و readonly الخيار -a لتحديد مصفوفة مفهرسة والخيار -A لتحديد مصفوفة ترابطية. إذا قُدم كلاهما، فإن الخيار -A له الأسبقية. يقبل الأمر المدمج read الخيار -a لتعيين قائمة من الكلمات المقروءة من المدخل القياسي لمصفوفة. تعرض الأوامر المدمجة set و declare قيم المصفوفة بطريقة تسمح بإعادة استخدامها كتعيينات.

توسيع

يُنفذ التوسيع في سطر الأوامر بعد تقسيمه إلى كلمات. هناك سبعة أنواع من التوسيع التي تُنفذ: توسيع الأقواس المعرجة، و توسيع المدة (~)، و توسيع المعلمات والمتغيرات، و استبدال الأوامر، و التوسيع الحسابي، و تقسيم الكلمات، و توسيع مسار الملف.

ترتيب التوسيعات هو: توسيع الأقواس المعرجة؛ توسيع المدة (~)، توسيع المعلمات والمتغيرات، التوسيع الحسابي، واستبدال الأوامر (تُنفذ من اليسار إلى اليمين)؛ تقسيم الكلمات؛ وتوسيع مسار الملف.

في الأنظمة التي تدعم ذلك، يتوفر توسيع إضافي: استبدال العمليات. يُجرى هذا في نفس وقت توسيع المد والمعاملات والمتغيرات والحساب واستبدال الأوامر.

بعد تنفيذ هذه التوسيعات، تُحذف محارف الاقتباس الموجودة في الكلمة الأصلية ما لم تكن مقتبسة هي نفسها (حذف الاقتباس).

فقط توسيع الأقواس المعرجة، وتقسيم الكلمات، وتوسيع مسار الملف يمكنها زيادة عدد كلمات التوسيع؛ أما التوسيعات الأخرى فتوسع كلمة واحدة إلى كلمة واحدة. الاستثناءات الوحيدة هي توسيعات "$@" و "${name[@]}"، وفي معظم الحالات $* و "${name[*]}" كما هو موضح أعلاه (انظر المعلمات).

توسيع الأقواس

توسيع الأقواس المعرجة هو آلية يمكن من خلالها توليد سلاسل نصية اختيارية. هذه الآلية تشبه توسيع مسار الملف، ولكن ليس بالضرورة وجود أسماء الملفات المولدة. تأخذ الأنماط المراد توسيعها صيغة ديباجة اختيارية، متبوعة بإما سلسلة من السلاسل النصية المفصولة بفاصلة أو تعبير تسلسلي بين زوج من الأقواس المعرجة، متبوعة بـ خاتمة اختيارية. تُلحق الديباجة كسابقة لكل سلسلة داخل الأقواس، ثم تُلحق الخاتمة لكل سلسلة ناتجة، مع التوسع من اليسار إلى اليمين.

يمكن تعشيش توسيعات الأقواس المعرجة. نتائج كل سلسلة موسعة لا تُفرز؛ بل يُحافظ على الترتيب من اليسار إلى اليمين. على سبيل المثال، a{d,c,b}e تتوسع إلى `ade ace abe'.

يأخذ تعبير التسلسل الصيغة {x..y[..incr]}، حيث x و y إما أعداد صحيحة أو أحرف مفردة، و incr، وهي زيادة اختيارية، هي عدد صحيح. عند تزويد أعداد صحيحة، يتوسع التعبير لكل رقم بين x و y، بما في ذلك الرقمين نفسهما. يمكن تزويد الأعداد الصحيحة بـ 0 كسابقة لإجبار كل حد على امتلاك نفس العرض. عندما يبدأ x أو y بصفر، تحاول الصدفة إجبار جميع الحدود المولدة على احتواء نفس العدد من الأرقام، مع الحشو بالأصفار (zero-padding) عند الضرورة. عند تزويد أحرف، يتوسع التعبير لكل محرف معجمياً بين x و y، بما في ذلك الحرفين، باستخدام لغة C المبدئية. لاحظ أنه يجب أن يكون كل من x و y من نفس النوع (عدد صحيح أو حرف). عند تزويد الزيادة، تُستخدم كفرق بين كل حد. الزيادة المبدئية هي 1 أو -1 حسب الاقتضاء.

يُجرى توسيع الأقواس قبل أي توسيعات أخرى، وتُحفظ أي محارف خاصة بالتوسيعات الأخرى في النتيجة. إنه نصي بحت. لا يطبق Bash أي تفسير نحوي على سياق التوسيع أو النص الموجود بين الأقواس.

يجب أن يحتوي توسيع الأقواس المعرجة المصاغ بشكل صحيح على أقواس فتح وإغلاق غير مقتبسة، وفاصلة واحدة غير مقتبسة على الأقل أو تعبير تسلسلي صالح. أي توسيع أقواس مصاغ بشكل غير صحيح يُترك دون تغيير. يمكن اقتباس { أو , باستخدام الخط المائل العكسي لمنع اعتبارها جزءاً من تعبير الأقواس. لتجنب التضارب مع توسيع المعلمات، لا تُعتبر السلسلة ${ مؤهلة لتوسيع الأقواس، وتمنع توسيع الأقواس حتى قوس الإغلاق }.

يُستخدم هذا التركيب عادة كاختصار عندما تكون السابقة المشتركة للسلاسل المراد توليدها أطول مما في المثال أعلاه:

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

أو
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

يؤدي توسيع الأقواس المعرجة إلى عدم توافق طفيف مع الإصدارات التاريخية من sh. لا يعامل sh أقواس الفتح أو الإغلاق بشكل خاص عندما تظهر كجزء من كلمة، ويحافظ عليها في المخرجات. بينما يحذف Bash الأقواس من الكلمات كنتيجة لتوسيع الأقواس. على سبيل المثال، الكلمة المدخلة في sh كـ file{1,2} تظهر مطابقة في المخرجات. أما نفس الكلمة فتُخرج كـ file1 file2 بعد التوسيع بواسطة bash. إذا كانت هناك رغبة في التوافق التام مع sh، فابدأ bash بالخيار +B أو عطل توسيع الأقواس باستخدام الخيار +B للأمر set (انظر أوامر الصدفة المدمجة أدناه).

توسيع المد

إذا بدأت الكلمة بمحرف مدة غير مقتبس (`~')، تُعتبر جميع المحارف التي تسبق أول شرطة مائلة غير مقتبسة (أو جميع المحارف إذا لم تكن هناك شرطة مائلة غير مقتبسة) بمثابة سابقة-المدة. إذا لم يكن أي من المحارف في سابقة-المدة مقتبساً، تُعامل المحارف في سابقة-المدة التي تلي المدة كـ اسم ولوج محتمل. إذا كان اسم الولوج هذا هو سلسلة فارغة، تُستبدل المدة بقيمة معلمة الصدفة HOME. إذا أُلغي تعيين HOME، يُستبدل المجلد الرئيس للمستخدم الذي ينفذ الصدفة بدلاً من ذلك. وإلا، تُستبدل سابقة-المدة بالمجلد الرئيس المرتبط باسم الولوج المحدد.

إذا كانت بادئة التلدة هي `~+'، فإن قيمة متغير الصدفة PWD تحل محل بادئة التلدة. وإذا كانت بادئة التلدة هي `~-'، فإن قيمة متغير الصدفة OLDPWD، إذا كان مضبوطًا، تُستبدل بها. وإذا كانت المحارف التي تلي التلدة في بادئة التلدة تتكون من رقم N، مسبوقًا اختيارياً بـ `+' أو `-'، فتُستبدل بادئة التلدة بالعنصر المقابل من مكدس المجلدات، كما لو عُرض بواسطة الأمر المدمج dirs المستدعى مع بادئة التلدة كمعامل. وإذا كانت المحارف التي تلي التلدة في بادئة التلدة تتكون من رقم بدون `+' أو `-' بادئة، فيُفترض وجود `+'.

إذا كان اسم الولوج غير صالح، أو فشل توسيع التلدة، تظل الكلمة دون تغيير.

يُفحص كل تعيين لمتغير بحثاً عن بادئات تلدة غير مقتبسة مباشرة بعد : أو بعد أول =. وفي هذه الحالات، يُنفذ توسيع التلدة أيضاً. وبناءً على ذلك، يمكن استخدام أسماء ملفات تحتوي على تلدة في التعيينات للمتغيرات PATH و MAILPATH و CDPATH، وتعين الصدفة القيمة الموسعة.

تنفذ Bash أيضاً توسيع التلدة على الكلمات التي تستوفي شروط تعيين المتغيرات (كما وُصف أعلاه تحت PARAMETERS) عندما تظهر كمعاملات لأوامر بسيطة. ولا تفعل Bash ذلك، باستثناء أوامر التصريح (declaration) المذكورة أعلاه، عندما تكون في وضع posix.

توسيع المعاملات

يُقدم المحرف `$' توسيع المعاملات، أو استبدال الأوامر، أو التوسيع الحسابي. اسم المعامل أو الرمز المراد توسيعه قد يُحاط بأقواس معقوفة، وهي اختيارية ولكنها تعمل على حماية المتغير المراد توسيعه من المحارف التي تليها مباشرة والتي قد تُفسر كجزء من الاسم.

عند استخدام الأقواس المعقوفة، يكون قوس الإغلاق المطابق هو أول `}' غير مسبوق بشرطة مائلة عكسية (backslash) وليس داخل سلسلة مقتبسة، وليس داخل توسيع حسابي مضمن، أو استبدال أمر، أو توسيع معامل.

${parameter}
تُستبدل قيمة المعامل. تكون الأقواس المعقوفة مطلوبة عندما يكون المعامل معامل موضعياً بأكثر من رقم واحد، أو عندما يتبع المعامل محرف لا يجب تفسيره كجزء من اسمه. المعامل هو معامل صدفة كما وُصف أعلاه PARAMETERS) أو مرجع مصفوفة (Arrays).

إذا كان المحرف الأول من المعامل هو علامة تعجب (!)، ولم يكن المعامل من نوع nameref، فإنه يقدم مستوى من التوجيه غير المباشر. تستخدم Bash القيمة المتكونة من توسيع بقية المعامل كـ معامل جديد؛ ثم يُوسع هذا ويُستخدم الناتج في بقية التوسيع، بدلاً من توسيع المعامل الأصلي. يُعرف هذا بـ التوسيع غير المباشر. وتخضع القيمة لتوسيع التلدة، وتوسيع المعاملات، واستبدال الأوامر، والتوسيع الحسابي. إذا كان المعامل مرجع اسم (nameref)، فإن هذا يُوسع إلى اسم المعامل المُشار إليه بواسطة المعامل بدلاً من تنفيذ التوسيع غير المباشر الكامل. الاستثناءات لهذا هي توسعات ${!prefix*} و ${!name[@]} الموصوفة أدناه. يجب أن تتبع علامة التعجب القوس الأيسر مباشرة لتقديم التوجيه غير المباشر.

في كل حالة من الحالات أدناه، تخضع word لتوسيع المد، وتوسيع المعاملات، واستبدال الأوامر، والتوسيع الحسابي.

عند عدم تنفيذ توسيع السلسلة الفرعية، وباستخدام النماذج الموثقة أدناه (مثل :-)، تختبر bash المعامل إذا كان غير معين أو فارغاً (null). ويؤدي حذف النقطتين الرأسيتين إلى الاختبار فقط إذا كان المعامل غير معين.

${parameter:-word}
استخدام القيم المبدئية. إذا كان parameter غير معين أو فارغاً، يُستبدل بتوسيع word. وإلا، تُستبدل قيمة parameter.
${parameter:=word}
تعيين قيم مبدئية. إذا كان المعامل غير معين أو فارغاً، يُعين توسيع الكلمة لـ المعامل. ثم تُستبدل قيمة المعامل. لا يجوز التعيين للمعاملات الموضعية والمعاملات الخاصة بهذه الطريقة.
${parameter:?word}
عرض خطأ إذا كان فارغاً أو غير معين. إذا كان المعامل فارغاً أو غير معين، يُكتب توسيع الكلمة (أو رسالة بهذا المعنى إذا لم تكن الكلمة موجودة) إلى الخطأ القياسي وتخرج الصدفة، إذا لم تكن تفاعلية. وإلا، تُستبدل قيمة المعامل.
${parameter:+word}
استخدام قيمة بديلة. إذا كان المعامل فارغاً أو غير معين، لا يُستبدل شيء، وإلا يُستبدل توسيع الكلمة.
${parameter:offset}
${parameter:offset:length}
توسيع السلسلة الفرعية. يتوسع إلى ما يصل إلى length من محارف قيمة المعامل بدءاً من المحرف المحدد بواسطة offset. إذا كان المعامل هو @ أو *، أو مصفوفة مفهرسة متبوعة بـ @ أو *، أو اسم مصفوفة ترابطية، تختلف النتائج كما هو موضح أدناه. وإذا حُذف length، فإنه يتوسع إلى السلسلة الفرعية من قيمة المعامل بدءاً من المحرف المحدد بواسطة offset وحتى نهاية القيمة. length و offset هما تعبيران حسابيان (انظر ARITHMETIC EVALUATION أدناه).

إذا أدى تقييم offset إلى رقم أقل من الصفر، تُستخدم القيمة كإزاحة بالمحارف من نهاية قيمة parameter. إذا أدى تقييم length إلى رقم أقل من الصفر، فإنه يُفسر كإزاحة بالمحارف من نهاية قيمة parameter بدلاً من عدد من المحارف، ويكون التوسيع هو المحارف بين offset وتلك النتيجة. لاحظ أنه يجب فصل الإزاحة السالبة عن النقطتين بمسافة واحدة على الأقل لتجنب الالتباس مع توسيع :-.

إذا كان المعامل هو @ أو *، تكون النتيجة length من المعاملات الموضعية بدءاً من offset. يُؤخذ الـ offset السالب نسبةً إلى واحد زائد أكبر معامل موضعي، لذا فإن إزاحة -1 تؤول إلى المعامل الموضعي الأخير. ويعد خطأ توسيع إذا آل length إلى رقم أقل من الصفر.

إذا كان parameter اسم مصفوفة مفهرسة بدليل @ أو *، تكون النتيجة هي length من أعضاء المصفوفة بدءاً من ${parameter[offset]}. تؤخذ الإزاحة السالبة offset نسبةً لواحد أكبر من الفهرس الأقصى للمصفوفة المحددة. يعتبر خطأ توسيع إذا أدى تقييم length إلى رقم أقل من الصفر.

يؤدي توسيع السلسلة الفرعية المطبق على مصفوفة ترابطية إلى نتائج غير محددة.

تعتمد فهرسة السلسلة الفرعية على الصفر ما لم تُستخدم المعاملات الموضعية، وفي هذه الحالة تبدأ الفهرسة من 1 مبدئياً. إذا كان offset هو 0، واستُخدمت المعاملات الموضعية، تُسبق القائمة بـ $0.

${!prefix*}
${!prefix@}
الأسماء المطابقة للسابقة. يتوسع إلى أسماء المتغيرات التي تبدأ أسماؤها بـ prefix، مفصولة بالمحرف الأول من متغير IFS الخاص. عند استخدام @ وظهور التوسيع داخل اقتباس مزدوج، يتوسع كل اسم متغير إلى كلمة منفصلة.
${!name[@]}
${!name[*]}
قائمة مفاتيح المصفوفة. إذا كان name متغير مصفوفة، يتوسع إلى قائمة فهارس (مفاتيح) المصفوفة المخصصة في name. إذا لم يكن name مصفوفة، يتوسع إلى 0 إذا كان name معيناً وإلى فارغ خلاف ذلك. عند استخدام @ وظهور التوسيع داخل اقتباس مزدوج، يتوسع كل مفتاح إلى كلمة منفصلة.
${#parameter}
طول المعامل. يُستبدل طول قيمة المعامل بالمحارف. إذا كان المعامل هو * أو @، فإن القيمة المستبدلة هي عدد المعاملات الموضعية. وإذا كان المعامل اسم مصفوفة متبوعاً بـ * أو @، فإن القيمة المستبدلة هي عدد العناصر في المصفوفة. وإذا كان المعامل اسم مصفوفة مفهرسة متبوعاً برقم سالب، فإن هذا الرقم يُفسر نسبة إلى واحد زائد أقصى فهرس لـ المعامل، لذا فإن الفهارس السالبة تعد تنازلياً من نهاية المصفوفة، والفهرس -1 يشير إلى العنصر الأخير.
${parameter#word}
${parameter##word}
إزالة نمط البادئة المطابق. تُوسع الكلمة لإنتاج نمط تماماً كما في توسيع اسم المسار، وتُطابق مع القيمة الموسعة لـ المعامل باستخدام القواعد الموضوفة تحت مطابقة الأنماط أدناه. إذا طابق النمط بداية قيمة المعامل، فإن نتيجة التوسيع هي القيمة الموسعة لـ المعامل مع حذف أقصر نمط مطابق (حالة “#” ) أو أطول نمط مطابق (حالة “##” ). إذا كان المعامل هو @ أو *، تُطبق عملية إزالة النمط على كل معامل موضعي بالدور، ويكون التوسيع هو القائمة الناتجة. وإذا كان المعامل متغير مصفوفة متبوعاً بـ @ أو *، تُطبق عملية إزالة النمط على كل عضو في المصفوفة بالدور، ويكون التوسيع هو القائمة الناتجة.
${parameter%word}
${parameter%%word}
إزالة نمط اللاحقة المطابق. تُوسع الكلمة لإنتاج نمط تماماً كما في توسيع اسم المسار، وتُطابق مع القيمة الموسعة لـ المعامل باستخدام القواعد الموضوفة تحت مطابقة الأنماط أدناه. إذا طابق النمط الجزء الأخير من القيمة الموسعة لـ المعامل، فإن نتيجة التوسيع هي القيمة الموسعة لـ المعامل مع حذف أقصر نمط مطابق (حالة “%” ) أو أطول نمط مطابق (حالة “%%” ). إذا كان المعامل هو @ أو *، تُطبق عملية إزالة النمط على كل معامل موضعي بالدور، ويكون التوسيع هو القائمة الناتجة. وإذا كان المعامل متغير مصفوفة متبوعاً بـ @ أو *، تُطبق عملية إزالة النمط على كل عضو في المصفوفة بالدور، ويكون التوسيع هو القائمة الناتجة.
${parameter/pattern/string}
${parameter//pattern/string}
${parameter/#pattern/string}
${parameter/%pattern/string}
استبدال الأنماط. يُوسع النمط لإنتاج نمط تماماً كما في توسيع اسم المسار. يُوسع المعامل ويُستبدل أطول تطابق لـ النمط مع قيمته بـ السلسلة. تخضع السلسلة لتوسيع التلدة، وتوسيع المعاملات والمتغيرات، والتوسيع الحسابي، واستبدال الأوامر والعمليات، وإزالة الاقتباس. يُنفذ التطابق باستخدام القواعد الموضوفة تحت مطابقة الأنماط أدناه. في النموذج الأول أعلاه، يُستبدل التطابق الأول فقط. وإذا وُجدت مائلتان (slashes) تفصلان بين المعامل و النمط (النموذج الثاني أعلاه)، تُستبدل جميع تطابقات النمط بـ السلسلة. وإذا كان النمط مسبوقاً بـ # (النموذج الثالث أعلاه)، فيجب أن يطابق بداية القيمة الموسعة لـ المعامل. وإذا كان النمط مسبوقاً بـ % (النموذج الرابع أعلاه)، فيجب أن يطابق نهاية القيمة الموسعة لـ المعامل. إذا كان توسيع السلسلة فارغاً، تُحذف تطابقات النمط. وإذا كانت السلسلة فارغة، تُحذف تطابقات النمط ويمكن حذف / التي تلي النمط.

إذا فُعّل خيار الصدفة patsub_replacement باستخدام shopt، تُستبدل أي مثيلات غير مقتبسة من & في string بالجزء المطابق من pattern.

اقتباس أي جزء من السلسلة يمنع الاستبدال في توسيع الجزء المقتبس، بما في ذلك سلاسل الاستبدال المخزنة في متغيرات الصدفة. الشرطة المائلة العكسية ستهرب & في السلسلة؛ وتُزال الشرطة المائلة العكسية للسماح بوجود & حرفي في سلسلة الاستبدال. يمكن أيضاً استخدام الشرطة المائلة العكسية لهروب شرطة مائلة عكسية أخرى؛ \\ تؤدي إلى شرطة مائلة عكسية حرفية في الاستبدال. يجب على المستخدمين توخي الحذر إذا كانت السلسلة مقتبسة اقتباساً مزدوجاً لتجنب التفاعلات غير المرغوب فيها بين الشرطة المائلة العكسية والاقتباس المزدوج، بما أن للشرطة المائلة العكسية معنى خاصاً داخل الاقتباس المزدوج. ينفذ استبدال النمط فحص & غير المقتبسة بعد توسيع السلسلة؛ يجب على مبرمجي الصدفة اقتباس أي ظهور لـ & يريدون التعامل معه حرفياً في الاستبدال والتأكد من أن أي مثيلات لـ & يريدون استبدالها غير مقتبسة.

إذا فُعل خيار الصدفة nocasematch، يُنفذ التطابق دون اعتبار لحالة المحارف الأبجدية. إذا كان المعامل هو @ أو *، تُطبق عملية الاستبدال على كل معامل موضعي بالدور، ويكون التوسيع هو القائمة الناتجة. وإذا كان المعامل متغير مصفوفة متبوعاً بـ @ أو *، تُطبق عملية الاستبدال على كل عضو في المصفوفة بالدور، ويكون التوسيع هو القائمة الناتجة.

${المعامل^النمط}
${المعامل^^النمط}
${parameter,pattern}
${parameter,,pattern}
تعديل الحالة. يقوم هذا التوسيع بتعديل حالة المحارف الأبجدية في المعامل. يُوسع النمط لإنتاج نمط تماماً كما في توسيع اسم المسار. يُختبر كل محرف في القيمة الموسعة لـ المعامل مقابل النمط، وإذا طابق النمط، تُحول حالته. يجب ألا يحاول النمط مطابقة أكثر من محرف واحد. يقوم العامل ^ بتحويل الحروف الصغيرة التي تطابق النمط إلى حروف كبيرة؛ ويقوم العامل , بتحويل الحروف الكبيرة المطابقة إلى حروف صغيرة. تقوم توسعات ^^ و ,, بتحويل كل محرف مطابق في القيمة الموسعة؛ أما توسعات ^ و , فتطابق وتُحول فقط المحرف الأول في القيمة الموسعة. إذا حُذف النمط، يُعامل مثل ?، الذي يطابق كل محرف. إذا كان المعامل هو @ أو *، تُطبق عملية تعديل الحالة على كل معامل موضعي بالدور، ويكون التوسيع هو القائمة الناتجة. وإذا كان المعامل متغير مصفوفة متبوعاً بـ @ أو *، تُطبق عملية تعديل الحالة على كل عضو في المصفوفة بالدور، ويكون التوسيع هو القائمة الناتجة.
${parameter@operator}
تحويل المعاملات. يكون التوسع إما تحويلًا لقيمة parameter أو معلومات حول parameter نفسه، اعتمادًا على قيمة operator. كل operator هو حرف واحد:

التوسع عبارة عن سلسلة نصية تمثل قيمة parameter مع تحويل الأحرف الأبجدية الصغيرة إلى كبيرة.
التوسع عبارة عن سلسلة نصية تمثل قيمة parameter مع تحويل الحرف الأول إلى حرف كبير، إذا كان أبجديًا.
التوسع عبارة عن سلسلة نصية تمثل قيمة parameter مع تحويل الأحرف الأبجدية الكبيرة إلى صغيرة.
التوسع عبارة عن سلسلة نصية تمثل قيمة parameter مقتبسة بتنسيق يمكن إعادة استخدامه كمدخلات.
التوسيع هو سلسلة نصية تمثل قيمة المعامل مع توسيع تسلسلات الهروب بالشرطة المائلة العكسية كما هو الحال مع آلية الاقتباس $'...'.
التوسع عبارة عن سلسلة نصية ناتجة عن توسيع قيمة parameter كما لو كانت سلسلة محث (انظر قسم المحث أدناه).
التوسيع هو سلسلة نصية على شكل جملة تعيين أو أمر declare، والتي إذا قُوّمت، ستُعيد إنشاء المعامل بصفاته وقيمته.
ينتج نسخة مقتبسة محتملة من قيمة المعامل، باستثناء أنه يطبع قيم المصفوفات المفهرسة والترابطية كتسلسل من أزواج مفتاح-قيمة مقتبسة (انظر Arrays أعلاه).
التوسع عبارة عن سلسلة نصية تتكون من قيم أعلام تمثل سمات parameter.
مثل التحويل K، ولكنه يوسع مفاتيح وقيم المصفوفات المفهرسة والمترابطة إلى كلمات منفصلة بعد تقسيم الكلمات.

إذا كان parameter هو @ أو *، فستُطبَّق العملية على كل معامل موضعي بالترتيب، ويكون التوسع هو القائمة الناتجة. وإذا كان parameter متغير مصفوفة مفهرسًا بـ @ أو *، فستُطبَّق العملية على كل عنصر في المصفوفة بالترتيب، ويكون التوسع هو القائمة الناتجة.

تخضع نتيجة التوسع لتقسيم الكلمات وتوسع مسار الملف كما هو موضح أدناه.

استبدال الأوامر

يسمح استبدال الأوامر لمخرجات أمر ما بأن تحل محل اسم الأمر. هناك نموذجان:

$(command)

أو
`command`

تجري صدفة Bash التوسع عبر تنفيذ command في بيئة صدفة فرعية واستبدال عملية استبدال الأمر بالمخرجات القياسية للأمر، مع حذف أي أسطر جديدة لاحقة. لا تُحذف الأسطر الجديدة المضمنة، ولكن قد تُزال أثناء تقسيم الكلمات. يمكن استبدال عملية استبدال الأمر $(cat file) بالصيغة المكافئة والأسرع $(< file).

عند استخدام نموذج الاقتباس الخلفي (backquote) القديم للاستبدال، تحتفظ الشرطة المائلة العكسية بمعناها الحرفي إلا إذا تبعها $، أو `، أو \. وأول اقتباس خلفي غير مسبوق بشرطة مائلة عكسية ينهي استبدال الأمر. عند استخدام نموذج $(command)، فإن جميع المحارف بين القوسين تشكل الأمر؛ ولا يُعامل أي منها معاملة خاصة.

يمكن أن تكون عمليات استبدال الأوامر متداخلة. للقيام بالتداخل عند استخدام شكل الاقتباس الخلفي، يجب الهروب من الاقتباسات الخلفية الداخلية باستخدام شرطات مائلة عكسية.

إذا ظهر الاستبدال داخل علامات اقتباس مزدوجة، فلا يُنفذ تقسيم الكلمات ولا توسيع اسم المسار على النتائج.

التوسع الحسابي

يسمح التوسيع الحسابي بتقويم تعبير حسابي واستبدال النتيجة. تنسيق التوسيع الحسابي هو:

$((expression))

التنسيق القديم $[تعبير] مهجور وسيُزال في الإصدارات القادمة من bash.

يخضع التعبير لنفس التوسعات كما لو كان داخل علامات اقتباس مزدوجة، ولكن لا تُعامل محارف الاقتباس المزدوج في التعبير معاملة خاصة وتُزال. تخضع جميع الرموز (tokens) في التعبير لتوسيع المعاملات والمتغيرات، واستبدال الأوامر، وإزالة الاقتباس. تُعامل النتيجة كالتعبير الحسابي المراد تقويمه. يمكن أن تكون التوسعات الحسابية متداخلة.

يُنفذ التقويم وفقاً للقواعد المذكورة أدناه تحت ARITHMETIC EVALUATION. إذا كان التعبير غير صالح، تطبع bash رسالة تشير إلى الفشل ولا يحدث استبدال.

استبدال العمليات

يسمح استبدال العمليات بالإشارة إلى مدخلات أو مخرجات العملية باستخدام اسم ملف. يأخذ النموذج <(list) أو >(list). تُشغل قائمة العمليات بشكل غير متزامن، وتظهر مدخلاتها أو مخرجاتها كاسم ملف. يُمرر اسم الملف هذا كمعامل للأمر الحالي كنتيجة للتوسيع. إذا استُخدم نموذج >(list)، فإن الكتابة إلى الملف ستوفر مدخلات لـ القائمة. وإذا استُخدم نموذج <(list)، فيجب قراءة الملف الممرر كمعامل للحصول على مخرجات القائمة. يُدعم استبدال العمليات في الأنظمة التي تدعم الأنابيب المسماة (FIFOs) أو طريقة /dev/fd لتسمية الملفات المفتوحة.

عند توفره، يُجرى استبدال العمليات بالتزامن مع توسع المعاملات والمتغيرات، واستبدال الأوامر، والتوسع الحسابي.

تقسيم الكلمات

تمسح الصدفة نتائج توسيع المعاملات، واستبدال الأوامر، والتوسيع الحسابي التي لم تحدث داخل اقتباسات مزدوجة بحثاً عن تقسيم الكلمات.

تعامل الصدفة كل محرف من IFS كمحدد، وتقسم نتائج التوسعات الأخرى إلى كلمات باستخدام هذه المحارف كمنهيات للحقول. إذا كان IFS غير معين، أو كانت قيمته هي <space><tab><newline> بالضبط، وهي القيمة المبدئية، فتُتجاهل تتابعات المسافة و الجدولة و السطر الجديد في بداية ونهاية نتائج التوسعات السابقة، وأي تتابع لمحارف IFS ليس في البداية أو النهاية يعمل على تحديد الكلمات. وإذا كانت لـ IFS قيمة غير المبدئية، فتُتجاهل تتابعات محارف المساحة البيضاء المسافة و الجدولة و السطر الجديد في بداية ونهاية الكلمة، طالما كان محرف المساحة البيضاء في قيمة IFS (محرف مساحة بيضاء في IFS). أي محرف في IFS ليس محرف مساحة بيضاء في IFS، مع أي محارف مساحة بيضاء مجاور له في IFS، يحدد حقلاً. ويُعامل تتابع محارف المساحة البيضاء في IFS أيضاً كمحدد. وإذا كانت قيمة IFS فارغة، فلا يحدث تقسيم للكلمات.

يُحتفظ بالمعاملات الفارغة الصريحة ("" أو '') وتُمرر إلى الأوامر كسلاسل نصية فارغة. أما المعاملات الفارغة الضمنية غير المقتبسة، الناتجة عن توسيع معاملات ليس لها قيم، فتُحذف. وإذا وُسع معامل ليس له قيمة داخل علامات اقتباس مزدوجة، تنتج وسيطة فارغة ويُحتفظ بها وتُمرر إلى الأمر كسلسلة نصية فارغة. عندما تظهر وسيطة فارغة مقتبسة كجزء من كلمة توسيعها غير فارغ، تُحذف الوسيطة الفارغة. أي أن الكلمة -d'' تصبح -d بعد تقسيم الكلمات وحذف المعاملات الفارغة.

لاحظ أنه إذا لم يحدث توسيع، فلن يُنفذ أي تقسيم.

توسع مسار الملف

بعد تقسيم الكلمات، وما لم يُضبط الخيار -f، تمسح bash كل كلمة بحثاً عن المحارف *، و ?، و [. إذا ظهر أحد هذه المحارف، ولم يكن مقتبساً، تُعتبر الكلمة نمطاً، وتُستبدل بقائمة مرتبة أبجدياً من أسماء الملفات المطابقة للنمط (انظر Pattern Matching أدناه). وإذا لم يُعثر على أسماء ملفات مطابقة، ولم يُفعل خيار الصدفة nullglob، تُترك الكلمة دون تغيير. وإذا ضُبط الخيار nullglob، ولم يُعثر على تطابقات، تُزال الكلمة. وإذا ضُبط خيار الصدفة failglob، ولم يُعثر على تطابقات، تُطبع رسالة خطأ ولا يُنفذ الأمر. وإذا فُعل خيار الصدفة nocaseglob، يُنفذ التطابق دون اعتبار لحالة المحارف الأبجدية. لاحظ أنه عند استخدام تعبيرات المدى مثل [a-z] (انظر أدناه)، قد تُضمن أحرف من الحالة الأخرى، اعتماداً على ضبط LC_COLLATE. عندما يُستخدم نمط لتوسيع اسم المسار، يجب مطابقة المحرف “.” في بداية الاسم أو بعد مائلة (slash) مباشرة بشكل صريح، ما لم يُضبط خيار الصدفة dotglob. ومن أجل مطابقة أسماء الملفات “.” و “..”، يجب أن يبدأ النمط بـ “.” (على سبيل المثال، “.?”)، حتى لو ضُبط dotglob. وإذا فُعل خيار الصدفة globskipdots، فلن تُطابق أسماء الملفات “.” و “..” أبداً، حتى لو بدأ النمط بـ “.”. وعند عدم مطابقة أسماء المسارات، لا يُعامل المحرف “.” معاملة خاصة. وعند مطابقة اسم مسار، يجب دائماً مطابقة محرف المائلة بمائلة صريحة في النمط، ولكن في سياقات المطابقة الأخرى يمكن مطابقتها بمحرف نمط خاص كما وُصف أدناه تحت Pattern Matching. انظر وصف shopt أدناه تحت SHELL BUILTIN COMMANDS للحصول على وصف لخيارات الصدفة nocaseglob، و nullglob، و globskipdots، و failglob، و dotglob.

يمكن استخدام متغير الصدفة GLOBIGNORE لتقييد مجموعة أسماء الملفات المطابقة لـ النمط. إذا ضُبط GLOBIGNORE، فإن كل اسم ملف مطابق يطابق أيضاً أحد الأنماط في GLOBIGNORE يُحذف من قائمة التطابقات. وإذا ضُبط خيار nocaseglob، تُنفذ المطابقة ضد الأنماط في GLOBIGNORE دون اعتبار للحالة. تُتجاهل أسماء الملفات “.” و “..” دائماً عندما يكون GLOBIGNORE مضبوطاً وغير فارغ. ومع ذلك، فإن ضبط GLOBIGNORE لقيمة غير فارغة له تأثير تفعيل خيار الصدفة dotglob، لذا فإن جميع أسماء الملفات الأخرى التي تبدأ بـ “.” ستتطابق. للحصول على السلوك القديم لتجاهل أسماء الملفات التي تبدأ بـ “.”، اجعل “.*” أحد الأنماط في GLOBIGNORE. يُعطل خيار dotglob عندما يكون GLOBIGNORE غير معين. تحترم مطابقة الأنماط ضبط خيار الصدفة extglob.

مطابقة الأنماط

أي حرف يظهر في النمط، بخلاف أحرف الأنماط الخاصة الموضحة أدناه، يطابق نفسه. لا يجوز أن يظهر حرف NUL في النمط. تهرب الشرطة المائلة العكسية الحرف التالي لها؛ وتُهمل الشرطة المائلة المهربة عند المطابقة. يجب اقتباس أحرف الأنماط الخاصة إذا أريد مطابقتها حرفيًا.

لأحرف الأنماط الخاصة المعاني التالية:

*
يطابق أي سلسلة نصية، بما في ذلك السلسلة الفارغة. عندما يُفعل خيار الصدفة globstar، ويُستخدم * في سياق توسيع اسم المسار، فإن نجمتين * متجاورتين تُستخدمان كنمط واحد ستطابقان جميع الملفات وصفر أو أكثر من المجلدات والمجلدات الفرعية. وإذا تبعتهما /، فإن نجمتين * متجاورتين ستطابقان المجلدات والمجلدات الفرعية فقط.
?
يطابق أي محرف مفرد.
[...]
يطابق أي واحد من المحارف المحصورة. يمثل زوج من المحارف يفصل بينهما وصلة (hyphen) تعبير مدى؛ ويُطابق أي محرف يقع بين هذين المحرفين، بما في ذلك الطرفان، باستخدام تسلسل الترتيب ومجموعة المحارف للمحلية الحالية. إذا كان المحرف الأول الذي يلي [ هو ! أو ^، فسيُطابق أي محرف غير محصور. يُحدد ترتيب فرز المحارف في تعبيرات المدى، والمحارف المضمنة في المدى، بواسطة المحلية الحالية وقيم متغيرات الصدفة LC_COLLATE أو LC_ALL، إذا كانت مضبوطة. وللحصول على التفسير التقليدي لتعبيرات المدى، حيث [a-d] تكافئ [abcd]، اضبط قيمة متغير الصدفة LC_ALL على C، أو فعل خيار الصدفة globasciiranges. يمكن مطابقة - بتضمينها كأول أو آخر محرف في المجموعة. ويمكن مطابقة ] بتضمينها كأول محرف في المجموعة.

داخل [ و ]، يمكن تحديد أصناف المحارف باستخدام الصيغة [:class:]، حيث class هو أحد الأصناف التالية المعرفة في معيار POSIX:

alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
يطابق صنف الأحرف أي حرف ينتمي إلى ذلك الصنف. يطابق صنف الأحرف word الحروف، والأرقام، والحرف _.

داخل [ و ]، يمكن تحديد صنف تكافؤ باستخدام الصيغة [=c=]، والتي تطابق جميع المحارف التي لها نفس وزن الترتيب (كما هو معرف في المحلية الحالية) مثل المحرف c.

داخل [ و ]، تطابق الصيغة [.symbol.] رمز الترتيب symbol.

إذا فُعّل خيار الصدفة extglob باستخدام المدمج shopt، ستتعرف الصدفة على عدة معاملات موسعة لمطابقة الأنماط. في الوصف التالي، pattern-list هي قائمة من نمط واحد أو أكثر مفصولة بـ |. يمكن تكوين أنماط مركبة باستخدام واحد أو أكثر من الأنماط الفرعية التالية:

?(pattern-list)
يطابق ظهوراً واحداً أو صفراً للأنماط المعطاة
*(pattern-list)
يطابق صفراً أو أكثر من مرات ظهور الأنماط المعطاة
+(pattern-list)
يطابق ظهوراً واحداً أو أكثر للأنماط المعطاة
@(pattern-list)
يطابق أحد الأنماط المعطاة
!(pattern-list)
يطابق أي شيء عدا أحد الأنماط المعطاة

يغير خيار extglob سلوك المحلل، حيث تُعامل الأقواس عادةً كعوامل ذات معنى نحوي. لضمان تحليل أنماط المطابقة الموسعة بشكل صحيح، تأكد من تفعيل extglob قبل تحليل التراكيب التي تحتوي على الأنماط، بما في ذلك دوال الصدفة واستبدالات الأوامر.

عند مطابقة أسماء الملفات، يحدد خيار الصدفة dotglob مجموعة أسماء الملفات التي تُختبر: عندما يكون dotglob مفعلاً، تشمل مجموعة أسماء الملفات جميع الملفات التي تبدأ بـ “.”، ولكن يجب مطابقة “.” و “..” بنمط أو نمط فرعي يبدأ بنقطة؛ وعندما يكون معطلاً، لا تتضمن المجموعة أي أسماء ملفات تبدأ بـ “.” ما لم يبدأ النمط أو النمط الفرعي بـ “.”. وكما ذكر أعلاه، فإن لـ “.” معنى خاصاً فقط عند مطابقة أسماء الملفات.

تكون مطابقة الأنماط الموسعة المعقدة مقابل السلاسل الطويلة بطيئة، خاصةً عندما تحتوي الأنماط على تبادلات والسلاسل على مطابقات متعددة. قد يكون استخدام مطابقات منفصلة مقابل سلاسل أقصر، أو استخدام مصفوفات من السلاسل بدلاً من سلسلة طويلة واحدة، أسرع.

إزالة الاقتباس

بعد التوسعات السابقة، تُزال جميع حالات ظهور المحارف \، و '، و " غير المقتبسة والتي لم تنتج عن أحد التوسعات المذكورة أعلاه.

إعادة التوجيه

قبل تنفيذ الأمر، قد تُوجه مدخلاته ومخرجاته (redirected) باستخدام تدوين خاص تفسره الصدفة. يسمح إعادة التوجيه بمضاعفة مقابض ملفات الأوامر، أو فتحها، أو إغلاقها، أو جعلها تشير إلى ملفات مختلفة، ويمكنه تغيير الملفات التي يقرأ منها الأمر ويكتب إليها. يمكن أيضاً استخدام إعادة التوجيه لتعديل مقابض الملفات في بيئة تنفيذ الصدفة الحالية. قد تسبق عوامل إعادة التوجيه التالية أو تظهر في أي مكان داخل أمر بسيط أو قد تتبع أي أمر. تُعالج عمليات إعادة التوجيه بالترتيب الذي تظهر به، من اليسار إلى اليمين.

كل عملية إعادة توجيه قد تُسبق برقم واصف ملف يمكن بدلاً من ذلك أن تُسبق بكلمة على الصيغة {varname}. في هذه الحالة، لكل عامل إعادة توجيه باستثناء >&- و <&-، ستخصص الصدفة واصف ملف أكبر من أو يساوي 10 وتعين قيمه لـ varname. إذا سُبق >&- أو <&- بـ {varname}، فإن قيمة varname تحدد واصف الملف المراد إغلاقه. إذا زُوّدت {varname}، فإن إعادة التوجيه تستمر إلى ما بعد نطاق الأمر، مما يسمح لمبرمج الصدفة بإدارة عمر واصف الملف يدوياً. يدير خيار الصدفة varredir_close هذا السلوك.

في الأوصاف التالية، إذا حُذف رقم واصف الملف، وكان المحرف الأول لعامل إعادة التوجيه هو <، فإن إعادة التوجيه تشير إلى المدخلات القياسية (واصف الملف 0). وإذا كان المحرف الأول لعامل إعادة التوجيه هو >، فإن إعادة التوجيه تشير إلى المخرجات القياسية (واصف الملف 1).

تخضع الكلمة التي تلي عامل إعادة التوجيه في الأوصاف التالية، ما لم يذكر خلاف ذلك، لتوسيع الأقواس المعقوفة، وتوسيع التلدة، وتوسيع المعاملات والمتغيرات، واستبدال الأوامر، والتوسيع الحسابي، وإزالة الاقتباس، وتوسيع اسم المسار، وتقسيم الكلمات. وإذا توسعت إلى أكثر من كلمة واحدة، تبلغ bash عن خطأ.

لاحظ أن ترتيب عمليات إعادة التوجيه مهم. على سبيل المثال، الأمر

ls > dirlist 2>&1

يوجه كلاً من المخرجات القياسية والخطأ القياسي إلى الملف dirlist، بينما الأمر

ls 2>&1 > dirlist

يوجه المخرجات القياسية فقط إلى الملف dirlist، لأن الخطأ القياسي ضُوعف من المخرجات القياسية قبل إعادة توجيه المخرجات القياسية إلى dirlist.

تتعامل Bash مع عدة أسماء ملفات بشكل خاص عندما تُستخدم في عمليات إعادة التوجيه، كما هو موصوف في الجدول التالي. إذا كان نظام التشغيل الذي تعمل عليه bash يوفر هذه الملفات الخاصة، فستستخدمها bash؛ وإلا فستحاكيها داخلياً بالسلوك الموصوف أدناه.

/dev/fd/fd
إذا كان fd عدداً صحيحاً صالحاً، يُضاعف واصف الملف fd.
/dev/stdin
يُضاعف واصف الملف 0.
/dev/stdout
يُضاعف واصف الملف 1.
/dev/stderr
يُضاعف واصف الملف 2.
/dev/tcp/host/port
إذا كان host اسم مضيف أو عنوان إنترنت صالحًا، وكان port رقم منفذ صحيحًا أو اسم خدمة، تحاول bash فتح مقبس TCP المقابل.
/dev/udp/host/port
إذا كان host اسم مضيف أو عنوان إنترنت صالحًا، وكان port رقم منفذ صحيحًا أو اسم خدمة، تحاول bash فتح مقبس UDP المقابل.

يؤدي الفشل في فتح ملف أو إنشائه إلى فشل إعادة التوجيه.

يجب استخدام إعادات التوجيه التي تستخدم واصفات ملفات أكبر من 9 بحذر، لأنها قد تتعارض مع واصفات الملفات التي تستخدمها الصدفة داخليًا.

لاحظ أن الأمر المدمج exec يمكنه جعل عمليات إعادة التوجيه تسري في الصدفة الحالية.

إعادة توجيه المدخلات

تؤدي إعادة توجيه المدخلات إلى فتح الملف الذي ينتج اسمه عن توسيع الكلمة للقراءة على واصف الملف n، أو المدخلات القياسية (واصف الملف 0) إذا لم يُحدد n.

الصيغة العامة لإعادة توجيه المدخلات هي:

[n]<word

إعادة توجيه المخرجات

تؤدي إعادة توجيه المخرجات إلى فتح الملف الذي ينتج اسمه عن توسيع الكلمة للكتابة على واصف الملف n، أو المخرجات القياسية (واصف الملف 1) إذا لم يُحدد n. إذا لم يكن الملف موجوداً، يُنشأ؛ وإذا كان موجوداً، يُقصر حجمه إلى الصفر.

الصيغة العامة لإعادة توجيه المخرجات هي:

[n]>word

إذا كان عامل إعادة التوجيه هو >، وكان الخيار noclobber للأمر المدمج set مفعلاً، فستفشل إعادة التوجيه إذا كان الملف الذي ينتج اسمه عن توسيع الكلمة موجوداً وكان ملفاً عادياً. أما إذا كان عامل إعادة التوجيه هو >|، أو كان عامل إعادة التوجيه هو > وكان الخيار noclobber للأمر المدمج set غير مفعل، فتُحاول إعادة التوجيه حتى لو كان الملف المسمى بـ الكلمة موجوداً.

إلحاق المخرجات الموجهة

تؤدي إعادة توجيه المخرجات بهذا الأسلوب إلى فتح الملف الذي ينتج اسمه عن توسيع الكلمة للإلحاق على واصف الملف n، أو المخرجات القياسية (واصف الملف 1) إذا لم يُحدد n. وإذا لم يكن الملف موجوداً، يُنشأ.

الصيغة العامة لإلحاق المخرجات هي:

[n]>>word

إعادة توجيه المخرجات القياسية والخطأ القياسي

يسمح هذا التركيب بإعادة توجيه كل من المخرجات القياسية (واصف الملف 1) ومخرجات الخطأ القياسي (واصف الملف 2) إلى الملف الذي اسمه هو توسيع الكلمة.

هناك تنسيقان لإعادة توجيه المخرج القياسي والخطأ القياسي:

&>word

و
>&word

يُفضل الشكل الأول من بين الشكلين. وهذا يعادل دلاليًا

>word 2>&1

عند استخدام الشكل الثاني، قد لا يتوسع word إلى رقم أو -. إذا حدث ذلك، تُطبق معاملات إعادة توجيه أخرى (انظر Duplicating File Descriptors أدناه) لأسباب تتعلق بالتوافق.

إلحاق المخرج القياسي والخطأ القياسي

يسمح هذا التركيب بإلحاق كل من المخرجات القياسية (واصف الملف 1) ومخرجات الخطأ القياسي (واصف الملف 2) بالملف الذي اسمه هو توسيع الكلمة.

تنسيق إلحاق المخرج القياسي والخطأ القياسي هو:

&>>word

وهذا يعادل دلاليًا

>>word 2>&1

(انظر Duplicating File Descriptors أدناه).

مستندات "هنا" (Here Documents)

يوجه هذا النوع من إعادة التوجيه الصدفة لقراءة المدخلات من المصدر الحالي حتى يُرى سطر يحتوي فقط على المحدد (بدون فراغات لاحقة). تُستخدم حينئذٍ جميع الأسطر المقروءة حتى تلك النقطة كمدخلات قياسية (أو واصف الملف n إذا حُدد n) للأمر.

تنسيق مستندات "هنا" هو:

[n]<<[-]word

here-document delimiter

لا يُنفذ توسيع المعاملات والمتغيرات، ولا استبدال الأوامر، ولا التوسيع الحسابي، ولا توسيع اسم المسار على الكلمة. إذا كان أي جزء من الكلمة مقتبساً، يكون المحدد هو نتيجة إزالة الاقتباس عن الكلمة، ولا تُوسع الأسطر في "المستند المضمن" (here-document). أما إذا كانت الكلمة غير مقتبسة، فتخضع جميع أسطر المستند المضمن لتوسيع المعاملات، واستبدال الأوامر، والتوسيع الحسابي، ويُتجاهل تتابع المحارف \<newline>، ويجب استخدام \ لاقتباس المحارف \، و $، و `.

إذا كان عامل إعادة التوجيه هو <<-، تُجرد جميع محارف الجدولة البادئة من أسطر المدخلات ومن السطر الذي يحتوي على المحدد. يسمح هذا بإزاحة المستندات المضمنة داخل سكربتات الصدفة بشكل طبيعي.

سلاسل "هنا" (Here Strings)

متغير من مستندات "هنا"، وتنسيقه هو:

[n]<<<word

يخضع word لتوسيع التلدة (~)، وتوسيع المعاملات والمتغيرات، واستبدال الأوامر، والتوسيع الحسابي، وإزالة الاقتباس. لا يتم إجراء توسيع لمسار الملف أو تقسيم الكلمات. تُقدم النتيجة كسلسلة نصية واحدة، مع إلحاق سطر جديد، إلى الأمر في مدخله القياسي (أو واصف الملف n إذا حُدد n).

مضاعفة واصفات الملفات

معامل إعادة التوجيه

[n]<&word

تُستخدم لمضاعفة واصفات ملفات المدخلات. إذا توسعت الكلمة إلى رقم واحد أو أكثر، يُجعل واصف الملف المشار إليه بـ n نسخة من واصف الملف ذاك. إذا كانت الأرقام في الكلمة لا تحدد واصف ملف مفتوح للمدخلات، يحدث خطأ إعادة توجيه. وإذا آلت الكلمة إلى -، يُغلق واصف الملف n. وإذا لم يُحدد n، تُستخدم المدخلات القياسية (واصف الملف 0).

المعامل

[n]>&word

تُستخدم بشكل مشابه لمضاعفة واصفات ملفات المخرجات. إذا لم يُحدد n، تُستخدم المخرجات القياسية (واصف الملف 1). وإذا كانت الأرقام في الكلمة لا تحدد واصف ملف مفتوح للمخرجات، يحدث خطأ إعادة توجيه. وإذا آلت الكلمة إلى -، يُغلق واصف الملف n. وكحالة خاصة، إذا حُذف n، ولم تتوسع الكلمة إلى رقم واحد أو أكثر أو -، تُوجه المخرجات القياسية والخطأ القياسي كما وُصف سابقاً.

نقل واصفات الملفات

معامل إعادة التوجيه

[n]<&digit-

ينقل واصف الملف digit إلى واصف الملف n، أو المدخل القياسي (واصف الملف 0) إذا لم يُحدد n. يُغلق digit بعد مضاعفته إلى n.

وبالمثل، معامل إعادة التوجيه

[n]>&digit-

ينقل واصف الملف digit إلى واصف الملف n، أو المخرج القياسي (واصف الملف 1) إذا لم يُحدد n.

فتح واصفات الملفات للقراءة والكتابة

معامل إعادة التوجيه

[n]<>word

يؤدي إلى فتح الملف الذي اسمه هو توسيع الكلمة لكل من القراءة والكتابة على واصف الملف n، أو على واصف الملف 0 إذا لم يُحدد n. إذا لم يكن الملف موجوداً، يُنشأ.

الأسماء المستعارة

تسمح الأسماء المستعارة باستبدال سلسلة نصية بكلمة عندما تُستخدم كأول كلمة في أمر بسيط. تحتفظ الصدفة بقائمة بالأسماء المستعارة التي يمكن ضبطها وإزالتها باستخدام الأوامر المدمجة alias و unalias (انظر SHELL BUILTIN COMMANDS أدناه). تُفحص أول كلمة من كل أمر بسيط، إذا كانت غير مقتبسة، لمعرفة ما إذا كان لها اسم مستعار. إذا كان الأمر كذلك، تُستبدل تلك الكلمة بنص الاسم المستعار. لا يجوز أن تظهر المحارف /، و $، و `، و = وأي من المحارف الوصفية للصدفة أو محارف الاقتباس المذكورة أعلاه في اسم مستعار. قد يحتوي نص الاستبدال على أي مدخلات صدفة صالحة، بما في ذلك المحارف الوصفية للصدفة. تُختبر الكلمة الأولى من نص الاستبدال بحثاً عن أسماء مستعارة، ولكن الكلمة المطابقة لاسم مستعار يجري توسيعه حالياً لا تُوسع مرة ثانية. هذا يعني أنه يمكن للمرء أن يضع اسماً مستعاراً لـ ls ليكون ls -F، على سبيل المثال، ولا تحاول bash توسيع نص الاستبدال بشكل متكرر. إذا كان المحرف الأخير لقيمة الاسم المستعار فراغاً، تُفحص أيضاً كلمة الأمر التالية التي تلي الاسم المستعار بحثاً عن توسيع لاسم مستعار.

تُنشأ الأسماء المستعارة وتُسرد باستخدام الأمر alias، وتُزال باستخدام الأمر unalias.

لا توجد آلية لاستخدام المعاملات في نص الاستبدال. إذا كانت المعاملات مطلوبة، فاستخدم دالة صدفة (انظر FUNCTIONS أدناه).

لا تُوسع الأسماء المستعارة عندما لا تكون الـ صدفة تفاعلية، ما لم يُضبط خيار الـ صدفة expand_aliases باستخدام shopt (انظر وصف shopt تحت SHELL BUILTIN COMMANDS أدناه).

القواعد المتعلقة بتعريف واستخدام الأسماء المستعارة مربكة نوعاً ما. تقرأ Bash دائماً سطراً كاملاً واحداً على الأقل من المدخلات، وجميع الأسطر التي تشكل أمراً مركباً، قبل تنفيذ أي من الأوامر في ذلك السطر أو الأمر المركب. تُوسع الأسماء المستعارة عند قراءة الأمر، وليس عند تنفيذه. لذلك، فإن تعريف اسم مستعار يظهر في نفس السطر مع أمر آخر لا يسري مفعوله حتى يُقرأ السطر التالي من المدخلات. لا تتأثر الأوامر التي تلي تعريف الاسم المستعار في ذلك السطر بالاسم المستعار الجديد. هذا السلوك يمثل أيضاً مشكلة عند تنفيذ الدوال. تُوسع الأسماء المستعارة عند قراءة تعريف الدالة، وليس عند تنفيذ الدالة، لأن تعريف الدالة هو في حد ذاته أمر. ونتيجة لذلك، فإن الأسماء المستعارة المعرفة في دالة لا تتوفر إلا بعد تنفيذ تلك الدالة. لكي تكون آمناً، ضع دائماً تعريفات الأسماء المستعارة في سطر منفصل، ولا تستخدم alias في الأوامر المركبة.

لجميع الأغراض تقريباً، حلت دوال الصدفة محل الأسماء المستعارة.

الوظائف

تقوم دالة الصدفة، المعرفة كما وُصف أعلاه تحت SHELL GRAMMAR، بتخزين سلسلة من الأوامر لتنفيذها لاحقاً. عندما يُستخدم اسم دالة صدفة كاسم أمر بسيط، تُنفذ قائمة الأوامر المرتبطة باسم تلك الدالة. تُنفذ الدوال في سياق الصدفة الحالية؛ ولا تُنشأ عملية جديدة لتفسيرها (قارن هذا بتنفيذ سكربت صدفة). عند تنفيذ دالة، تصبح معاملات الدالة هي المعاملات الموضعية أثناء تنفيذها. يُحدث المعامل الخاص # ليعكس التغيير. المعامل الخاص 0 لا يتغير. يُعين العنصر الأول من المتغير FUNCNAME ليكون اسم الدالة أثناء تنفيذ الدالة.

جميع الجوانب الأخرى لبيئة تنفيذ الـ صدفة متطابقة بين الدالة والـ المستدعِي مع هذه الاستثناءات: مصائد (traps) ‏ DEBUG و RETURN (انظر وصف trap المدمج تحت SHELL BUILTIN COMMANDS أدناه) لا تُورث ما لم تُعط الدالة سمة trace (انظر وصف declare المدمج أدناه) أو يُفعل خيار الـ صدفة -o functrace باستخدام set المدمج (وفي هذه الحالة ترث جميع الدوال مصائد DEBUG و RETURN)، ولا تُورث مصيدة ERR ما لم يُفعل خيار الـ صدفة -o errtrace.

يمكن التصريح عن متغيرات محلية للدالة باستخدام الأمر المدمج local (متغيرات محلية). عادةً ما تُشارك المتغيرات وقيمها بين الدالة ومستدعيها (caller). إذا صُرّح عن متغير كـ local، فإن نطاق رؤية المتغير يقتصر على تلك الدالة وأبنائها (بما في ذلك الدوال التي تستدعيها).

في الوصف التالي، النطاق الحالي هو دالة يجري تنفيذها حالياً. تتكون النطاقات السابقة من مستدعي تلك الدالة وهكذا، وصولاً إلى النطاق "العالمي"، حيث لا تنفذ الصدفة أي دالة صدفة. وبناءً على ذلك، فإن المتغير المحلي في النطاق الحالي هو متغير صُرّح عنه باستخدام الأمرين المدمجين local أو declare في الدالة التي تُنفذ حالياً.

تقوم المتغيرات المحلية بـ "حجب" (shadow) المتغيرات التي تحمل نفس الاسم والمصرح عنها في نطاقات سابقة. على سبيل المثال، يقوم متغير محلي مُصرح عنه في دالة بإخفاء متغير عالمي يحمل نفس الاسم: تشير المراجع والتعيينات إلى المتغير المحلي، مما يترك المتغير العالمي دون تعديل. عندما تعود الدالة، يصبح المتغير العالمي مرئياً مرة أخرى.

تستخدم الصدفة النطاق الديناميكي (dynamic scoping) للتحكم في رؤية المتغير داخل الدوال. مع النطاق الديناميكي، تكون المتغيرات المرئية وقيمها نتيجة لتسلسل استدعاءات الدوال التي أدت بالتنفيذ للوصول إلى الدالة الحالية. تعتمد قيمة المتغير التي تراها الدالة على قيمتها داخل مستدعيها، إن وُجد، سواء كان ذلك المستدعي هو النطاق "العالمي" أو دالة صدفة أخرى. هذه هي أيضاً القيمة التي "يحجبها" التصريح عن المتغير المحلي، والقيمة التي تُستعاد عند عودة الدالة.

على سبيل المثال، إذا صُرّح عن متغير var كمتغير محلي في الدالة func1، واستدعت func1 دالة أخرى func2، فإن المراجع لـ var التي تُجرى من داخل func2 ستؤول إلى المتغير المحلي var من func1، حاجبةً أي متغير عالمي يسمى var.

يعمل الأمر المدمج unset أيضاً باستخدام نفس النطاق الديناميكي: إذا كان المتغير محلياً في النطاق الحالي، فسيقوم unset بإلغاء تعيينه؛ وإلا فإن إلغاء التعيين سيشير إلى المتغير الموجود في أي نطاق استدعاء كما وُصف أعلاه. إذا أُلغي تعيين متغير في النطاق المحلي الحالي، فسيظل كذلك (يظهر كغير معين) حتى يُعاد تعيينه في ذلك النطاق أو حتى تعود الدالة. وبمجرد عودة الدالة، تصبح أي نسخة من المتغير في نطاق سابق مرئية. إذا وقع إلغاء التعيين على متغير في نطاق سابق، فإن أي نسخة من متغير بهذا الاسم كانت محجوبة ستصبح مرئية (انظر أدناه كيف يغير خيار الصدفة localvar_unset هذا السلوك).

متغير FUNCNEST، إذا ضُبط على قيمة عددية أكبر من 0، يحدد أقصى مستوى لتداخل الدوال. تؤدي استدعاءات الدوال التي تتجاوز الحد إلى إجهاض الأمر بالكامل.

إذا نُفذ الأمر المدمج return في دالة، تكتمل الدالة ويُستأنف التنفيذ مع الأمر التالي بعد استدعاء الدالة. يُنفذ أي أمر مرتبط بالمصيدة RETURN قبل استئناف التنفيذ. عندما تكتمل الدالة، تُستعاد قيم المعاملات الموضعية والمعامل الخاص # إلى القيم التي كانت عليها قبل تنفيذ الدالة.

يمكن إدراج أسماء الدوال وتعريفاتها باستخدام الخيار -f للأمرين المدمجين declare أو typeset. سيقوم الخيار -F للأمرين declare أو typeset بإدراج أسماء الدوال فقط (واختيارياً ملف المصدر ورقم السطر، إذا كان خيار الصدفة extdebug مفعلاً). يمكن تصدير الدوال بحيث تُعرّف آلياً في عمليات الصدفة الابنة (تلك التي تُنشأ عند تنفيذ استدعاء صدفة منفصل) باستخدام الخيار -f للأمر المدمج export. يمكن حذف تعريف دالة باستخدام الخيار -f للأمر المدمج unset.

قد تكون الدوال عودية (recursive). يمكن استخدام متغير FUNCNEST للحد من عمق مكدس استدعاءات الدوال وتقييد عدد استدعاءات الدوال. مبدئياً، لا يُفرض أي حد على عدد الاستدعاءات العودية.

التقييم الحسابي

تسمح الصدفة بتقويم التعبيرات الحسابية في ظروف معينة (انظر الأوامر المدمجة let و declare، والأمر المركب ((، و Arithmetic Expansion). يُجرى التقويم في أعداد صحيحة ثابتة العرض دون فحص للتجاوز (overflow)، على الرغم من أن القسمة على 0 تُصطاد وتُعلم كخطأ. العوامل وأولويتها، وترابطها، وقيمها هي نفس ما هي عليه في لغة C. قائمة العوامل التالية مجمعة في مستويات من العوامل متساوية الأولوية. تُدرج المستويات بترتيب تناقص الأولوية.

الزيادة اللاحقة والنقصان اللاحق للمتغير
- +
الناقص والزائد الأحادي
++id --id
الزيادة السابقة والنقصان السابق للمتغير
! ~
النفي المنطقي ونفي البتات
**
الرفع إلى أس
* / %
الضرب، القسمة، باقي القسمة
+ -
الجمع، الطرح
<< >>
إزاحة البتات لليسار ولليمين
<= >= < >
المقارنة
== !=
المساواة وعدم المساواة
&
AND للبتات
^
OR الحصرية للبتات (XOR)
|
OR للبتات
&&
AND منطقية
||
OR منطقية
معامل شرطي
= *= /= %= += -= <<= >>= &= ^= |=
تعيين
فاصلة

يُسمح بمتغيرات الصدفة كمعاملات؛ ويُنفذ توسيع المعاملات قبل تقويم التعبير. داخل التعبير، يمكن أيضاً الإشارة إلى متغيرات الصدفة بالاسم دون استخدام صيغة توسيع المعاملات. متغير الصدفة الفارغ أو غير المعين يؤول إلى 0 عند الإشارة إليه بالاسم دون استخدام صيغة توسيع المعاملات. تُقوّم قيمة المتغير كتعبير حسابي عند الإشارة إليه، أو عندما يُعين قيمة لمتغير أُعطي صفة integer باستخدام declare -i. تؤول القيمة الفارغة إلى 0. لا يشترط أن يكون لمتغير الصدفة صفة integer مفعّلة ليُستخدم في تعبير.

تتبع الثوابت الصحيحة تعريف لغة C، بدون لاحقات أو ثوابت محارف. تُفسر الثوابت التي تبدأ بـ 0 كأرقام ثمانية. يشير البدء بـ 0x أو 0X إلى نظام سداسي عشر. بخلاف ذلك، تأخذ الأرقام الشكل [base#]n، حيث يكون base الاختياري عددًا عشريًا بين 2 و 64 يمثل القاعدة الحسابية، و n هو رقم في تلك القاعدة. إذا حُذف base#، تُستخدم القاعدة 10. عند تحديد n، إذا لزم محرف غير رقمي، تُمثل الأرقام الأكبر من 9 بالأحرف الصغيرة، والأحرف الكبيرة، و @، و _، بهذا الترتيب. إذا كان base أقل من أو يساوي 36، يمكن استخدام الأحرف الصغيرة والكبيرة بالتبادل لتمثيل الأرقام بين 10 و 35.

تُقوّم العوامل بترتيب الأولوية. تُقوّم التعبيرات الفرعية بين قوسين أولاً وقد تتجاوز قواعد الأولوية المذكورة أعلاه.

التعبيرات الشرطية

تُستخدم التعبيرات الشرطية بواسطة الأمر المركب [[ والأوامر المدمجة test و [ لاختبار سمات الملفات وإجراء مقارنات السلاسل النصية والحسابية. تحدد أوامر test و [ سلوكها بناءً على عدد المعاملات؛ انظر أوصاف تلك الأوامر لأي إجراءات أخرى خاصة بالأوامر.

تتكون التعبيرات من الأساسيات الأحادية أو الثنائية التالية. تتعامل Bash مع عدة أسماء ملفات بشكل خاص عندما تُستخدم في التعبيرات. إذا كان نظام التشغيل الذي تعمل عليه bash يوفر هذه الملفات الخاصة، فستستخدمها bash؛ وإلا فستحاكيها داخلياً بهذا السلوك: إذا كان أي معامل ملف لأحد الأساسيات على الصيغة /dev/fd/n، فيُفحص واصف الملف n. وإذا كان معامل الملف لأحد الأساسيات هو أحد /dev/stdin أو /dev/stdout أو /dev/stderr، فيُفحص واصف الملف 0 أو 1 أو 2، على التوالي.

ما لم ينص على خلاف ذلك، فإن الأساسيات التي تعمل على الملفات تتبع الروابط الرمزية وتعمل على هدف الرابط، بدلاً من الرابط نفسه.

عند الاستخدام مع [[، يقوم العاملان < و > بالفرز معجمياً باستخدام المحلية الحالية. أما الأمر test فيفرز باستخدام ترتيب ASCII.

صحيح إذا كان file موجودًا.
صحيح إذا كان file موجودًا وكان ملف جهاز كتلي خاص.
صحيح إذا كان file موجودًا وكان ملف محارف خاص.
صحيح إذا كان file موجودًا وكان دليلاً.
صحيح إذا كان file موجودًا.
صحيح إذا كان file موجودًا وكان ملفًا عاديًا.
صحيح إذا كان file موجودًا وكانت سمة set-group-id مضبوطة له.
صحيح إذا كان file موجودًا وكان رابطًا رمزيًا.
صحيح إذا كان الملف موجوداً وبِت "الالتصاق" (sticky) مضبوطاً.
صحيح إذا كان file موجودًا وكان أنبوبًا مسمى (FIFO).
صحيح إذا كان file موجودًا وكان قابلاً للقراءة.
صحيح إذا كان file موجودًا وكان حجمه أكبر من صفر.
صحيح إذا كان واصف الملف fd مفتوحًا ويشير إلى طرفية.
صحيح إذا كان file موجودًا وكان بت set-user-id مضبوطًا له.
صحيح إذا كان file موجودًا وكان قابلاً للكتابة.
صحيح إذا كان file موجودًا وكان قابلاً للتنفيذ.
صحيح إذا كان file موجودًا وكان مملوكًا لمعرف المجموعة الفعلي (effective group id).
صحيح إذا كان file موجودًا وكان رابطًا رمزيًا.
صحيح إذا كان الملف موجوداً وعُدّل منذ آخر قراءة له.
صحيح إذا كان file موجودًا وكان مملوكًا لمعرف المستخدم الفعلي (effective user id).
صحيح إذا كان ملف موجودًا وكان مقبسًا.
ملف1 -ef ملف2
صحيح إذا كان ملف1 و ملف2 يشيران إلى نفس الجهاز وأرقام الفهرسة (inode).
ملف1 -nt ملف2
صحيح إذا كان ملف1 أحدث (وفقًا لتاريخ التعديل) من ملف2، أو إذا كان ملف1 موجودًا و ملف2 غير موجود.
ملف1 -ot ملف2
صحيح إذا كان ملف1 أقدم من ملف2، أو إذا كان ملف2 موجودًا و ملف1 غير موجود.
صحيح إذا كان خيار الصدفة اسم_الخيار مُفعلًا. انظر قائمة الخيارات تحت وصف الخيار -o للأمر المدمج set أدناه.
صحيح إذا كان متغير الصدفة varname مضبوطاً (عُيّنت له قيمة).
صحيح إذا كان متغير الصدفة اسم_المتغير مُعينًا وكان مرجع اسم.
صحيح إذا كان طول سلسلة صفرًا.
سلسلة
صحيح إذا كان طول سلسلة غير صفري.
سلسلة1 = سلسلة2
صحيح إذا كانت السلاسل متساوية. يجب استخدام = مع الأمر test للتوافق مع POSIX. عند الاستخدام مع الأمر [[، يؤدي هذا مطابقة الأنماط كما وُصف أعلاه (Compound Commands).
سلسلة1 != سلسلة2
صحيح إذا لم تكن السلسلتان متساويتين.
سلسلة1 < سلسلة2
صحيح إذا كانت سلسلة1 تسبق سلسلة2 في الترتيب المعجمي.
سلسلة1 > سلسلة2
صحيح إذا كانت سلسلة1 تأتي بعد سلسلة2 في الترتيب المعجمي.
معطى1 OP معطى2
OP هو أحد -eq، أو -ne، أو -lt، أو -le، أو -gt، أو -ge. تعيد هذه العوامل الثنائية الحسابية قيمة صحيح إذا كان arg1 مساوياً لـ، أو غير مساوٍ لـ، أو أقل من، أو أقل من أو يساوي، أو أكبر من، أو أكبر من أو يساوي arg2، على التوالي. قد يكون arg1 و arg2 أعداداً صحيحة موجبة أو سالبة. عند الاستخدام مع الأمر [[، يُقوّم arg1 و arg2 كتعبيرات حسابية (انظر ARITHMETIC EVALUATION أعلاه).

توسيع الأوامر البسيطة

عند تنفيذ أمر بسيط، تقوم الصدفة بالتوسعات، والتعيينات، وعمليات إعادة التوجيه التالية، من اليسار إلى اليمين، بالترتيب التالي.

1.
تُحفظ الكلمات التي وضع المحلل عليها علامة تعيينات متغيرات (تلك التي تسبق اسم الأمر) وإعادة التوجيهات لمعالجتها لاحقًا.
2.
تُوسع الكلمات التي ليست تعيينات متغيرات أو إعادة توجيهات. إذا بقيت أي كلمات بعد التوسيع، تُتخذ الكلمة الأولى كاسم للأمر والكلمات المتبقية كمعطيات.
3.
تُنفذ إعادة التوجيهات كما هو موصوف أعلاه تحت REDIRECTION.
4.
يخضع النص الموجود بعد = في كل تعيين متغير لتوسيع التيلدا (tilde)، وتوسيع المعلمات، واستبدال الأوامر، والتوسيع الحسابي، وإزالة الاقتباسات قبل إسناده إلى المتغير.

إذا لم ينتج اسم أمر، فإن تعيينات المتغيرات تؤثر على بيئة الصدفة الحالية. في حالة وجود مثل هذا الأمر (الذي يتكون فقط من جمل تعيين وإعادة توجيه)، تُنفذ جمل التعيين قبل إعادة التوجيه. خلاف ذلك، تُضاف المتغيرات إلى بيئة الأمر المُنفذ ولا تؤثر على بيئة الصدفة الحالية. إذا حاولت أي من التعيينات إسناد قيمة لمتغير للقراءة فقط، يحدث خطأ، ويخرج الأمر بحالة غير صفرية.

إذا لم ينتج اسم أمر، تُنفذ إعادة التوجيهات، لكنها لا تؤثر على بيئة الصدفة الحالية. يؤدي خطأ إعادة التوجيه إلى خروج الأمر بحالة غير صفرية.

إذا تبقى اسم أمر بعد التوسيع، يستمر التنفيذ كما هو موصوف أدناه. وإلا، يخرج الأمر. إذا احتوى أحد التوسعات على استبدال أمر، فإن حالة الخروج للأمر هي حالة الخروج لآخر استبدال أمر نُفذ. وإذا لم تكن هناك استبدالات أوامر، يخرج الأمر بحالة صفر.

تنفيذ الأوامر

بعد تقسيم الأمر إلى كلمات، إذا نتج عن ذلك أمر بسيط وقائمة اختيارية من المعاملات، تُتخذ الإجراءات التالية.

إذا لم يحتوي اسم الأمر على شرطات مائلة، تحاول الصدفة تحديد مكانه. إذا وجدت دالة صدفة بهذا الاسم، تُستدعى تلك الدالة كما هو موصوف أعلاه في FUNCTIONS. إذا لم يطابق الاسم أي دالة، تبحث الصدفة عنه في قائمة أوامر الصدفة المدمجة. إذا وُجد تطابق، يُستدعى ذلك الأمر المدمج.

إذا لم يكن الاسم دالة صدفة ولا أمراً مدمجاً، ولا يحتوي على مائلات (slashes)، تبحث bash في كل عنصر من عناصر PATH عن مجلد يحتوي على ملف قابل للتنفيذ بهذا الاسم. تستخدم Bash جدول تجزئة (hash table) لتذكر أسماء المسارات الكاملة للملفات القابلة للتنفيذ (انظر hash تحت SHELL BUILTIN COMMANDS أدناه). يُجرى بحث كامل في المجلدات الموجودة في PATH فقط إذا لم يُعثر على الأمر في جدول التجزئة. إذا لم ينجح البحث، تبحث الصدفة عن دالة صدفة معرفة تسمى command_not_found_handle. إذا كانت تلك الدالة موجودة، تُستدعى في بيئة تنفيذ منفصلة مع الأمر الأصلي ومعاملات الأمر الأصلي كمعاملات لها، وتصبح حالة خروج الدالة هي حالة خروج تلك الصدفة الفرعية. وإذا لم تكن تلك الدالة معرفة، تطبع الصدفة رسالة خطأ وتعيد حالة خروج 127.

إذا نجح البحث، أو إذا احتوى اسم الأمر على شرطة مائلة واحدة أو أكثر، تنفذ الصدفة البرنامج المسمى في بيئة تنفيذ منفصلة. يُضبط المعطى 0 على الاسم المعطى، وتُضبط المعطيات المتبقية للأمر على المعطيات المعطاة، إن وجدت.

إذا فشل هذا التنفيذ لأن الملف ليس بتنسيق قابل للتنفيذ، ولم يكن الملف مجلداً، فيُفترض أنه سكربت صدفة، وهو ملف يحتوي على أوامر صدفة، وتُنشئ الصدفة نسخة جديدة من نفسها لتنفيذه. تُعيد هذه الصدفة الفرعية تهيئة نفسها، بحيث يكون التأثير كما لو استُدعيت صدفة جديدة للتعامل مع السكربت، مع استثناء أن مواقع الأوامر التي تذكرها المستدعِي (انظر hash أدناه تحت SHELL BUILTIN COMMANDS) يحتفظ بها المستدعَى.

إذا كان البرنامج ملفًا يبدأ بـ #!، فإن بقية السطر الأول تحدد مفسرًا للبرنامج. تنفذ الصدفة المفسر المحدد في أنظمة التشغيل التي لا تتعامل مع هذا التنسيق القابل للتنفيذ بنفسها. تتكون معطيات المفسر من معطى اختياري واحد يلي اسم المفسر في السطر الأول من البرنامج، يليه اسم البرنامج، ثم معطيات الأمر، إن وجدت.

بيئة تنفيذ الأوامر

للصدفة بيئة تنفيذ، تتكون مما يلي:

  • الملفات المفتوحة الموروثة من الصدفة عند الاستدعاء، كما عُدلت بواسطة عمليات إعادة التوجيه المقدمة للأمر المدمج exec
  • مجلد العمل الحالي كما هو مضبوط بواسطة cd، أو pushd، أو popd، أو موروثاً بواسطة الصدفة عند الاستدعاء
  • قناع وضع إنشاء الملفات (umask) كما هو مضبوط بواسطة umask أو موروثاً من والد الصدفة
  • المصائد الحالية المضبوطة بواسطة trap
  • معاملات الصدفة التي ضُبطت عن طريق تعيين المتغيرات أو باستخدام set أو الموروثة من والد الصدفة في البيئة
  • دوال الصدفة المعرفة أثناء التنفيذ أو الموروثة من والد الصدفة في البيئة
  • الخيارات المفعّلة عند الاستدعاء (إما مبدئياً أو بمعاملات سطر الأوامر) أو بواسطة set
  • الخيارات المفعّلة بواسطة shopt
  • الأسماء المستعارة للصدفة المعرفة بـ alias
  • معرفات العمليات المختلفة، بما في ذلك معرفات وظائف الخلفية، وقيمة $$، وقيمة PPID

عندما يراد تنفيذ أمر بسيط بخلاف الأوامر المدمجة أو دوال الصدفة، فإنه يُستدعى في بيئة تنفيذ منفصلة تتكون مما يلي. ما لم يُذكر خلاف ذلك، تُورث القيم من الصدفة.

  • ملفات الصدفة المفتوحة، بالإضافة إلى أي تعديلات وإضافات محددة بواسطة عمليات إعادة التوجيه للأمر
  • مجلد العمل الحالي
  • قناع وضع إنشاء الملفات
  • متغيرات ودوال الصدفة المحددة للتصدير، جنباً إلى جنب مع المتغيرات المصدرة للأمر، والممررة في البيئة
  • تُعاد المصائد التي اصطادتها الصدفة إلى القيم الموروثة من والد الصدفة، والمصائد التي تتجاهلها الصدفة تُتجاهل

لا يمكن لأمر استُدعي في هذه البيئة المنفصلة أن يؤثر على بيئة تنفيذ الصدفة.

الصدفة الفرعية subshell هي نسخة من عملية الصدفة.

يُستدعى استبدال الأوامر، والأوامر المجمعة بين قوسين، والأوامر غير المتزامنة في بيئة صدفة فرعية هي نسخة طبق الأصل من بيئة الصدفة، باستثناء أن المصائد التي اصطادتها الصدفة تُعاد إلى القيم التي ورثتها الصدفة من والدها عند الاستدعاء. تُنفذ أيضاً الأوامر المدمجة التي تُستدعى كجزء من أنبوب في بيئة صدفة فرعية. لا يمكن للتغييرات التي أُجريت على بيئة الصدفة الفرعية أن تؤثر على بيئة تنفيذ الصدفة.

ترث الصدف الفرعية التي نُسلت لتنفيذ استبدالات الأوامر قيمة الخيار -e من الصدفة الوالدة. عندما لا تكون في وضع posix، تمسح bash الخيار -e في مثل هذه الصدف الفرعية.

إذا تبع الأمر & ولم يكن التحكم في الوظائف نشطاً، فإن المدخلات القياسية المبدئية للأمر هي الملف الفارغ /dev/null. وإلا، فإن الأمر المستدعى يرث واصفات الملفات للصدفة المستدعِية كما عُدلت بواسطة عمليات إعادة التوجيه.

البيئة

عند استدعاء برنامج ما، يُعطى مصفوفة من السلاسل تسمى البيئة. هذه قائمة من أزواج الاسم-القيمة، على شكل الاسم=القيمة.

توفر الصدفة عدة طرق للتلاعب بالبيئة. عند الاستدعاء، تمسح الصدفة بيئتها الخاصة وتنشئ معاملاً لكل اسم يُعثر عليه، وتُعلمه آلياً لـ التصدير للعمليات الابنة. ترث الأوامر المنفذة البيئة. تسمح الأوامر export و declare -x بإضافة وحذف المعاملات والدوال من البيئة. إذا عُدلت قيمة معامل في البيئة، تصبح القيمة الجديدة جزءاً من البيئة، لتحل محل القديمة. تتكون البيئة الموروثة من قبل أي أمر مُنفذ من بيئة الصدفة الأولية، والتي قد تُعدل قيمها في الصدفة، ناقصاً أي أزواج أُزيلت بواسطة الأمر unset، بالإضافة إلى أي إضافات عبر الأمرين export و declare -x.

بيئة أي أمر بسيط أو دالة قد تُعزز مؤقتاً ببادئتها بتعيينات المعاملات، كما وُصف أعلاه في PARAMETERS. تؤثر جمل التعيين هذه فقط على البيئة التي يراها ذلك الأمر.

إذا ضُبط الخيار -k (انظر الأمر المدمج set أدناه)، فإن جميع تعيينات المعلمات توضع في بيئة الأمر، وليس فقط تلك التي تسبق اسم الأمر.

عندما تستدعي bash أمراً خارجياً، يُعين المتغير _ ليكون اسم الملف الكامل للأمر ويُمرر إلى ذلك الأمر في بيئته.

حالة الخروج

حالة خروج الأمر المنفذ هي القيمة التي يعيدها استدعاء النظام waitpid أو دالة مكافئة. تقع حالات الخروج بين 0 و 255، رغم أن الصدفة قد تستخدم قيمًا فوق 125 بشكل خاص، كما هو موضح أدناه. تقتصر حالات الخروج من أوامر الصدفة المدمجة والأوامر المركبة أيضًا على هذا النطاق. في ظروف معينة، ستستخدم الصدفة قيمًا خاصة للإشارة إلى أوضاع فشل محددة.

لأغراض الصدفة، فإن الأمر الذي يخرج بحالة خروج صفر قد نجح. تشير حالة الخروج صفر إلى النجاح. بينما تشير حالة الخروج غير الصفرية إلى الفشل. عندما ينتهي أمر بسبب إشارة قاتلة N، تستخدم bash القيمة 128+N كحالة خروج.

إذا لم يُعثر على أمر، فإن العملية الابنة التي أُنشئت لتنفيذه تعيد حالة 127. إذا وُجد الأمر ولكن لم يكن قابلاً للتنفيذ، فإن حالة الإعادة هي 126.

إذا فشل أمر بسبب خطأ أثناء التوسيع أو إعادة التوجيه، فإن حالة الخروج تكون أكبر من الصفر.

تعيد أوامر الصدفة المدمجة حالة 0 (صحيح) إذا نجحت، وغير ذلك (خاطئ) إذا حدث خطأ أثناء تنفيذها. تعيد جميع الأوامر المدمجة حالة خروج 2 للإشارة إلى الاستخدام غير الصحيح، عادةً خيارات غير صالحة أو معطيات مفقودة.

تتوفر حالة خروج آخر أمر في المعلمة الخاصة $?.

تعيد bash نفسها حالة خروج آخر أمر نُفذ، ما لم يحدث خطأ في بناء الجملة، وفي هذه الحالة تخرج بقيمة غير صفرية. انظر أيضًا الأمر المدمج exit أدناه.

إشارات

عندما تكون bash تفاعلية، وفي حالة عدم وجود أي مصائد، فإنها تتجاهل SIGTERM (حتى لا يقتل kill 0 صدفة تفاعلية)، وتُصطاد SIGINT وتُعالج (حتى يكون الأمر المدمج wait قابلاً للمقاطعة). في جميع الحالات، تتجاهل bash الإشارة SIGQUIT. وإذا كان التحكم في الوظائف مفعلاً، تتجاهل bash الإشارات SIGTTIN، و SIGTTOU، و SIGTSTP.

الأوامر غير المدمجة التي تشغلها bash لها معالجات إشارات مضبوطة على القيم التي ورثتها الصدفة من والدها. عندما لا يكون التحكم في الوظائف مفعلاً، تتجاهل الأوامر غير المتزامنة الإشارات SIGINT و SIGQUIT بالإضافة إلى هذه المعالجات الموروثة. الأوامر التي تُشغل نتيجة لاستبدال الأوامر تتجاهل إشارات التحكم في الوظائف المتولدة من لوحة المفاتيح SIGTTIN، و SIGTTOU، و SIGTSTP.

تخرج الصدفة مبدئياً عند تلقي SIGHUP. قبل الخروج، تعيد الصدفة التفاعلية إرسال SIGHUP لجميع الوظائف، سواء كانت تعمل أو متوقفة. تُرسل SIGCONT للوظائف المتوقفة لضمان تلقيها SIGHUP. لمنع الصدفة من إرسال الإشارة لوظيفة معينة، يجب إزالتها من جدول الوظائف باستخدام الأمر المدمج disown (انظر SHELL BUILTIN COMMANDS أدناه) أو تعليمها لعدم تلقي SIGHUP باستخدام disown -h.

إذا ضُبط خيار الصدفة huponexit باستخدام shopt، ترسل bash إشارة SIGHUP لجميع الوظائف عند خروج صدفة ولوج تفاعلية.

إذا كانت bash تنتظر اكتمال أمر ما وتلقت إشارة أُعدت لها مصيدة، فلن تُنفذ المصيدة حتى يكتمل الأمر. عندما تنتظر bash أمراً غير متزامن عبر الأمر المدمج wait، فإن استقبال إشارة أُعدت لها مصيدة سيجعل الأمر المدمج wait يعود فوراً بحالة خروج أكبر من 128، وتُنفذ المصيدة مباشرة بعد ذلك.

عندما لا يكون التحكم في الوظائف مفعلاً، وتنتظر bash اكتمال أمر في الواجهة، تتلقى الصدفة الإشارات المتولدة من لوحة المفاتيح مثل SIGINT (التي تتولد عادةً بواسطة ^C) والتي ينوي المستخدمون عادةً إرسالها إلى ذلك الأمر. يحدث هذا لأن الصدفة والأمر يقعان في نفس مجموعة عمليات الطرفية، و ^C ترسل SIGINT لجميع العمليات في تلك المجموعة.

عندما تعمل bash بدون تفعيل التحكم في الوظائف وتتلقى SIGINT أثناء انتظارها لأمر في الواجهة، فإنها تنتظر حتى ينتهي ذلك الأمر ثم تقرر ما ستفعله حيال SIGINT:

1.
إذا انتهى الأمر بسبب SIGINT، تستنتج bash أن المستخدم قصد إنهاء السكربت بالكامل، وتتصرف بناءً على SIGINT (على سبيل المثال، بتشغيل مصيدة SIGINT أو الخروج بنفسها)؛
2.
إذا لم ينتهِ الأمر بسبب SIGINT، فهذا يعني أن البرنامج عالج SIGINT بنفسه ولم يعاملها كإشارة قاتلة. في تلك الحالة، لا تعامل bash الإشارة SIGINT كإشارة قاتلة أيضًا، بل تفترض أن SIGINT استُخدمت كجزء من عملية البرنامج العادية (على سبيل المثال، يستخدمها emacs لإحباط أوامر التحرير) أو أنه جرى التخلص منها عمدًا. ومع ذلك، ستشغل bash أي مصيدة ضُبطت على SIGINT، كما تفعل مع أي إشارة أخرى مُصادة تستقبلها أثناء انتظارها اكتمال أمر الواجهة، وذلك من أجل التوافق.

التحكم في المهام

يشير التحكم في المهام إلى القدرة على إيقاف (تعليق) تنفيذ العمليات انتقائيًا ومواصلة (استئناف) تنفيذها في وقت لاحق. عادةً ما يستخدم المستخدم هذه الميزة عبر واجهة تفاعلية يوفرها بشكل مشترك برنامج تشغيل الطرفية في نواة نظام التشغيل و bash.

تربط الصدفة وظيفة بكل أنبوب. وهي تحتفظ بجدول للوظائف التي تُنفذ حالياً، والتي يمكن سردها باستخدام الأمر jobs. عندما تبدأ bash وظيفة بشكل غير متزامن (في الخلفية)، تطبع سطراً يبدو هكذا:

[1] 25647

مما يشير إلى أن هذه المهمة هي المهمة رقم 1 وأن معرف العملية لآخر عملية في الأنبوب المرتبط بهذه المهمة هو 25647. جميع العمليات في أنبوب واحد هي أعضاء في نفس المهمة. تستخدم Bash تجريد المهمة كأساس للتحكم في المهام.

لتسهيل تنفيذ واجهة المستخدم للتحكم في الوظائف، يحتفظ نظام التشغيل بمفهوم معرف مجموعة عمليات الطرفية الحالية. يتلقى أعضاء مجموعة العمليات هذه (العمليات التي يتساوى معرف مجموعة عملياتها مع معرف مجموعة عمليات الطرفية الحالية) الإشارات المتولدة من لوحة المفاتيح مثل SIGINT. يُقال إن هذه العمليات في الواجهة. أما عمليات الخلفية فهي تلك التي يختلف معرف مجموعة عملياتها عن معرف الطرفية؛ وتكون هذه العمليات منيعة ضد الإشارات المتولدة من لوحة المفاتيح. يُسمح فقط لعمليات الواجهة بالقراءة من الطرفية، أو الكتابة إليها إذا حدد المستخدم ذلك باستخدام stty tostop. عمليات الخلفية التي تحاول القراءة من الطرفية (أو الكتابة إليها عند تفعيل stty tostop) تُرسل إليها إشارة SIGTTIN (SIGTTOU) من قبل برنامج قيادة الطرفية في النواة، مما يؤدي إلى تعليق العملية ما لم تُصطد الإشارة.

إذا كان نظام التشغيل الذي تعمل عليه bash يدعم التحكم في الوظائف، فإن bash تحتوي على تسهيلات لاستخدامه. كتابة محرف التعليق (عادةً ^Z، Control-Z) أثناء تشغيل العملية يؤدي إلى إيقاف تلك العملية وإعادة التحكم إلى bash. كتابة محرف التعليق المتأخر (عادةً ^Y، Control-Y) يؤدي إلى إيقاف العملية عندما تحاول قراءة مدخلات من الطرفية، وإعادة التحكم إلى bash. يمكن للمستخدم بعد ذلك التلاعب بحالة هذه الوظيفة، باستخدام الأمر bg لمواصلتها في الخلفية، أو الأمر fg لمواصلتها في الواجهة، أو الأمر kill لقتلها. يسري مفعول ^Z فوراً، وله تأثير جانبي إضافي يتمثل في التخلص من المخرجات المعلقة والمدخلات المسبقة.

توجد عدة طرق للإشارة إلى وظيفة في الصدفة. يقدم المحرف % مواصفة وظيفة (jobspec). يمكن الإشارة إلى الوظيفة رقم n بالرمز %n. يمكن أيضاً الإشارة إلى الوظيفة باستخدام بادئة الاسم المستخدم لبدئها، أو باستخدام سلسلة فرعية تظهر في سطر أوامرها. على سبيل المثال، يشير %ce إلى وظيفة متوقفة يبدأ اسم أمرها بـ ce. إذا طابقت البادئة أكثر من وظيفة، تبلغ bash عن خطأ. ومن ناحية أخرى، فإن استخدام %?ce يشير إلى أي وظيفة تحتوي على السلسلة ce في سطر أوامرها. إذا طابقت السلسلة الفرعية أكثر من وظيفة، تبلغ bash عن خطأ. الرموز %% و %+ تشير إلى مفهوم الصدفة لـ الوظيفة الحالية، وهي آخر وظيفة توقفت أثناء وجودها في الواجهة أو بدأت في الخلفية. يمكن الإشارة إلى الوظيفة السابقة باستخدام %-. إذا كانت هناك وظيفة واحدة فقط، فيمكن استخدام كل من %+ و %- للإشارة إليها. في المخرجات المتعلقة بالوظائف (مثل مخرجات الأمر jobs)، تُعلم الوظيفة الحالية دائماً بـ +، والوظيفة السابقة بـ -. كما أن الرمز % بمفرده (بدون مواصفة وظيفة مرافقة) يشير أيضاً إلى الوظيفة الحالية.

مجرد تسمية الوظيفة يمكن استخدامه لجلبها إلى الواجهة: %1 هو مرادف لـ “fg %1”، مما يجلب الوظيفة 1 من الخلفية إلى الواجهة. وبالمثل، “%1 &” يستأنف الوظيفة 1 في الخلفية، وهو ما يعادل “bg %1”.

تتعلم الصدفة فوراً متى ما تغيرت حالة الوظيفة. عادةً ما تنتظر bash حتى توشك على طباعة محث قبل الإبلاغ عن التغييرات في حالة الوظيفة حتى لا تقاطع أي مخرجات أخرى. إذا فُعل الخيار -b للأمر المدمج set، تبلغ bash عن مثل هذه التغييرات فوراً. تُنفذ أي مصيدة على SIGCHLD لكل عملية ابنة تخرج.

إذا أُجريت محاولة للخروج من bash بينما توجد وظائف متوقفة (أو وظائف تعمل، إذا فُعل خيار الصدفة checkjobs باستخدام الأمر المدمج shopt)، تطبع الصدفة رسالة تحذير، وإذا كان خيار checkjobs مفعلاً، تدرج الوظائف وحالاتها. يمكن بعد ذلك استخدام الأمر jobs لتفقد حالتها. إذا أُجريت محاولة ثانية للخروج دون أمر فاصل، فلا تطبع الصدفة تحذيراً آخر، وتُنهى أي وظائف متوقفة.

عندما تنتظر الصدفة وظيفة أو عملية باستخدام الأمر المدمج wait، وكان التحكم في الوظائف مفعلاً، سيعود wait عندما تتغير حالة الوظيفة. يجعل الخيار -f الأمر wait ينتظر حتى تنتهي الوظيفة أو العملية قبل العودة.

المحث

عند التنفيذ التفاعلي، تعرض bash المحث الرئيس PS1 عندما تكون مستعدة لقراءة أمر، والمحث الثانوي PS2 عندما تحتاج لمزيد من المدخلات لإكمال أمر. تعرض bash PS0 بعد قراءة الأمر وقبل تنفيذه. وتعرض bash PS4 كما وُصف أعلاه قبل تتبع كل أمر عندما يكون الخيار -x مفعلاً. تسمح bash بتخصيص سلاسل المحث هذه عن طريق إدراج عدد من المحارف الخاصة المسبوقة بشرطة مائلة عكسية والتي تُفك ترميزها كما يلي:

محرف جرس ASCII‏ (07)
التاريخ بتنسيق "اليوم الشهر التاريخ" (مثلاً، "Tue May 26")
يُمرر التنسيق إلى strftime(3) وتُدرج النتيجة في سلسلة المحث؛ يؤدي تنسيق فارغ إلى تمثيل وقت خاص بالمحلية. الأقواس المعقوفة مطلوبة
محرف هروب ASCII‏ (033)
اسم المضيف حتى أول `.'
اسم المضيف
عدد المهام التي تديرها الصدفة حاليًا
الاسم الأساسي لاسم جهاز طرفية الصدفة
newline
رجوع العربة
اسم الصدفة، الاسم الأساسي لـ $0 (الجزء الذي يلي المائلة الأخيرة)
الوقت الحالي بتنسيق 24 ساعة HH:MM:SS
الوقت الحالي بتنسيق 12 ساعة HH:MM:SS
\@
الوقت الحالي بتنسيق 12 ساعة صباحًا/مساءً
الوقت الحالي بتنسيق 24 ساعة HH:MM
اسم المستخدم للمستخدم الحالي
إصدارة bash (مثلاً، 2.00)
إصدار bash، الإصدارة + مستوى الرقعة (مثلاً، 2.00.0)
قيمة متغير الصدفة PWD‏ ($PWD)، مع اختصار $HOME بعلامة التلدة (يستخدم قيمة متغير PROMPT_DIRTRIM)
الاسم الأساسي لـ $PWD، مع اختصار $HOME بعلامة التلدة
\!
رقم السجل لهذا الأمر
\#
رقم الأمر لهذا الأمر
\$
إذا كان معرف المستخدم الفعلي (UID) هو 0، تظهر #، وإلا تظهر $
المحرف المقابل للرقم الثماني nnn
\\
شرطة مائلة عكسية
\[
بدء تسلسل من المحارف غير المطبوعة، والتي يمكن استخدامها لتضمين تسلسل تحكم للطرفية داخل المحث
\]
إنهاء تسلسل من المحارف غير المطبوعة

عادةً ما يختلف رقم الأمر عن رقم التأريخ: رقم تأريخ الأمر هو موضعه في قائمة التأريخ، والتي قد تتضمن أوامر استُرجعت من ملف التأريخ (انظر HISTORY أدناه)، بينما رقم الأمر هو موضعه في تسلسل الأوامر المنفذة خلال جلسة الصدفة الحالية. بعد فك ترميز السلسلة، تُوسّع عبر توسيع المعاملات، واستبدال الأوامر، والتوسيع الحسابي، وإزالة الاقتباس، وذلك وفقًا لقيمة خيار الصدفة promptvars (انظر وصف الأمر shopt تحت SHELL BUILTIN COMMANDS أدناه). قد يؤدي هذا إلى آثار جانبية غير مرغوب فيها إذا ظهرت أجزاء مهربة من السلسلة داخل استبدال الأوامر أو احتوت على محارف خاصة بتوسيع الكلمات.

READLINE

هذه هي المكتبة التي تتولى قراءة المدخلات عند استخدام صدفة تفاعلية، ما لم يُعطَ خيار --noediting عند استدعاء الصدفة. يُستخدم تحرير السطور أيضًا عند استخدام خيار -e للأمر المدمج read. تكون أوامر تحرير السطور مبدئيًا مشابهة لتلك الموجودة في Emacs. تتوفر أيضًا واجهة تحرير سطور بأسلوب vi. يمكن تفعيل تحرير السطور في أي وقت باستخدام خيارات -o emacs أو -o vi للأمر المدمج set (انظر أوامر الصدفة المدمجة أدناه). لإيقاف تحرير السطور بعد تشغيل الصدفة، استخدم خيارات +o emacs أو +o vi للأمر المدمج set.

تمثيل Readline

في هذا القسم، يُستخدم تدوين أسلوب Emacs للإشارة إلى ضغطات المفاتيح. يُشار إلى مفاتيح التحكم بواسطة C-key، فمثلاً C-n تعني Control-N. وبالمثل، يُشار إلى مفاتيح meta بواسطة M-key، لذا M-x تعني Meta-X. (على لوحات المفاتيح التي لا تحتوي على مفتاح meta، تعني M-x الضغط على ESC x، أي اضغط على مفتاح Escape ثم مفتاح x. وهذا يجعل ESC هي بادئة meta. والتركيبة M-C-x تعني ESC-Control-x، أو الضغط على مفتاح Escape ثم الاستمرار في الضغط على مفتاح Control أثناء الضغط على مفتاح x.)

قد تُعطى أوامر Readline معاملات رقمية، تعمل عادةً كعدد مرات تكرار. ولكن أحيانًا تكون إشارة المعامل هي المهمة. تمرير معامل سالب لأمر يعمل في الاتجاه الأمامي (مثل kill-line) يجعل ذلك الأمر يعمل في الاتجاه الخلفي. الأوامر التي ينحرف سلوكها مع المعاملات عن هذا مذكورة أدناه.

عندما يوصف أمر بأنه يقتل (killing) النص، فإن النص المحذوف يُحفظ لاسترجاعه المحتمل مستقبلاً (النتش - yanking). يُحفظ النص المقتول في حلقة القتل (kill ring). تسبب عمليات القتل المتتالية تراكم النص في وحدة واحدة، يمكن نتشها دفعة واحدة. الأوامر التي لا تقتل النص تفصل بين قصاصات النص في حلقة القتل.

تهيِئة Readline

يُخصّص Readline بوضع الأوامر في ملف تهيئة (ملف inputrc). يُؤخذ اسم هذا الملف من قيمة متغير INPUTRC. إذا لم يُعين ذلك المتغير، فالقيمة المبدئية هي ~/.inputrc. إذا كان هذا الملف غير موجود أو لا يمكن قراءته، فإن القيمة المبدئية النهائية هي /etc/inputrc. عندما يبدأ برنامج يستخدم مكتبة readline، يُقرأ ملف التهيئة، وتُعين روابط المفاتيح والمتغيرات. لا يُسمح إلا ببعض البنى الأساسية في ملف تهيئة readline. تُتجاهل السطور الفارغة. السطور التي تبدأ بـ # هي تعليقات. السطور التي تبدأ بـ $ تشير إلى بنى شرطية. السطور الأخرى تدل على روابط المفاتيح وإعدادات المتغيرات.

يمكن تغيير روابط المفاتيح المبدئية باستخدام ملف inputrc. قد تضيف البرامج الأخرى التي تستخدم هذه المكتبة أوامرها وروابطها الخاصة.

على سبيل المثال، وضع

M-Control-u: universal-argument

أو
C-Meta-u: universal-argument
في inputrc سيجعل M-C-u ينفذ أمر readline المسمى universal-argument.

أسماء المحارف الرمزية التالية معروفة: RUBOUT، و DEL، و ESC، و LFD، و NEWLINE، و RET، و RETURN، و SPC، و SPACE، و TAB.

بالإضافة إلى أسماء الأوامر، يسمح readline بربط المفاتيح بسلسلة نصية تُدرج عند الضغط على المفتاح (ماكرو).

ارتباطات مفاتيح Readline

بناء الجملة للتحكم في روابط المفاتيح في ملف inputrc بسيط. كل ما هو مطلوب هو اسم الأمر أو نص الماكرو وتسلسل المفاتيح الذي يجب ربطه به. يمكن تحديد الاسم بطريقتين: كاسم مفتاح رمزي، ربما مع بادئات Meta- أو Control-، أو كتسلسل مفاتيح.

عند استخدام الصيغة keyname:function-name أو macro، فإن keyname هو اسم المفتاح مكتوبًا بالإنجليزية. على سبيل المثال:

Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: "> output"

في المثال أعلاه، رُبط C-u بالدالة universal-argument، ورُبط M-DEL بالدالة backward-kill-word، ورُبط C-o لتشغيل الماكرو المعبر عنه في الجانب الأيمن (أي لإدراج النص ``> output'' داخل السطر).

في الشكل الثاني، "keyseq":function-name أو macro، يختلف keyseq عن keyname أعلاه في أن السلاسل التي تدل على تسلسل مفاتيح كامل يمكن تحديدها بوضع التسلسل داخل علامتي اقتباس مزدوجتين. يمكن استخدام بعض مهربات المفاتيح بأسلوب GNU Emacs، كما في المثال التالي، ولكن لا يتم التعرف على أسماء المحارف الرمزية.

"\C-u": universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Function Key 1"

في هذا المثال، رُبط C-u مرة أخرى بالدالة universal-argument. ورُبط C-x C-r بالدالة re-read-init-file، ورُبط ESC [ 1 1 ~ لإدراج النص ``Function Key 1''.

المجموعة الكاملة من تسلسلات الهروب بأسلوب GNU Emacs هي

بادئة التحكم
بادئة meta
محرف هروب
\\
backslash
\"
" حرفية
\'
' حرفية

بالإضافة إلى تسلسلات الهروب بأسلوب GNU Emacs، تتوفر مجموعة ثانية من مهربات الشرطة المائلة العكسية:

تنبيه (جرس)
backspace
delete
تغذية الصفحة
newline
رجوع العربة
جدولة أفقية
علامة جدولة عمودية
المحرف ذو الثماني بتات الذي قيمته هي القيمة الثمانية nnn (من رقم واحد إلى ثلاثة أرقام)
حرف الثمانية بتات الذي قيمته هي القيمة الست عشرية HH (رقم واحد أو رقمان ست عشريان)

عند إدخال نص الماكرو، يجب استخدام علامات اقتباس فردية أو مزدوجة للإشارة إلى تعريف الماكرو. النص غير المقتبس يُفترض أنه اسم دالة. في جسم الماكرو، تُوسع مهربات المائلة العكسية الموصوفة أعلاه. المائلة العكسية ستهرب أي محرف آخر في نص الماكرو، بما في ذلك " و '.

يسمح Bash بعرض روابط مفاتيح readline الحالية أو تعديلها باستخدام الأمر المدمج bind. يمكن تبديل وضع التحرير أثناء الاستخدام التفاعلي باستخدام الخيار -o للأمر المدمج set (انظر أوامر الصدفة المدمجة أدناه).

متغيرات Readline

يحتوي Readline على متغيرات يمكن استخدامها لتخصيص سلوكه بشكل أكبر. يمكن تعيين متغير في ملف inputrc ببيان على الشكل

set variable-name value

أو باستخدام الأمر المدمج bind (انظر SHELL BUILTIN COMMANDS أدناه).

باستثناء ما هو مذكور، يمكن لمتغيرات readline أن تأخذ القيم On أو Off (بدون مراعاة حالة الأحرف). تُتجاهل أسماء المتغيرات غير المعروفة. عند قراءة قيمة متغير، فإن القيم الفارغة أو المنعدمة، و "on" (بغض النظر عن الحالة)، و "1" تكافئ On. جميع القيم الأخرى تكافئ Off. المتغيرات وقيمها المبدئية هي:

متغير نصي يتحكم في لون النص وخلفيته عند عرض النص في المنطقة النشطة (انظر وصف enable-active-region أدناه). يجب ألا تشغل هذه السلسلة أي مواقع محارف فيزيائية على الشاشة، لذا يجب أن تتكون فقط من تسلسلات هروب الطرفية. يتم إخراجها إلى الطرفية قبل عرض النص في المنطقة النشطة. يُعاد ضبط هذا المتغير إلى القيمة المبدئية كلما تغير نوع الطرفية. القيمة المبدئية هي السلسلة التي تضع الطرفية في وضع البروز (standout mode)، كما هو مستمد من وصف terminfo الخاص بالطرفية. قيمة عينة قد تكون "\e[01;33m".
متغير نصي "يتراجع" عن تأثيرات active-region-start-color ويستعيد مظهر عرض الطرفية "العادي" بعد عرض النص في المنطقة النشطة. يجب ألا تشغل هذه السلسلة أي مواقع محارف فيزيائية على الشاشة، لذا يجب أن تتكون فقط من تسلسلات هروب الطرفية. يتم إخراجها إلى الطرفية بعد عرض النص في المنطقة النشطة. يُعاد ضبط هذا المتغير إلى القيمة المبدئية كلما تغير نوع الطرفية. القيمة المبدئية هي السلسلة التي تستعيد الطرفية من وضع البروز، كما هو مستمد من وصف terminfo الخاص بالطرفية. قيمة عينة قد تكون "\e[0m".
يتحكم في ما يحدث عندما يريد readline رنين جرس الطرفية. إذا ضُبط على none، فلا يرن readline الجرس أبدًا. إذا ضُبط على visible، يستخدم readline جرسًا مرئيًا إذا كان متاحًا. إذا ضُبط على audible، يحاول readline رنين جرس الطرفية.
إذا ضُبط على On، يحاول readline ربط محارف التحكم التي يعاملها تعريف طرفية النواة معاملة خاصة بمكافئاتها في readline.
إذا ضُبط على On، يحاول readline تحريك المؤشر لفترة وجيزة إلى قوس الفتح عند إدراج قوس إغلاق.
إذا ضُبط على On، عند عرض قائمة التكملات، يعرض readline البادئة المشتركة لمجموعة التكملات الممكنة باستخدام لون مختلف. تُؤخذ تعريفات الألوان من قيمة متغير البيئة LS_COLORS. إذا كان هناك تعريف لون في $LS_COLORS لللاحقة المخصصة "readline-colored-completion-prefix"، يستخدم readline هذا اللون للبادئة المشتركة بدلاً من لونه المبدئي.
إذا ضُبط على On، يعرض readline التكملات الممكنة باستخدام ألوان مختلفة للإشارة إلى نوع ملفاتها. تُؤخذ تعريفات الألوان من قيمة متغير البيئة LS_COLORS.
السلسلة التي تُدرج عند تنفيذ أمر readline المسمى insert-comment. هذا الأمر مربوط بـ M-# في وضع emacs وبـ # في وضع أوامر vi.
عدد أعمدة الشاشة المستخدمة لعرض التطابقات الممكنة عند إجراء التكملة. تُتجاهل القيمة إذا كانت أقل من 0 أو أكبر من عرض شاشة الطرفية. القيمة 0 ستجعل التطابقات تُعرض بمعدل واحد في كل سطر. القيمة المبدئية هي -1.
إذا ضُبط على On، يقوم readline بمطابقة أسماء الملفات وتكملتها بطريقة غير حساسة لحالة الأحرف.
إذا ضُبط على On، وكان completion-ignore-case مفعلًا، يعامل readline الواصلات (-) والشرطات السفلية (_) كقيم متكافئة عند إجراء مطابقة أسماء الملفات وتكملتها دون حساسية لحالة الأحرف.
طول البادئة المشتركة (بالمحارف) لقائمة التكملات الممكنة التي تُعرض دون تعديل. عند ضبطه على قيمة أكبر من الصفر، تُستبدل البادئات المشتركة الأطول من هذه القيمة بعلامة حذف (ellipsis) عند عرض التكملات الممكنة.
يحدد هذا متى يُسأل المستخدم عن عرض عدد التكملات الممكنة الناتجة عن أمر possible-completions. يمكن ضبطه على أي قيمة صحيحة أكبر من أو تساوي الصفر. إذا كان عدد التكملات الممكنة أكبر من أو يساوي قيمة هذا المتغير، سيسأل readline عما إذا كان المستخدم يرغب في عرضها؛ وإلا فإنها تُسرد ببساطة على الطرفية. القيمة صفر تعني أن readline لا يسأل أبدًا؛ وتُعامل القيم السالبة كصفر.
إذا ضُبط على On، سيحول readline المحارف التي تحتوي على البت الثامن معدلًا إلى تسلسل مفاتيح ASCII عن طريق تجريد البت الثامن وإضافة محرف هروب كبادئة (في الواقع، استخدام الهروب كبادئة meta). القيمة المبدئية هي On، ولكن سيضبطه readline على Off إذا كانت المحلية (locale) تحتوي على محارف ذات ثمانية بتات. يعتمد هذا المتغير على فئة المحلية LC_CTYPE، وقد يتغير إذا تغيرت المحلية.
إذا ضُبط على On، سيمنع readline تكملة الكلمات. ستُدرج محارف التكملة في السطر كما لو كانت قد رُبطت بـ self-insert.
عند ضبطه على On، في أنظمة التشغيل التي تشير إلى دعمها لذلك، يقوم readline بعرض صدى لمحرف مطابق للإشارة الناتجة عن لوحة المفاتيح.
يتحكم في ما إذا كان readline يبدأ بمجموعة من روابط المفاتيح مشابهة لـ Emacs أو vi. يمكن ضبط editing-mode على emacs أو vi.
إذا فُعل متغير show-mode-in-prompt، تُعرض هذه السلسلة مباشرة قبل السطر الأخير من المحث الرئيس عندما يكون وضع تحرير emacs نشطًا. تُوسع القيمة مثل رابط مفاتيح، لذا تتوفر المجموعة القياسية من بادئات meta والتحكم وتسلسلات هروب المائلة العكسية. استخدم مهربات \1 و \2 لبدء وإنهاء تسلسلات المحارف غير المطبوعة، والتي يمكن استخدامها لتضمين تسلسل تحكم طرفي في سلسلة الوضع.
الـ نقطة (point) هي موضع المؤشر الحالي، والـ علامة (mark) تشير إلى موضع مؤشر محفوظ. يُشار إلى النص الموجود بين النقطة والعلامة باسم المنطقة (region). عندما يُضبط هذا المتغير على On، يسمح readline لأوامر معينة بتصنيف المنطقة على أنها نشطة. عندما تكون المنطقة نشطة، يبرز readline النص في المنطقة باستخدام قيمة active-region-start-color، والتي تكون مبدئيًا هي السلسلة التي تفعل وضع البروز في الطرفية. تعرض المنطقة النشطة النص المدرج بواسطة اللصق المحصور (bracketed-paste) وأي نص مطابق يُعثر عليه بواسطة عمليات البحث في السجل التزايدية وغير التزايدية.
عند ضبطه على On، يضبط readline الطرفية لإدراج كل عملية لصق في مخزن التحرير كسلسلة واحدة من المحارف، بدلاً من معاملة كل محرف كما لو كان قد قُرئ من لوحة المفاتيح. هذا يمنع readline من تنفيذ أي أوامر تحرير مرتبطة بتسلسلات مفاتيح تظهر في النص الملحق.
عند ضبطه على On، سيحاول readline تمكين لوحة مفاتيح التطبيقات عند استدعائه. تحتاج بعض الأنظمة لهذا لتمكين مفاتيح الأسهم.
عند ضبطه على On، سيحاول readline تمكين أي مفتاح مغير meta تدعي الطرفية دعمه عند استدعائه. في العديد من الطرفيات، يُستخدم مفتاح meta لإرسال محارف ذات ثمانية بتات.
إذا ضُبط على On، يتم إجراء توسيع التلدة عندما يحاول readline تكملة الكلمات.
إذا ضُبط على On، فسيحاول كود التأريخ وضع النقطة في نفس الموقع في كل سطر تأريخ يُسترجع باستخدام previous-history أو next-history.
يعين الحد الأقصى لعدد مدخلات السجل المحفوظة في قائمة السجل. إذا ضُبط على الصفر، تُحذف أي مدخلات سجل موجودة ولا تُحفظ مدخلات جديدة. إذا ضُبط على قيمة أقل من الصفر، فإن عدد مدخلات السجل لا يكون محدودًا. مبدئيًا، يُضبط عدد مدخلات السجل على قيمة متغير الصدفة HISTSIZE. إذا جرت محاولة لضبط history-size على قيمة غير رقمية، فسيُضبط الحد الأقصى لمدخلات السجل على 500.
عند ضبطه على On، يجعل readline يستخدم سطرًا واحدًا للعرض، ويقوم بإزاحة المدخلات أفقيًا على سطر شاشة واحد عندما تصبح أطول من عرض الشاشة بدلاً من الالتفاف إلى سطر جديد. يُفعل هذا الإعداد آليًا للطرفيات التي يبلغ ارتفاعها 1.
إذا ضُبط على On، سيمكن readline المدخلات ذات الثمانية بتات (أي أنه لن يجرد البت الثامن من المحارف التي يقرؤها)، بغض النظر عما تدعي الطرفية أنها تدعمه. الاسم meta-flag هو مرادف لهذا المتغير. القيمة المبدئية هي Off، ولكن سيضبطه readline على On إذا كانت المحلية تحتوي على محارف ذات ثمانية بتات. يعتمد هذا المتغير على فئة المحلية LC_CTYPE، وقد يتغير إذا تغيرت المحلية.
سلسلة المحارف التي يجب أن تنهي البحث التزايدي دون تنفيذ المحرف لاحقًا كأمر. إذا لم يُعطَ هذا المتغير قيمة، فإن المحرفين ESC و C-J سيهيان البحث التزايدي.
يعين خريطة المفاتيح الحالية لـ readline. مجموعة أسماء خرائط المفاتيح الصحيحة هي emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-command, و vi-insert. حيث vi تكافئ vi-command؛ و emacs تكافئ emacs-standard. القيمة المبدئية هي emacs؛ كما تؤثر قيمة editing-mode على خريطة المفاتيح المبدئية.
يحدد المدة التي سينتظرها readline للحصول على محرف عند قراءة تسلسل مفاتيح غامض (تسلسل يمكن أن يشكل تسلسل مفاتيح كاملاً باستخدام المدخلات المقروءة حتى الآن، أو يمكن أن يأخذ مدخلات إضافية لإكمال تسلسل مفاتيح أطول). إذا لم تُستلم أي مدخلات خلال المهلة، فسيستخدم readline تسلسل المفاتيح الأقصر والكامل. تُحدد القيمة بالملي ثانية، لذا فإن القيمة 1000 تعني أن readline سينتظر ثانية واحدة لمدخلات إضافية. إذا ضُبط هذا المتغير على قيمة أقل من أو تساوي الصفر، أو على قيمة غير رقمية، فسينتظر readline حتى يُضغط على مفتاح آخر ليقرر أي تسلسل مفاتيح سيكمل.
إذا ضُبط على On، فستُلحق شرطة مائلة بأسماء الأدلة المكتملة.
إذا ضُبط على On، تُعرض سطور السجل التي عُدلت مسبوقة بعلامة نجمة (*).
إذا ضُبط على On، فإن الأسماء المكتملة التي هي روابط رمزية للأدلة يُلحق بها مائلة (تخضع لقيمة mark-directories).
هذا المتغير، عند ضبطه على On، يجعل readline يطابق الملفات التي تبدأ أسماؤها بـ `.' (الملفات المخفية) عند إجراء تكملة أسماء الملفات. إذا ضُبط على Off، يجب أن يوفر المستخدم النقطة `.' البادئة في اسم الملف المراد تكملته.
إذا ضُبط على On، فسيقوم إكمال القائمة بعرض البادئة المشتركة لقائمة الإكمالات الممكنة (والتي قد تكون فارغة) قبل التنقل عبر القائمة.
إذا ضُبط على On، سيعرض readline المحارف ذات البت الثامن مباشرة بدلاً من عرضها كتسلسل هروب مسبوق ببادئة meta. القيمة المبدئية هي Off، ولكن سيضبطه readline على On إذا كانت المحلية تحتوي على محارف ذات ثمانية بتات. يعتمد هذا المتغير على فئة المحلية LC_CTYPE، وقد يتغير إذا تغيرت المحلية.
إذا ضُبط على On، يستخدم readline عارضًا (pager) داخليًا يشبه more لعرض ملء الشاشة من التكملات الممكنة في كل مرة.
إذا ضُبط على On، سيعرض readline التكملات مع فرز التطابقات أفقيًا بترتيب أبجدي، بدلاً من عرضها عموديًا لأسفل الشاشة.
إذا ضُبط على On، سيتراجع readline عن جميع التغييرات في سطور السجل قبل العودة عند تنفيذ accept-line. مبدئيًا، يمكن تعديل سطور السجل والاحتفاظ بقوائم تراجع فردية عبر استدعاءات readline.
يُغير هذا السلوك المبدئي لوظائف الإكمال. إذا ضُبط على On، فإن الكلمات التي لها أكثر من إكمال محتمل ستؤدي إلى إدراج المطابقات فورًا بدلاً من إطلاق صوت التنبيه.
يُغير هذا السلوك المبدئي لوظائف الإكمال بطريقة مشابهة لـ show-all-if-ambiguous. إذا ضُبط على On، فإن الكلمات التي لها أكثر من إكمال محتمل دون أي إكمال جزئي ممكن (أي أن الإكمالات المحتملة لا تشترك في بادئة واحدة) ستؤدي إلى إدراج المطابقات فورًا بدلاً من إطلاق صوت التنبيه.
إذا ضُبط على On، تُضاف سلسلة نصية إلى بداية المحث تشير إلى وضع التحرير: emacs، أو vi command، أو vi insertion. سلاسل الأوضاع قابلة للضبط من قبل المستخدم (مثل emacs-mode-string).
إذا ضُبط على On، فإن هذا يغير سلوك التكملة المبدئي عند إدراج تطابق واحد في السطر. يكون نشطًا فقط عند إجراء التكملة في منتصف الكلمة. في حال تفعيله، لا يدرج readline محارف من التكملة تطابق المحارف الموجودة بعد النقطة في الكلمة الجاري تكملتها، وبذلك لا تتكرر أجزاء الكلمة التي تلي المؤشر.
إذا فُعل متغير show-mode-in-prompt، تُعرض هذه السلسلة مباشرة قبل السطر الأخير من المحث الرئيس عندما يكون وضع تحرير vi نشطًا وفي وضع الأوامر. تُوسع القيمة مثل رابط مفاتيح، لذا تتوفر المجموعة القياسية من بادئات meta والتحكم وتسلسلات هروب المائلة العكسية. استخدم مهربات \1 و \2 لبدء وإنهاء تسلسلات المحارف غير المطبوعة، والتي يمكن استخدامها لتضمين تسلسل تحكم طرفي في سلسلة الوضع.
إذا فُعل متغير show-mode-in-prompt، تُعرض هذه السلسلة مباشرة قبل السطر الأخير من المحث الرئيس عندما يكون وضع تحرير vi نشطًا وفي وضع الإدراج. تُوسع القيمة مثل رابط مفاتيح، لذا تتوفر المجموعة القياسية من بادئات meta والتحكم وتسلسلات هروب المائلة العكسية. استخدم مهربات \1 و \2 لبدء وإنهاء تسلسلات المحارف غير المطبوعة، والتي يمكن استخدامها لتضمين تسلسل تحكم طرفي في سلسلة الوضع.
إذا ضُبط على On، سيُلحق محرف يشير إلى نوع الملف كما تُبلغ عنه stat(2) باسم الملف عند سرد الإكمالات المحتملة.

بنى Readline الشرطية

ينفذ Readline ميزة مشابهة في جوهرها لميزات التجميع الشرطي في معالج C التمهيدي، مما يسمح بإجراء روابط مفاتيح وإعدادات متغيرات بناءً على نتائج اختبارات. هناك أربعة توجيهات للمحلل تُستخدم.

$if
تسمح بنية $if بإجراء روابط بناءً على وضع التحرير، أو الطرفية المستخدمة، أو التطبيق الذي يستخدم readline. يمتد نص الاختبار، بعد أي عامل مقارنة، إلى نهاية السطر؛ ولا يلزم وجود أي محارف لعزله ما لم يذكر خلاف ذلك.
يُستخدم شكل mode= من توجيه $if لاختبار ما إذا كان readline في وضع emacs أو vi. يمكن استخدام هذا بالاقتران مع أمر set keymap، على سبيل المثال، لتعيين روابط في خرائط مفاتيح emacs-standard و emacs-ctlx فقط إذا كان readline يبدأ في وضع emacs.
يمكن استخدام شكل term= لتضمين روابط مفاتيح خاصة بالطرفية، ربما لربط تسلسلات المفاتيح التي تخرجها مفاتيح وظائف الطرفية. تُختبر الكلمة الموجودة على الجانب الأيمن من علامة = مقابل الاسم الكامل للطرفية وجزء اسم الطرفية قبل أول -. يسمح هذا لـ sun بمطابقة كل من sun و sun-cmd، على سبيل المثال.
يمكن استخدام اختبار version لإجراء مقارنات مقابل إصدارات readline محددة. يتوسع version إلى إصدارة readline الحالية. تشمل مجموعة عوامل المقارنة =، (و ==)، و !=، و <=، و >=، و <، و >. يتكون رقم الإصدارة المقدم على الجانب الأيمن من العامل من رقم إصدارة رئيس، ونقطة عشرية اختيارية، وإصدارة ثانوية اختيارية (مثل 7.1). إذا حُذفت الإصدارة الثانوية، فسيُفترض أنها 0. يمكن فصل العامل عن سلسلة version وعن معامل رقم الإصدارة بمسافات بيضاء.
تُستخدم بنية application لتضمين إعدادات خاصة بالتطبيق. يقوم كل برنامج يستخدم مكتبة readline بتعيين اسم التطبيق، ويمكن لملف التهيئة اختبار قيمة معينة. يمكن استخدام هذا لربط تسلسلات مفاتيح بوظائف مفيدة لبرنامج معين. على سبيل المثال، يضيف الأمر التالي تسلسل مفاتيح يضع الكلمة الحالية أو السابقة بين علامتي اقتباس في bash:

$if Bash
# اقتبس الكلمة الحالية أو السابقة
"\C-xq": "\eb\"\ef\""
$endif
توفر بنية variable اختبارات مساواة بسيطة لمتغيرات وقيم readline. عوامل المقارنة المسموح بها هي = و == و !=. يجب فصل اسم المتغير عن عامل المقارنة بمسافة بيضاء؛ ويمكن فصل العامل عن القيمة الموجودة على الجانب الأيمن بمسافة بيضاء. يمكن اختبار كل من المتغيرات النصية والمنطقية. يجب اختبار المتغيرات المنطقية مقابل القيمتين on و off.
$endif
ينهي هذا الأمر، كما رأينا في المثال السابق، أمر $if.
$else
تُنفذ الأوامر في هذا الفرع من توجيه $if إذا فشل الاختبار.
$include
يأخذ هذا التوجيه اسم ملف واحد كمعامل ويقرأ الأوامر والروابط من ذلك الملف. على سبيل المثال، التوجيه التالي سيقرأ /etc/inputrc:

$include  /etc/inputrc

البحث

يوفر Readline أوامر للبحث في سجل الأوامر (انظر السجل أدناه) عن سطور تحتوي على سلسلة محددة. يوجد وضعان للبحث: تزايدي و غير تزايدي.

تبدأ عمليات البحث التزايدي قبل أن ينتهي المستخدم من كتابة سلسلة البحث. مع كتابة كل محرف من سلسلة البحث، يعرض readline المدخل التالي من السجل الذي يطابق السلسلة المكتوبة حتى الآن. يتطلب البحث التزايدي فقط عددًا من المحارف يكفي للعثور على مدخل السجل المطلوب. تُستخدم المحارف الموجودة في قيمة متغير isearch-terminators لإنهاء البحث التزايدي. إذا لم يُعين لهذا المتغير قيمة، فإن المحرفين Escape و Control-J سيهيان البحث التزايدي. سيؤدي Control-G إلى إجهاض البحث التزايدي واستعادة السطر الأصلي. عند إنهاء البحث، يصبح مدخل السجل الذي يحتوي على سلسلة البحث هو السطر الحالي.

للعثور على مدخلات مطابقة أخرى في قائمة السجل، اكتب Control-S أو Control-R حسب الاقتضاء. سيؤدي هذا إلى البحث للخلف أو للأمام في السجل عن المدخل التالي المطابق لسلسلة البحث المكتوبة حتى الآن. أي تسلسل مفاتيح آخر مربوط بأمر readline سينهي البحث وينفذ ذلك الأمر. على سبيل المثال، سطر جديد سينهي البحث ويقبل السطر، وبالتالي ينفذ الأمر من قائمة السجل.

يتذكر Readline آخر سلسلة بحث تزايدي. إذا كُتب اثنان من Control-R بدون أي محارف فاصلة تحدد سلسلة بحث جديدة، تُستخدم أي سلسلة بحث محفوظة.

تقرأ عمليات البحث غير التزايدية سلسلة البحث كاملة قبل البدء في البحث عن سطور سجل مطابقة. قد يكتب المستخدم سلسلة البحث أو قد تكون جزءًا من محتويات السطر الحالي.

أسماء أوامر Readline

فيما يلي قائمة بأسماء الأوامر وتسلسلات المفاتيح المبدئية التي رُبطت بها. تكون أسماء الأوامر التي لا يصاحبها تسلسل مفاتيح غير مربوطة مبدئيًا. في الأوصاف التالية، تشير الـ نقطة (point) إلى موضع المؤشر الحالي، وتشير الـ علامة (mark) إلى موضع مؤشر حُفظ بواسطة أمر set-mark. يُشار إلى النص الموجود بين النقطة والعلامة باسم المنطقة (region).

أوامر الحركة

الانتقال إلى بداية السطر الحالي.
الانتقال إلى نهاية السطر.
الانتقال للأمام بمقدار محرف واحد.
الانتقال للخلف بمقدار محرف واحد.
الانتقال للأمام إلى نهاية الكلمة التالية. تتكون الكلمات من محارف أبجدية رقمية (حروف وأرقام).
الانتقال للخلف إلى بداية الكلمة الحالية أو السابقة. تتكون الكلمات من محارف أبجدية رقمية (حروف وأرقام).
الانتقال للأمام إلى نهاية الكلمة التالية. تُفصل الكلمات بواسطة محارف الصدفة الوصفية غير المقتبسة.
الانتقال للخلف إلى بداية الكلمة الحالية أو السابقة. تُفصل الكلمات بواسطة محارف الصدفة الوصفية غير المقتبسة.
محاولة نقل النقطة إلى نفس عمود الشاشة الفيزيائي في سطر الشاشة الفيزيائي السابق. لن يكون لهذا التأثير المطلوب إذا كان سطر readline الحالي لا يشغل أكثر من سطر فيزيائي واحد أو إذا لم تكن النقطة أكبر من طول المحث زائد عرض الشاشة.
محاولة نقل النقطة إلى نفس عمود الشاشة الفيزيائي في سطر الشاشة الفيزيائي التالي. لن يكون لهذا التأثير المطلوب إذا كان سطر readline الحالي لا يشغل أكثر من سطر فيزيائي واحد أو إذا لم يكن طول سطر readline الحالي أكبر من طول المحث زائد عرض الشاشة.
مسح الشاشة، وإن أمكن، خبيئة التمرير الخلفي للطرفية، ثم إعادة رسم السطر الحالي، مع ترك السطر الحالي في أعلى الشاشة.
مسح الشاشة، ثم إعادة رسم السطر الحالي، مع ترك السطر الحالي في أعلى الشاشة. مع وجود معامل، سيُحدث السطر الحالي دون مسح الشاشة.
تحديث السطر الحالي.

أوامر التعامل مع السجل

قبول السطر بغض النظر عن مكان المؤشر. إذا كان هذا السطر غير فارغ، سيُضاف إلى قائمة السجل وفقًا لحالة متغير HISTCONTROL. إذا كان السطر سطر سجل معدلاً، فسيُستعاد سطر السجل إلى حالته الأصلية.
جلب الأمر السابق من قائمة السجل، بالانتقال للخلف في القائمة.
جلب الأمر التالي من قائمة السجل، بالانتقال للأمام في القائمة.
الانتقال إلى أول سطر في السجل.
الانتقال إلى نهاية سجل المدخلات، أي السطر الذي يجري إدخاله حاليًا.
قبول السطر الحالي للتنفيذ وجلب السطر التالي بالنسبة للسطر الحالي من السجل للتحرير. إذا وفّر معامل رقمي، فإنه يحدد مدخل السجل المراد استخدامه بدلاً من السطر الحالي.
باستخدام معامل عددي، جلب ذلك المدخل من قائمة السجل وجعله السطر الحالي. بدون معامل، سيُنتقل للخلف إلى أول مدخل في قائمة السجل.
البحث للخلف بدءًا من السطر الحالي والانتقال `للأعلى' عبر السجل حسب الضرورة. هذا بحث تزايدي.
البحث للأمام بدءًا من السطر الحالي والانتقال `للأسفل' عبر السجل حسب الضرورة. هذا بحث تزايدي.
البحث للخلف عبر السجل بدءًا من السطر الحالي باستخدام بحث غير تزايدي عن سلسلة يوفرها المستخدم.
البحث للأمام عبر السجل باستخدام بحث غير تزايدي عن سلسلة يوفرها المستخدم.
البحث للأمام عبر السجل عن سلسلة المحارف الموجودة بين بداية السطر الحالي والنقطة. هذا بحث غير تزايدي.
البحث للخلف عبر السجل عن سلسلة المحارف الموجودة بين بداية السطر الحالي والنقطة. هذا بحث غير تزايدي.
البحث للخلف عبر السجل عن سلسلة المحارف الموجودة بين بداية السطر الحالي وموضع المؤشر الحالي (الـ نقطة). قد تطابق سلسلة البحث أي مكان في سطر السجل. هذا بحث غير تزايدي.
البحث للأمام عبر السجل عن سلسلة المحارف الموجودة بين بداية السطر الحالي والنقطة. يمكن أن تطابق سلسلة البحث أي مكان في سطر السجل. هذا بحث غير تزايدي.
إدراج المعامل الأول للأمر السابق (عادةً الكلمة الثانية في السطر السابق) عند النقطة. مع وجود معامل n، سيُدرج الكلمة رقم n من الأمر السابق (تبدأ الكلمات في الأمر السابق بالكلمة 0). المعامل السالب يدرج الكلمة رقم n من نهاية الأمر السابق. بمجرد حساب المعامل n، يُستخرج المعامل كما لو كان قد حُدد توسيع السجل "!n".
إدراج المعامل الأخير للأمر السابق (الكلمة الأخيرة من مدخل السجل السابق). مع وجود معامل رقمي، يسلك تمامًا مثل yank-nth-arg. المكالمات المتتالية لـ yank-last-arg تنتقل للخلف عبر قائمة السجل، وتدرج الكلمة الأخيرة (أو الكلمة المحددة بواسطة المعامل في الاستدعاء الأول) لكل سطر بدورها. أي معامل رقمي يُقدم لهذه الاستدعاءات المتتالية يحدد اتجاه التنقل عبر السجل. المعامل السالب يبدل الاتجاه عبر السجل (للخلف أو للأمام). تُستخدم مرافق توسيع السجل لاستخراج الكلمة الأخيرة، كما لو كان قد حُدد توسيع السجل "!$".
توسيع السطر كما تفعل الصدفة. يؤدي هذا إلى توسيع الأسماء المستعارة والسجل بالإضافة إلى جميع توسيعات كلمات الصدفة. انظر توسيع السجل أدناه للحصول على وصف لتوسيع السجل.
إجراء توسيع السجل في السطر الحالي. انظر HISTORY EXPANSION أدناه لوصف توسيع السجل.
إجراء توسيع السجل في السطر الحالي وإدراج مسافة. انظر HISTORY EXPANSION أدناه لوصف توسيع السجل.
إجراء توسيع الأسماء المستعارة في السطر الحالي. انظر ALIASES أعلاه لوصف توسيع الأسماء المستعارة.
إجراء توسيع السجل والأسماء المستعارة في السطر الحالي.
مرادف لـ yank-last-arg.
استدعاء محرر على سطر الأوامر الحالي، وتنفيذ النتيجة كأوامر صدفة. تحاول Bash استدعاء $VISUAL، ثم $EDITOR، ثم emacs كمحرر، بهذا الترتيب.

أوامر تغيير النص

المحرف الذي يشير إلى نهاية الملف كما هو معين، على سبيل المثال، بواسطة ``stty''. إذا قُرئ هذا المحرف في حين لا توجد محارف في السطر، وكانت النقطة في بداية السطر، يفسره readline على أنه نهاية المدخلات ويعيد EOF.
حذف المحرف عند النقطة. إذا رُبطت هذه الدالة بنفس محرف EOF للطرفية، كما هو الحال غالبًا مع C-d، انظر أعلاه لمعرفة التأثيرات.
حذف المحرف خلف المؤشر. عند إعطاء معامل عددي، يُحفظ النص المحذوف في حلقة الحذف (kill ring).
حذف المحرف الموجود تحت المؤشر، ما لم يكن المؤشر في نهاية السطر، وفي هذه الحالة يُحذف المحرف الموجود خلف المؤشر.
إضافة المحرف التالي المكتوب إلى السطر حرفيًا. هذه هي طريقة إدراج محارف مثل C-q، على سبيل المثال.
إدراج محرف جدولة (tab).
إدراج المحرف المكتوب.
سحب المحرف الموجود قبل النقطة للأمام فوق المحرف الموجود عند النقطة، مع تحريك النقطة للأمام أيضًا. إذا كانت النقطة في نهاية السطر، فإن هذا يبدل موضع المحرفين اللذين يسبقان النقطة. ليس للمعاملات السالبة أي تأثير.
سحب الكلمة التي قبل النقطة لتجاوز الكلمة التي بعد النقطة، مع تحريك النقطة فوق تلك الكلمة أيضًا. إذا كانت النقطة في نهاية السطر، فإن هذا يبدل موضع آخر كلمتين في السطر.
تحويل الكلمة الحالية (أو التالية) إلى أحرف كبيرة. باستخدام معامل سالب، تُحول الكلمة السابقة إلى أحرف كبيرة، ولكن دون تحريك النقطة.
حوّل الكلمة الحالية (أو التالية) إلى أحرف صغيرة. عند توفير معطى سالب، تُحوّل الكلمة السابقة إلى أحرف صغيرة، ولكن لا تُنقل النقطة.
اجعل الحرف الأول من الكلمة الحالية (أو التالية) كبيراً. عند توفير معطى سالب، يُحوّل الحرف الأول من الكلمة السابقة إلى حرف كبير، ولكن لا تُنقل النقطة.
تبديل وضع الكتابة الفوقية. مع وجود معامل رقمي موجب صريح، ينتقل إلى وضع الكتابة الفوقية. مع وجود معامل رقمي غير موجب صريح، ينتقل إلى وضع الإدراج. يؤثر هذا الأمر فقط على وضع emacs؛ فوضع vi يقوم بالكتابة الفوقية بشكل مختلف. يبدأ كل استدعاء لـ readline() في وضع الإدراج. في وضع الكتابة الفوقية، تستبدل المحارف المرتبطة بـ self-insert النص الموجود عند النقطة بدلاً من دفع النص إلى اليمين. تستبدل المحارف المرتبطة بـ backward-delete-char المحرف الذي قبل النقطة بمسافة. مبدئيًا، هذا الأمر غير مربوط.

القتل والجذب (Killing and Yanking)

قتل النص من النقطة حتى نهاية السطر.
قتل النص للخلف حتى بداية السطر.
قتل النص للخلف من النقطة حتى بداية السطر. يُحفظ النص المقتول في حلقة القتل.
اقضِ على جميع المحارف في السطر الحالي، بغض النظر عن موقع النقطة.
اقضِ على النص من النقطة إلى نهاية الكلمة الحالية، أو إلى نهاية الكلمة التالية إذا كنت بين الكلمات. حدود الكلمات هي نفسها المستخدمة في forward-word.
اقضِ على الكلمة التي خلف النقطة. حدود الكلمات هي نفسها المستخدمة في backward-word.
اقضِ على النص من النقطة إلى نهاية الكلمة الحالية، أو إلى نهاية الكلمة التالية إذا كنت بين الكلمات. حدود الكلمات هي نفسها المستخدمة في shell-forward-word.
اقضِ على الكلمة التي خلف النقطة. حدود الكلمات هي نفسها المستخدمة في shell-backward-word.
قتل الكلمة التي خلف النقطة، باستخدام المسافة البيضاء كحد للكلمة. يُحفظ النص المقتول في حلقة القتل.
قتل الكلمة التي خلف النقطة، باستخدام المسافة البيضاء ومحرف المائلة كحدود للكلمة. يُحفظ النص المقتول في حلقة القتل.
احذف جميع المسافات وعلامات الجدولة حول النقطة.
اقضِ على النص الموجود في المنطقة (region) الحالية.
نسخ النص في المنطقة إلى مخزن القتل.
انسخ الكلمة التي تسبق النقطة إلى مخزن القتل. حدود الكلمات هي نفسها المستخدمة في backward-word.
انسخ الكلمة التي تلي النقطة إلى مخزن القتل. حدود الكلمات هي نفسها المستخدمة في forward-word.
اجذب رأس حلقة القتل إلى المخزن عند النقطة.
دوّر حلقة القتل، واجذب الرأس الجديد. لا يعمل إلا بعد yank أو yank-pop.

المعطيات العددية

أضف هذا الرقم إلى المعطى المتراكم حالياً، أو ابدأ معطى جديداً. M-- تبدأ معطى سالباً.
هذه طريقة أخرى لتحديد معطى. إذا تلا هذا الأمر رقم أو أكثر، مسبوقاً اختيارياً بعلامة ناقص، فإن تلك الأرقام تُحدد المعطى. إذا تلا الأمر أرقام، فإن تنفيذ universal-argument مرة أخرى ينهي المعطى العددي، ولكنه يُتجاهل فيما عدا ذلك. كحالة خاصة، إذا تلا هذا الأمر مباشرة محرف ليس رقماً ولا علامة ناقص، يُضرب عدد المعطيات للأمر التالي في أربعة. يكون عدد المعطيات واحداً في البداية، لذا فإن تنفيذ هذه الدالة للمرة الأولى يجعل العدد أربعة، وللمرة الثانية يجعله ستة عشر، وهكذا.

الإكمال

محاولة إجراء تكملة على النص الذي قبل النقطة. يحاول Bash التكملة بمعاملة النص كمتغير (إذا بدأ النص بـ $)، أو اسم مستخدم (إذا بدأ النص بـ ~)، أو اسم مضيف (إذا بدأ النص بـ @)، أو أمر (بما في ذلك الأسماء المستعارة والدوال) بالترتيب. إذا لم ينتج عن أي منها تطابق، تُحاول تكملة اسم الملف.
سرد التكملات الممكنة للنص الذي قبل النقطة.
إدراج جميع تكملات النص الذي قبل النقطة والتي كانت ستنتج عن possible-completions.
مشابه لـ complete، ولكنه يستبدل الكلمة المراد تكملتها بتطابق واحد من قائمة التكملات الممكنة. التنفيذ المتكرر لـ menu-complete يتنقل عبر قائمة التكملات الممكنة، ويدرج كل تطابق بدوره. في نهاية قائمة التكملات، يرن الجرس (حسب إعداد bell-style) ويُستعاد النص الأصلي. ينتقل معامل n بمقدار n موضع للأمام في قائمة التطابقات؛ ويمكن استخدام معامل سالب للانتقال للخلف عبر القائمة. هذا الأمر مخصص ليربط بمفتاح TAB، ولكنه غير مربوط مبدئيًا.
مطابق لـ menu-complete، ولكنه يتحرك للخلف عبر قائمة الإكمالات المحتملة، كما لو كان menu-complete قد أُعطي معطى سالباً. هذا الأمر غير مرتبط افتراضياً.
يحذف المحرف الموجود تحت المؤشر إذا لم يكن في بداية السطر أو نهايته (مثل delete-char). إذا كان في نهاية السطر، فإنه يسلك سلوكًا مطابقًا لـ possible-completions. هذا الأمر غير مربوط مبدئيًا.
حاول إكمال اسم الملف للنص الذي يسبق النقطة.
اسرد الإكمالات المحتملة للنص الذي يسبق النقطة، مع معاملته كاسم ملف.
حاول الإكمال للنص الذي يسبق النقطة، مع معاملته كاسم مستخدم.
اسرد الإكمالات المحتملة للنص الذي يسبق النقطة، مع معاملته كاسم مستخدم.
حاول الإكمال للنص الذي يسبق النقطة، مع معاملته كمتغير صدفة.
اسرد الإكمالات المحتملة للنص الذي يسبق النقطة، مع معاملته كمتغير صدفة.
حاول الإكمال للنص الذي يسبق النقطة، مع معاملته كاسم مضيف.
اسرد الإكمالات المحتملة للنص الذي يسبق النقطة، مع معاملته كاسم مضيف.
حاول الإكمال للنص الذي يسبق النقطة، مع معاملته كاسم أمر. يحاول إكمال الأوامر مطابقة النص مقابل الأسماء المستعارة، والكلمات المحجوزة، ودوال الصدفة، ومبنيات الصدفة الداخلية، وأخيراً أسماء الملفات القابلة للتنفيذ، بهذا الترتيب.
اسرد الإكمالات المحتملة للنص الذي يسبق النقطة، مع معاملته كاسم أمر.
محاولة الإكمال على النص الواقع قبل النقطة، بمقارنة النص بأسطر من قائمة التأريخ بحثًا عن مطابقات إكمال محتملة.
حاول إجراء إكمال قائمة للنص الذي يسبق النقطة، بمقارنة النص مقابل أسطر من قائمة التاريخ بحثاً عن مطابقات إكمال محتملة.
أجرِ إكمال اسم الملف وأدرج قائمة الإكمالات المحتملة محصورة بين أقواس متعرجة بحيث تكون القائمة متاحة للصدفة (انظر Brace Expansion أعلاه).

ماكروهات لوحة المفاتيح

ابدأ حفظ المحارف المكتوبة في ماكرو لوحة المفاتيح الحالي.
أوقف حفظ المحارف المكتوبة في ماكرو لوحة المفاتيح الحالي واحفظ التعريف.
أعد تنفيذ آخر ماكرو لوحة مفاتيح عُرِّف، بجعل المحارف في الماكرو تظهر كما لو كانت مكتوبة من لوحة المفاتيح.
اطبع آخر ماكرو لوحة مفاتيح عُرِّف بتنسيق مناسب لملف inputrc.

متفرقات

اقرأ محتويات ملف inputrc، وادمج أي ارتباطات أو تخصيصات متغيرات موجودة هناك.
أجهض أمر التحرير الحالي واقرع جرس المحطة الطرفية (وفقاً لإعداد bell-style).
إذا كان المحرف x (المقرون بمفتاح Meta) حرفاً كبيراً، فشغل الأمر المرتبط بالمحرف الصغير المقابل له. السلوك غير محدد إذا كان x حرفاً صغيراً بالفعل.
اقرن المحرف التالي المكتوب بمفتاح Meta. يُعد ESC f مكافئاً لـ Meta-f.
تراجع تزايدي، يُتذكر بشكل منفصل لكل سطر.
تراجع عن جميع التغييرات التي أجريت على هذا السطر. هذا يشبه تنفيذ أمر undo لمرات كافية لإعادة السطر إلى حالته الأولية.
أجرِ توسيع علامة المدة (tilde expansion) على الكلمة الحالية.
تعيين العلامة عند النقطة. إذا وُفر معطى عددي، تُعين العلامة عند ذلك الموضع.
تبديل النقطة بالعلامة. يُضبط موضع المؤشر الحالي إلى الموضع المحفوظ، ويُحفظ موضع المؤشر القديم كعلامة.
يُقرأ محرف وتُنقل النقطة إلى التكرار التالي لهذا المحرف. يبحث المعطى السالب عن التكرارات السابقة.
يُقرأ محرف وتُنقل النقطة إلى التكرار السابق لهذا المحرف. يبحث المعطى السالب عن التكرارات اللاحقة.
قراءة ما يكفي من المحارف لاستيعاب تسلسل مفاتيح متعدد، مثل تلك المعرفة لمفاتيح مثل Home و End. تبدأ هذه التسلسلات بمؤشر تسلسل التحكم (CSI)، عادةً ESC-[. إذا رُبط هذا التسلسل بـ "\["، فلن يكون للمفاتيح التي تنتج مثل هذه التسلسلات أي تأثير ما لم تُربط صراحةً بأمر readline، بدلاً من إدراج محارف شاردة في مخزن التحرير المؤقت. هذا غير مرتبط افتراضيًا، ولكنه يُربط عادةً بـ ESC-[.
بدون معطى عددي، تُدرج قيمة متغير readline المسمى comment-begin في بداية السطر الحالي. إذا وُفر معطى عددي، يعمل هذا الأمر كمبدل: إذا كانت المحارف في بداية السطر لا تطابق قيمة comment-begin، تُدرج القيمة، وإلا تُحذف محارف comment-begin من بداية السطر. في كلتا الحالتين، يُقبل السطر كما لو كُتب سطر جديد. تؤدي القيمة المبدئية لـ comment-begin إلى جعل هذا الأمر يحول السطر الحالي إلى تعليق صدفة. إذا تسبب المعطى العددي في إزالة محرف التعليق، فسيُنفذ السطر بواسطة الصدفة.
أجرِ تصحيحاً إملائياً للكلمة الحالية، مع معاملتها كدليل أو اسم ملف، بنفس طريقة خيار الصدفة cdspell. حدود الكلمات هي نفسها المستخدمة في shell-forward-word.
تُعامل الكلمة التي تسبق النقطة كنمط لتوسيع مسار الملف، مع إلحاق نجمة ضمنيًا. يُستخدم هذا النمط لتوليد قائمة بأسماء الملفات المطابقة لإكمال المحتمل.
تُعامل الكلمة التي تسبق النقطة كنمط لتوسيع مسار الملف، وتُدرج قائمة بأسماء الملفات المطابقة محل الكلمة. إذا وُفر معطى عددي، تُلحق نجمة قبل توسيع مسار الملف.
تُعرض قائمة التوسيعات التي كان من الممكن توليدها بواسطة glob-expand-word، ويُعاد رسم السطر. إذا وُفر معطى عددي، تُلحق نجمة قبل توسيع مسار الملف.
طباعة كافة الدوال وارتباطات مفاتيحها إلى مجرى إخراج readline. إذا وُفر معطى عددي، يُنسق الإخراج بطريقة تسمح بجعله جزءًا من ملف inputrc.
طباعة كافة متغيرات readline القابلة للضبط وقيمها إلى مجرى إخراج readline. إذا وُفر معطى عددي، يُنسق الإخراج بطريقة تسمح بجعله جزءًا من ملف inputrc.
طباعة كافة تسلسلات مفاتيح readline المربوطة بماكرو والسلاسل التي تخرجها. إذا وُفر معطى عددي، يُنسق الإخراج بطريقة تسمح بجعله جزءًا من ملف inputrc.
اعرض معلومات الإصدار عن نسخة bash الحالية.

الإكمال القابل للبرمجة

عند محاولة إكمال كلمة لمعطى أمر عُرف له تخصيص إكمال (compspec) باستخدام أمر complete المدمج (انظر أوامر الصدفة المدمجة أدناه)، تُستدعى مرافق الإكمال القابلة للبرمجة.

أولاً، يُحدد اسم الأمر. إذا كانت كلمة الأمر سلسلة فارغة (محاولة الإكمال في بداية سطر فارغ)، يُستخدم أي تخصيص إكمال عُرف بالخيار -E للأمر complete. إذا عُرف تخصيص إكمال لهذا الأمر، يُستخدم لتوليد قائمة بالإكمالات المحتملة للكلمة. إذا كانت كلمة الأمر مسارًا كاملاً، يُبحث عن تخصيص إكمال للمسار الكامل أولاً. إذا لم يُعثر على تخصيص إكمال للمسار الكامل، تُجرى محاولة لإيجاد تخصيص إكمال للجزء الذي يلي المائلة الأخيرة. إذا لم تسفر عمليات البحث هذه عن تخصيص إكمال، يُستخدم أي تخصيص إكمال عُرف بالخيار -D للأمر complete كخيار مبدئي. إذا لم يوجد تخصيص إكمال مبدئي، يحاول bash توسيع الأسماء المستعارة لكلمة الأمر كملجأ أخير، ويحاول العثور على تخصيص إكمال لكلمة الأمر من أي توسيع ناجح.

بمجرد العثور على تخصيص إكمال، يُستخدم لتوليد قائمة الكلمات المطابقة. إذا لم يُعثر على تخصيص إكمال، يُنفذ إكمال bash المبدئي كما هو موضح أعلاه تحت الإكمال.

أولاً، تُستخدم الإجراءات المحددة في تخصيص الإكمال. تُرجع فقط المطابقات التي تبدأ بالكلمة الجاري إكمالها. عند استخدام الخيار -f أو -d لإكمال اسم ملف أو اسم دليل، يُستخدم متغير الصدفة FIGNORE لتصفية المطابقات.

تُولد بعد ذلك أي إكمالات محددة بنمط توسيع مسار لـلخيار -G. لا يشترط في الكلمات المتولدة من النمط أن تطابق الكلمة الجاري إكمالها. لا يُستخدم متغير الصدفة GLOBIGNORE لتصفية المطابقات، ولكن يُستخدم المتغير FIGNORE.

بعد ذلك، تؤخذ في الاعتبار السلسلة المحددة كمعطى للخيار -W. تُقسم السلسلة أولاً باستخدام المحارف الموجودة في متغير IFS الخاص كفواصل. تُحترم قواعد الاقتباس في الصدفة. ثم تُوسع كل كلمة باستخدام توسيع الأقواس، وتوسيع العلامة مَدّة (~)، وتوسيع المعاملات والمتغيرات، واستبدال الأوامر، والتوسيع الحسابي، كما هو موضح أعلاه تحت التوسيع. تُقسم النتائج باستخدام القواعد الموضحة أعلاه تحت تقسيم الكلمات. وتُطابق نتائج التوسيع كبادئة مقابل الكلمة الجاري إكمالها، وتصبح الكلمات المطابقة هي الإكمالات المحتملة.

بعد توليد هذه المطابقات، تُستدعى أي دالة صدفة أو أمر محدد بالخيارين -F و -C. عند استدعاء الأمر أو الدالة، تُعين قيم للمتغيرات COMP_LINE و COMP_POINT و COMP_KEY و COMP_TYPE كما هو موضح أعلاه تحت متغيرات الصدفة. إذا كانت المستدعاة هي دالة صدفة، تُضبط أيضًا قيم المتغيرين COMP_WORDS و COMP_CWORD. عند استدعاء الدالة أو الأمر، يكون المعطى الأول ($1) هو اسم الأمر الذي يجري إكمال معطياته، والمعطى الثاني ($2) هو الكلمة الجاري إكمالها، والمعطى الثالث ($3) هو الكلمة التي تسبق الكلمة الجاري إكمالها في سطر الأوامر الحالي. لا يُجرى أي تصفية للإكمالات المتولدة مقابل الكلمة الجاري إكمالها؛ فللدالة أو الأمر حرية كاملة في توليد المطابقات.

تُستدعى أي دالة محددة بـ -F أولاً. يمكن للدالة استخدام أي من مرافق الصدفة، بما في ذلك أمر compgen المدمج الموضح أدناه، لتوليد المطابقات. ويجب أن تضع الإكمالات المحتملة في متغير مصفوفة COMPREPLY، بمعدل واحد لكل عنصر مصفوفة.

بعد ذلك، يُستدعى أي أمر محدد بالخيار -C في بيئة مكافئة لاستبدال الأوامر. ويجب أن يطبع قائمة بالإكمالات، واحد في كل سطر، إلى المخرج القياسي. يمكن استخدام الشرطة المائلة الخلفية للهروب من سطر جديد، إذا لزم الأمر.

بعد توليد كافة الإكمالات المحتملة، يُطبق أي مرشح محدد بالخيار -X على القائمة. المرشح هو نمط كالمستخدم في توسيع مسار الملف؛ وتُستبدل علامة & في النمط بنص الكلمة الجاري إكمالها. يمكن الهروب من علامة & حرفية بشرطة مائلة خلفية؛ تُزال الشرطة المائلة الخلفية قبل محاولة المطابقة. سيُزال أي إكمال يطابق النمط من القائمة. تنفي علامة ! البادئة النمط؛ وفي هذه الحالة سيُزال أي إكمال لا يطابق النمط. إذا فُعل خيار الصدفة nocasematch، تُجرى المطابقة بغض النظر عن حالة الأحرف الأبجدية.

أخيرًا، تُضاف أي بادئة ولاحقة محددة بالخيارين -P و -S إلى كل عضو في قائمة الإكمال، وتُرجع النتيجة إلى كود إكمال readline كقائمة للإكمالات المحتملة.

إذا لم تولد الإجراءات المطبقة سابقًا أي مطابقة، وكان الخيار -o dirnames قد وُفر للأمر complete عند تعريف تخصيص الإكمال، تُجرى محاولة لإكمال اسم الدليل.

إذا وُفر الخيار -o plusdirs للأمر complete عند تعريف تخصيص الإكمال، تُجرى محاولة لإكمال اسم الدليل وتُضاف أي مطابقات إلى نتائج الإجراءات الأخرى.

افتراضيًا، إذا عُثر على تخصيص إكمال، فإن ما يولده يُرجع إلى كود الإكمال كمجموعة كاملة من الإكمالات المحتملة. لا تُجرى محاولات لإكمالات bash المبدئية، ويُعطل إكمال أسماء الملفات المبدئي لـ readline. إذا وُفر الخيار -o bashdefault للأمر complete عند تعريف تخصيص الإكمال، تُحاول إكمالات bash المبدئية إذا لم يولد تخصيص الإكمال أي مطابقات. إذا وُفر الخيار -o default للأمر complete عند تعريف تخصيص الإكمال، فسيُنفذ إكمال readline المبدئي إذا لم يولد تخصيص الإكمال (وإكمالات bash المبدئية، إذا جُربت) أي مطابقات.

عندما يشير تخصيص الإكمال إلى الرغبة في إكمال أسماء الأدلة، تجبر دوال الإكمال القابلة للبرمجة مكتبة readline على إلحاق مائلة بالأسماء المكتملة التي هي روابط رمزية للأدلة، وفقًا لقيمة متغير readline المسمى mark-directories، بغض النظر عن ضبط متغير mark-symlinked-directories.

يوجد بعض الدعم لتعديل الإكمالات ديناميكيًا. وهذا يكون مفيدًا للغاية عند استخدامه مع إكمال مبدئي محدد بـ complete -D. يمكن لدوال الصدفة المنفذة كمعالجات إكمال أن تشير إلى وجوب إعادة محاولة الإكمال بإرجاع حالة خروج 124. إذا أرجعت دالة الصدفة 124، وغيرت تخصيص الإكمال المرتبط بالأمر الذي تجري محاولة إكماله (المزود كمعطى أول عند تنفيذ الدالة)، يبدأ الإكمال القابل للبرمجة من جديد، مع محاولة العثور على تخصيص إكمال جديد لهذا الأمر. يتيح ذلك بناء مجموعة من الإكمالات ديناميكيًا أثناء محاولة الإكمال، بدلاً من تحميلها كلها دفعة واحدة.

على سبيل المثال، بفرض وجود مكتبة لمواصفات الإكمال، كل منها محفوظ في ملف يقابل اسم الأمر، فإن دالة الإكمال المبدئية التالية ستحمل الإكمالات ديناميكياً:

_completion_loader()
{
. "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124
}
complete -D -F _completion_loader -o bashdefault -o default

التاريخ

عند تفعيل الخيار -o history للأمر المدمج set، توفر الصدفة إمكانية الوصول إلى تأريخ الأوامر، وهي قائمة الأوامر التي كُتبت سابقًا. تُستخدم قيمة متغير HISTSIZE كعدد للأوامر المراد حفظها في قائمة التأريخ. يُحفظ نص آخر أوامر بعدد HISTSIZE (الافتراضي 500). تخزن الصدفة كل أمر في قائمة التأريخ قبل توسيع المعاملات والمتغيرات (انظر التوسيع أعلاه) ولكن بعد إجراء توسيع التأريخ، وفقًا لقيم متغيرات الصدفة HISTIGNORE و HISTCONTROL.

عند بدء التشغيل، يُهيأ التأريخ من الملف المسمى بالمتغير HISTFILE (المبدئي ~/.bash_history). يُقلم الملف المسمى بقيمة HISTFILE، إذا لزم الأمر، بحيث لا يحتوي على أكثر من عدد الأسطر المحدد بقيمة HISTFILESIZE. إذا كان HISTFILESIZE غير مضبوط، أو مضبوطًا على قيمة فارغة، أو قيمة غير عددية، أو قيمة عددية أقل من الصفر، فلا يُقلم ملف التأريخ. عند قراءة ملف التأريخ، تُفسر الأسطر التي تبدأ بمحرف تعليق التأريخ متبوعًا مباشرة برقم على أنها طوابع زمنية لسطر التأريخ التالي. تُعرض هذه الطوابع الزمنية اختياريًا اعتمادًا على قيمة متغير HISTTIMEFORMAT. عندما تخرج صدفة مُفعل فيها التأريخ، تُنسخ آخر أسطر بعدد $HISTSIZE من قائمة التأريخ إلى $HISTFILE. إذا كان خيار الصدفة histappend مفعلًا (انظر وصف shopt تحت أوامر الصدفة المدمجة أدناه)، تُلحق الأسطر بملف التأريخ، وإلا يُكتب فوق ملف التأريخ. إذا كان HISTFILE غير مضبوط، أو إذا كان ملف التأريخ غير قابل للكتابة، فلا يُحفظ التأريخ. إذا ضُبط متغير HISTTIMEFORMAT، تُكتب طوابع زمنية في ملف التأريخ، موسومة بمحرف تعليق التأريخ، حتى يمكن الحفاظ عليها عبر جلسات الصدفة. يستخدم هذا محرف تعليق التأريخ لتمييز الطوابع الزمنية عن أسطر التأريخ الأخرى. بعد حفظ التأريخ، يُقلم ملف التأريخ بحيث لا يحتوي على أكثر من أسطر بعدد HISTFILESIZE. إذا كان HISTFILESIZE غير مضبوط، أو مضبوطًا على قيمة فارغة، أو قيمة غير عددية، أو قيمة عددية أقل من الصفر، فلا يُقلم ملف التأريخ.

يمكن استخدام الأمر المدمج fc (انظر أوامر الصدفة المدمجة أدناه) لسرد أو تحرير وإعادة تنفيذ جزء من قائمة التأريخ. يمكن استخدام أمر history المدمج لعرض أو تعديل قائمة التأريخ ومعالجة ملف التأريخ. عند استخدام تحرير سطر الأوامر، تتوفر أوامر بحث في كل وضع تحرير توفر إمكانية الوصول إلى قائمة التأريخ.

تسمح الصدفة بالتحكم في الأوامر التي تُحفظ في قائمة التأريخ. يمكن ضبط المتغيرين HISTCONTROL و HISTIGNORE لجعل الصدفة تحفظ فقط مجموعة فرعية من الأوامر المدخلة. خيار الصدفة cmdhist، إذا فُعل، يجعل الصدفة تحاول حفظ كل سطر من أمر متعدد الأسطر في نفس مدخلة التأريخ، مع إضافة فواصل منقوطة حيثما لزم الأمر للحفاظ على الصحة النحوية. خيار الصدفة lithist يجعل الصدفة تحفظ الأمر مع أسطر جديدة مضمنة بدلاً من الفواصل المنقوطة. انظر وصف أمر shopt المدمج أدناه تحت أوامر الصدفة المدمجة للحصول على معلومات حول ضبط وإلغاء ضبط خيارات الصدفة.

توسيع التاريخ

تدعم الصدفة ميزة توسيع التأريخ المشابهة لتوسيع التأريخ في csh. يصف هذا القسم ميزات الصيغة المتاحة. تُفعل هذه الميزة افتراضيًا للأصداف التفاعلية، ويمكن تعطيلها باستخدام الخيار +H للأمر المدمج set (انظر أوامر الصدفة المدمجة أدناه). لا تقوم الأصداف غير التفاعلية بتوسيع التأريخ افتراضيًا.

تُدخل توسيعات التاريخ كلمات من قائمة التاريخ إلى دفق المدخلات، مما يسهل تكرار الأوامر، أو إدراج معاملات أمر سابق في سطر المدخلات الحالي، أو إصلاح الأخطاء في الأوامر السابقة بسرعة.

يُجرى توسيع التأريخ فور قراءة سطر كامل، وقبل أن تقسمه الصدفة إلى كلمات، ويُنفذ على كل سطر على حدة دون مراعاة الاقتباس في الأسطر السابقة. يتم ذلك على جزأين. الأول هو تحديد السطر من قائمة التأريخ المراد استخدامه أثناء الاستبدال. والثاني هو اختيار أجزاء من ذلك السطر لتضمينها في السطر الحالي. السطر المختار من التأريخ هو الحدث (event)، وأجزاء ذلك السطر التي يُتعامل معها هي الكلمات (words). تتوفر مغيرات (modifiers) متنوعة لمعالجة الكلمات المختارة. يُقسم السطر إلى كلمات بنفس الطريقة المتبعة عند قراءة المدخلات، بحيث تُعتبر عدة كلمات مفصولة بـ محارف ميتة (metacharacters) ومحاطة بعلامات اقتباس كلمة واحدة. تبدأ توسيعات التأريخ بظهور محرف توسيع التأريخ، وهو ! افتراضيًا. يمكن فقط للشرطة المائلة الخلفية (\) وعلامات الاقتباس المفردة اقتباس محرف توسيع التأريخ، ولكن محرف توسيع التأريخ يُعامل أيضًا كأنه مقتبس إذا سبق مباشرة علامة الاقتباس المزدوجة الختامية في سلسلة مقتبسة اقتباسًا مزدوجًا.

تمنع عدة محارف توسيع التأريخ إذا وجدت مباشرة بعد محرف توسيع التأريخ، حتى لو كان غير مقتبس: المسافة، وعلامة الجدولة، والسطر الجديد، ورجوع العربة، وعلامة =. إذا فُعل خيار الصدفة extglob، فستمنع علامة ( التوسيع أيضًا.

يمكن استخدام عدة خيارات للصدفة قابلة للضبط باستخدام shopt المدمج لتكييف سلوك توسيع التأريخ. إذا فُعل خيار الصدفة histverify (انظر وصف shopt المدمج أدناه)، وكان readline مستخدمًا، فلا تُمرر استبدالات التأريخ مباشرة إلى محلل الصدفة. وبدلاً من ذلك، يُعاد تحميل السطر الموسع في مخزن تحرير readline المؤقت لمزيد من التعديل. إذا كان readline مستخدمًا، وفُعل خيار الصدفة histreedit، فسيُعاد تحميل استبدال تأريخ فاشل في مخزن تحرير readline المؤقت للتصحيح. يمكن استخدام الخيار -p لأمر history المدمج لمعاينة ما سيفعله توسيع التأريخ قبل استخدامه. يمكن استخدام الخيار -s لأمر history المدمج لإضافة أوامر إلى نهاية قائمة التأريخ دون تنفيذها فعليًا، بحيث تكون متاحة للاسترجاع لاحقًا.

تسمح الصدفة بالتحكم في الأحرف المتنوعة التي تستخدمها آلية توسيع التاريخ (انظر وصف histchars أعلاه تحت متغيرات الصدفة). تستخدم الصدفة حرف تعليق التاريخ لتمييز طوابع التاريخ الزمنية عند كتابة ملف التاريخ.

واسمات الأحداث

معين الحدث (event designator) هو مرجع لمدخلة سطر أوامر في قائمة التأريخ. ما لم يكن المرجع مطلقًا، تكون الأحداث نسبية للموضع الحالي في قائمة التأريخ.

!
بدء استبدال التأريخ، إلا إذا كان متبوعًا بـ فراغ، أو سطر جديد، أو رجوع عربة، أو = أو ( (عند تفعيل خيار الصدفة extglob باستخدام shopt المدمج).
!n
الإشارة إلى سطر الأوامر رقم n.
!-n
الإشارة إلى الأمر الحالي ناقص n.
!!
الإشارة إلى الأمر السابق. هذا مرادف لـ `!-1'.
!string
الرجوع إلى أحدث أمر يسبق الموضع الحالي في قائمة التاريخ ويبدأ بـ string.
!?string[?]
الإشارة إلى أحدث أمر يسبق الموضع الحالي في قائمة التأريخ ويحتوي على string. يمكن حذف علامة ? الختامية إذا كان string متبوعًا مباشرة بسطر جديد. إذا كان string مفقودًا، تُستخدم السلسلة من أحدث بحث؛ ويُعد خطأ إذا لم توجد سلسلة بحث سابقة.
^string1^string2^
استبدال سريع. تكرار الأمر السابق مع استبدال string1 بـ string2. يكافئ “!!:s^string1^string2^” (انظر المغيرات أدناه).
!#
كامل سطر الأوامر المكتوب حتى الآن.

واسمات الكلمات

تُستخدم معينات الكلمات لاختيار الكلمات المطلوبة من الحدث. تفصل علامة : بين تحديد الحدث ومعين الكلمة. يمكن حذفها إذا بدأ معين الكلمة بـ ^، أو $، أو *، أو -، أو %. تُرقم الكلمات من بداية السطر، حيث يرمز للكلمة الأولى بـ 0 (صفر). تُدرج الكلمات في السطر الحالي مفصولة بمسافات مفردة.

0 (صفر)
الكلمة رقم صفر. بالنسبة للصدفة، هذه هي كلمة الأمر.
الكلمة رقم n.
^
المعطى الأول. أي الكلمة 1.
$
الكلمة الأخيرة. وعادة ما تكون هي المعامل الأخير، ولكنها ستتوسع إلى الكلمة رقم صفر إذا كانت هناك كلمة واحدة فقط في السطر.
%
أول كلمة طابقتها أحدث عملية بحث `?string?'، إذا بدأت سلسلة البحث بمحرف هو جزء من كلمة.
نطاق من الكلمات؛ يختصر `-y' التعبير `0-y'.
*
كافة الكلمات باستثناء الكلمة الصفرية. هذا مرادف لـ `1-$'. لا يُعد استخدام * خطأ إذا كان هناك كلمة واحدة فقط في الحدث؛ وتُرجع سلسلة فارغة في هذه الحالة.
تختصر x-$.
تختصر x-$ مثل x*، ولكنها تحذف الكلمة الأخيرة. إذا كان x مفقوداً، فإن قيمته المبدئية تكون 0.

إذا وُفر معين كلمة بدون تحديد حدث، يُستخدم الأمر السابق كحدث.

المعدلات

بعد معين الكلمة الاختياري، قد يظهر تسلسل من واحد أو أكثر من المغيرات التالية، يسبق كلاً منها علامة `:'. تقوم هذه المغيرات بتعديل أو تحرير الكلمة أو الكلمات المختارة من حدث التأريخ.

إزالة مكون اسم الملف الختامي، وترك الصدر فقط.
إزالة كافة مكونات اسم الملف البادئة، وترك الذيل.
إزالة لاحقة من شكل .xxx، مع ترك الاسم الأساسي.
إزالة كل شيء ما عدا اللاحقة الأخيرة.
طباعة الأمر الجديد دون تنفيذه.
اقتباس الكلمات المستبدلة، مع هرب أي استبدالات أخرى.
اقتباس الكلمات المستبدلة كما في q، ولكن مع التقسيم إلى كلمات عند الفراغات والأسطر الجديدة. المغيران q و x متنافيان؛ ويُستخدم آخرهما تزويدًا.
استبدال new بأول تكرار لـ old في سطر الحدث. يمكن استخدام أي محرف كفاصل بدلاً من /. الفاصل الأخير اختياري إذا كان هو المحرف الأخير في سطر الحدث. يمكن اقتباس الفاصل في old و new بشرطة مائلة خلفية واحدة. إذا ظهرت & في new، تُستبدل بـ old. تقتبس الشرطة المائلة الخلفية الواحدة علامة &. إذا كان old فارغًا، يُضبط على آخر old استُبدل، أو إذا لم تحدث استبدالات تأريخ سابقة، على آخر string في بحث !?string[?] . إذا كان new فارغًا، يُحذف كل old مطابق.
&
تكرار الاستبدال السابق.
جعل التغييرات تُطبق على سطر الحدث بالكامل. يُستخدم هذا بالاقتران مع `:s' (مثلاً `:gs/old/new/') أو `:&'. إذا استُخدم مع `:s'، يمكن استخدام أي فاصل بدلاً من /، ويكون الفاصل الأخير اختياريًا إذا كان المحرف الأخير في سطر الحدث. يمكن استخدام a كمرادف لـ g.
تطبيق مغير `s' أو `&' التالي مرة واحدة لكل كلمة في سطر الحدث.

أوامر الصدفة المدمجة

ما لم يذكر خلاف ذلك، فإن كل أمر داخلي موثق في هذا القسم على أنه يقبل خيارات مسبوقة بـ - يقبل -- للدلالة على نهاية الخيارات. الأوامر الداخلية : و true و false و test/[ لا تقبل خيارات ولا تعامل -- بمعاملة خاصة. الأوامر الداخلية exit و logout و return و break و continue و let و shift تقبل وتعالج المعطيات التي تبدأ بـ - دون الحاجة إلى --. الأوامر الداخلية الأخرى التي تقبل معطيات ولكن لم يحدد قبولها لخيارات، تفسر المعطيات التي تبدأ بـ - كخيارات غير صالحة وتتطلب -- لمنع هذا التفسير.

: [معطيات]
لا تأثير؛ لا يفعل الأمر شيئًا سوى توسيع الوسائط arguments وتنفيذ أي عمليات إعادة توجيه محددة. حالة العودة هي صفر.

. filename [arguments]
قراءة الأوامر وتنفيذها من filename في بيئة الصدفة الحالية وإرجاع حالة الخروج لآخر أمر نُفذ من filename. إذا لم يحتوِ filename على مائلة، تُستخدم أسماء الملفات في PATH للعثور على الدليل الذي يحتوي على filename، ولكن لا يشترط أن يكون filename قابلاً للتنفيذ. والملف المبحوث عنه في PATH لا يشترط أن يكون قابلاً للتنفيذ. عندما لا يكون bash في وضع posix، فإنه يبحث في الدليل الحالي إذا لم يُعثر على الملف في PATH. إذا عُطل خيار sourcepath للأمر المدمج shopt، فلا يُبحث في PATH. إذا وُفرت أي arguments، فإنها تصبح المعاملات الموضعية عند تنفيذ filename. وإلا تظل المعاملات الموضعية دون تغيير. إذا فُعل الخيار -T، يرث . أي مصيدة (trap) لـ DEBUG؛ وإذا لم يُفعل، تُحفظ أي سلسلة مصيدة DEBUG وتُستعاد حول استدعاء .، ويقوم . بإلغاء ضبط مصيدة DEBUG أثناء تنفيذه. إذا لم يُضبط -T، وغير الملف المصدري مصيدة DEBUG، تُحتفظ بالقيمة الجديدة عند اكتمال .. حالة العودة هي حالة آخر أمر خُرِج منه داخل السكربت (0 إذا لم تُنفذ أي أوامر)، وخطأ إذا لم يُعثر على filename أو تعذرت قراءته.
يطبع Alias بدون معطيات أو مع الخيار -p قائمة الأسماء المستعارة بصيغة alias name=value على المخرج القياسي. عند توفير معطيات، يُعرف اسم مستعار لكل name أُعطيت value له. تسبب المسافة الختامية في value فحص الكلمة التالية لاستبدال الاسم المستعار عند توسيعه. لكل name في قائمة المعطيات لم تُوفر له value، يُطبع اسم وقيمة الاسم المستعار. يرجع Alias نتيجة صحيحة ما لم يُعطَ name لم يُعرف له اسم مستعار.
استئناف كل وظيفة معلقة jobspec في الخلفية، كما لو كانت قد بدأت بـ &. إذا لم يوجد jobspec، يُستخدم مفهوم الصدفة عن الوظيفة الحالية. يرجع bg jobspec القيمة 0 ما لم يُشغل عند تعطيل التحكم في الوظائف، أو عند تشغيله مع تفعيل التحكم في الوظائف ولم يُعثر على jobspec المحدد أو كان قد بدأ بدون تحكم في الوظائف.
عرض ارتباطات مفاتيح ودوال readline الحالية، أو ربط تسلسل مفاتيح بدالة أو ماكرو في readline، أو ضبط متغير readline. كل معطى ليس خيارًا هو أمر كما يظهر في ملف تهيئة readline مثل .inputrc، ولكن يجب تمرير كل ارتباط أو أمر كمعطى منفصل؛ مثلاً: '"\C-x\C-r": re-read-init-file'. الخيارات، إذا وُفرت، لها المعاني التالية:
استخدم keymap كخريطة مفاتيح لتتأثر بالارتباطات اللاحقة. أسماء keymap المقبولة هي emacs، emacs-standard، emacs-meta، emacs-ctlx، vi، vi-move، vi-command، و vi-insert. رمز vi يعادل vi-command (vi-move مرادف أيضًا)؛ و emacs يعادل emacs-standard.
أدرج أسماء كافة دالات readline.
عرض أسماء دوال readline وارتباطاتها بطريقة تسمح بإعادة قراءتها.
سرد أسماء دوال readline وارتباطاتها الحالية.
عرض تسلسلات مفاتيح readline المربوطة بماكرو والسلاسل التي تخرجها بطريقة تسمح بإعادة قراءتها.
اعرض تسلسلات مفاتيح readline المرتبطة بالماكرو والسلاسل النصية التي تخرجها.
عرض أسماء متغيرات readline وقيمها بطريقة تسمح بإعادة قراءتها.
سرد أسماء وقيم متغيرات readline الحالية.
قراءة روابط المفاتيح من filename.
الاستعلام عن المفاتيح التي تستدعي function المذكورة.
إلغاء ربط كافة المفاتيح المربوطة بـ function المذكورة.
إزالة أي ربط حالي لـ keyseq.
التسبب في تنفيذ shell-command كلما أُدخل keyseq. عند تنفيذ shell-command، تضبط الصدفة متغير READLINE_LINE بمحتويات مخزن سطر readline المؤقت، وتضبط متغيري READLINE_POINT و READLINE_MARK بالموقع الحالي لنقطة الإدراج ونقطة الإدراج المحفوظة (العلامة)، على التوالي. تخصص الصدفة أي معطى عددي وفره المستخدم لمتغير READLINE_ARGUMENT. إذا لم يوجد معطى، فلا يُضبط هذا المتغير. إذا غير الأمر المنفذ قيمة أي من READLINE_LINE أو READLINE_POINT أو READLINE_MARK، فستنعكس هذه القيم الجديدة في حالة التحرير.
سرد كافة تسلسلات المفاتيح المربوطة بأوامر صدفة والأوامر المرتبطة بها بتنسيق يمكن إعادة استخدامه كمدخلات.

قيمة العودة هي 0 ما لم يُعطَ خيار غير معروف أو يحدث خطأ.

الخروج من داخل حلقة for أو while أو until أو select. إذا حُدد n، يُكسر n من المستويات. يجب أن يكون n أكبر من أو يساوي 1. إذا كان n أكبر من عدد الحلقات المحيطة، يُخرج من كافة الحلقات المحيطة. قيمة العودة هي 0 ما لم يكن n ليس أكبر من أو يساوي 1.
تنفيذ أمر الصدفة المدمج المحدد، مع تمرير arguments إليه، وإرجاع حالة خروجه. هذا مفيد عند تعريف دالة لها نفس اسم أمر صدفة مدمج، للاحتفاظ بوظيفة الأمر المدمج داخل الدالة. يُعاد تعريف أمر cd المدمج عادةً بهذه الطريقة. حالة العودة خطأ إذا لم يكن shell-builtin أمر صدفة مدمج.
يرجع سياق أي استدعاء لبرنامج فرعي نشط (دالة صدفة أو سكربت نُفذ بالأمرين المدمجين . أو source). بدون expr، يعرض caller رقم السطر واسم ملف المصدر لاستدعاء البرنامج الفرعي الحالي. إذا وُفر عدد صحيح غير سالب كـ expr، يعرض caller رقم السطر، واسم البرنامج الفرعي، وملف المصدر المقابل لهذا الموضع في مكدس استدعاء التنفيذ الحالي. يمكن استخدام هذه المعلومات الإضافية، مثلاً، لطباعة تتبع المكدس. الإطار الحالي هو الإطار 0. قيمة العودة هي 0 ما لم تكن الصدفة لا تنفذ استدعاء برنامج فرعي أو كان expr لا يقابل موضعًا صالحًا في مكدس الاستدعاء.
تغيير الدليل الحالي إلى dir. إذا لم يُوفر dir، تكون قيمة متغير الصدفة HOME هي المبدئية. يعرف المتغير CDPATH مسار البحث عن الدليل الذي يحتوي على dir: يُبحث في كل اسم دليل في CDPATH عن dir. تُفصل أسماء الأدلة البديلة في CDPATH بنقطتين رأسيين (:). اسم الدليل الفارغ في CDPATH هو نفسه الدليل الحالي، أي.”. إذا بدأ dir بمائلة (/)، فلا يُستخدم CDPATH. يتسبب الخيار -P في جعل cd يستخدم بنية الدليل الفيزيائية بحل الروابط الرمزية أثناء عبور dir وقبل معالجة حالات .. في dir (انظر أيضًا الخيار -P للأمر المدمج set)؛ ويجبر الخيار -L على اتباع الروابط الرمزية بحل الرابط بعد معالجة حالات .. في dir. إذا ظهر .. في dir، تُعالج بإزالة مكون المسار السابق مباشرة من dir، وصولاً إلى مائلة أو بداية dir. إذا وُفر الخيار -e مع -P، وتعذر تحديد دليل العمل الحالي بنجاح بعد تغيير الدليل، فسيرجع cd حالة غير ناجحة. في الأنظمة التي تدعمه، يعرض الخيار -@ الخصائص الموسعة المرتبطة بملف كدليل. يُحول المعطى - إلى $OLDPWD قبل محاولة تغيير الدليل. إذا استُخدم اسم دليل غير فارغ من CDPATH، أو إذا كان - هو المعطى الأول، وكان تغيير الدليل ناجحًا، يُكتب المسار المطلق لدليل العمل الجديد إلى المخرج القياسي. إذا كان تغيير الدليل ناجحًا، يضبط cd قيمة متغير البيئة PWD إلى اسم الدليل الجديد، ويضبط متغير البيئة OLDPWD إلى قيمة دليل العمل الحالي قبل التغيير. قيمة العودة هي true إذا غُيّر الدليل بنجاح؛ وfalse خلاف ذلك.
تشغيل command مع args مع تعطيل البحث العادي عن دوال الصدفة. تُنفذ فقط الأوامر المدمجة أو الأوامر الموجودة في PATH. إذا أُعطي الخيار -p، يُجرى البحث عن command باستخدام قيمة مبدئية لـ PATH تضمن العثور على كافة الأدوات القياسية. إذا وُفر أي من الخيارين -V أو -v، يُطبع وصف لـ command. يتسبب الخيار -v في عرض كلمة واحدة تشير إلى الأمر أو اسم الملف المستخدم لاستدعاء command؛ بينما ينتج الخيار -V وصفًا أكثر إسهابًا. إذا وُفر الخيار -V أو -v، تكون حالة الخروج 0 إذا عُثر على command، و 1 إذا لم يُعثر عليه. إذا لم يُوفر أي من الخيارين وحدث خطأ أو تعذر العثور على command، تكون حالة الخروج 127. خلاف ذلك، تكون حالة خروج الأمر المدمج command هي حالة خروج command.
توليد مطابقات إكمال محتملة لـ word وفقًا لـ options، والتي يمكن أن تكون أي خيار يقبله الأمر المدمج complete باستثناء -p و -r، وكتابة المطابقات إلى المخرج القياسي. عند استخدام الخيارين -F أو -C، فإن متغيرات الصدفة المتنوعة التي تضبطها مرافق الإكمال القابلة للبرمجة، رغم توافرها، لن تكون لها قيم مفيدة.

ستتولد المطابقات بنفس الطريقة كما لو كان كود الإكمال القابل للبرمجة قد ولدها مباشرة من تخصيص إكمال بنفس الأعلام. إذا حُدد word، فستُعرض فقط تلك الإكمالات التي تطابق word.

القيمة المرجعة هي true ما لم يُقدم خيار غير صالح، أو لم تُولد أي تطابقات.


[-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] name [name ...]
تحديد كيفية إكمال معطيات كل name. إذا وُفر الخيار -p، أو لم تُوفر أي خيارات، تُطبع تخصيصات الإكمال الموجودة بطريقة تسمح بإعادة استخدامها كمدخلات. يزيل الخيار -r تخصيص إكمال لكل name، أو كافة تخصيصات الإكمال إذا لم تُوفر أي names. يشير الخيار -D إلى أن الخيارات والإجراءات الأخرى المزودة يجب أن تُطبق على إكمال الأمر “المبدئي”؛ أي الإكمال المحاول على أمر لم يُعرف له إكمال سابقًا. يشير الخيار -E إلى أن الخيارات والإجراءات الأخرى المزودة يجب أن تُطبق على إكمال الأمر “الفارغ”؛ أي الإكمال المحاول على سطر فارغ. يشير الخيار -I إلى أن الخيارات والإجراءات الأخرى المزودة يجب أن تُطبق على الإكمال في الكلمة الأولى التي ليست إسنادًا في السطر، أو بعد فاصل أوامر مثل ; أو |، وهو عادةً إكمال اسم الأمر. إذا وُفرت خيارات متعددة، تكون للأولوية للخيار -D على -E، وكلاهما لهما الأولوية على -I. إذا وُفر أي من -D أو -E أو -I، تُتجاهل أي معطيات name أخرى؛ وتُطبق هذه الإكمالات فقط على الحالة المحددة بالخيار.

عملية تطبيق تخصيصات الإكمال هذه عند محاولة إكمال الكلمات موضحة above under Programmable Completion.

الخيارات الأخرى، إذا حُددت، فلها المعاني التالية. يجب وضع وسائط الخيارات -G و -W و -X (وإذا لزم الأمر، الخياران -P و -S) بين علامتي اقتباس لحمايتها من التوسع قبل استدعاء الأمر المدمج complete.

يتحكم الـ خيار-الإكمال في عدة جوانب من سلوك مواصفة الإكمال (compspec) بعيدًا عن التوليد البسيط للإكمالات. قد يكون خيار-الإكمال واحدًا من:
أجرِ بقية عمليات إكمال bash المبدئية إذا لم يولد compspec أي تطابقات.
استخدام إكمال أسماء الملفات المبدئي لـ readline إذا لم يولد تخصيص الإكمال أي مطابقات.
أجرِ إكمالاً لاسم الدليل إذا لم يولد compspec أي تطابقات.
أسماء الملفات
إخبار readline بأن تخصيص الإكمال يولد أسماء ملفات، حتى تتمكن من إجراء أي معالجة خاصة بأسماء الملفات (مثل إضافة مائلة لأسماء الأدلة، أو اقتباس المحارف الخاصة، أو منع المسافات الختامية). مخصص للاستخدام مع دوال الصدفة.
إخبار readline بعدم اقتباس الكلمات المكتملة إذا كانت أسماء ملفات (اقتباس أسماء الملفات هو المبدئي).
إخبار readline بعدم فرز قائمة الإكمالات المحتملة أبجديًا.
إخبار readline بعدم إلحاق مسافة (وهو المبدئي) بالكلمات المكتملة في نهاية السطر.
بعد توليد أي مطابقات محددة بتخصيص الإكمال، تُحاول محاولة إكمال اسم الدليل وتُضاف أي مطابقات إلى نتائج الإجراءات الأخرى.
قد يكون الـ إجراء واحدًا مما يلي لتوليد قائمة بالإكمالات الممكنة:
أسماء مستعارة. يمكن تحديدها أيضاً باستخدام -a.
أسماء متغيرات المصفوفة.
أسماء روابط مفاتيح Readline.
أسماء أوامر الصدفة المدمجة. يمكن تحديدها أيضًا كـ -b.
أسماء الأوامر. قد تُحدد أيضًا كـ -c.
أسماء الأدلة. يمكن تحديدها أيضاً كـ -d.
أسماء أوامر الصدفة المدمجة المعطلة.
أسماء أوامر الصدفة المدمجة الممكنة.
أسماء متغيرات الصدفة المصدرة. يمكن تحديدها أيضًا كـ -e.
أسماء الملفات. يمكن تحديدها أيضًا بـ -f.
الدالة
أسماء دوال الصدفة.
مجموعة
أسماء المجموعات. يمكن تحديدها أيضًا بـ -g.
مواضيع المساعدة كما تقبلها الأداة المضمنة help.
أسماء المضيفين، كما هي مأخوذة من الملف المحدد بواسطة متغير الصدفة HOSTFILE.
أسماء الوظائف (Job names)، إذا كان التحكم في الوظائف نشطاً. يمكن تحديدها أيضاً كـ -j.
كلمات الصدفة المحجوزة. يمكن تحديدها أيضًا بـ -k.
أسماء المهام الجارية، إذا كان التحكم بالمهام نشطًا.
أسماء الخدمة. يمكن تحديدها أيضًا بـ -s.
المعطيات الصالحة للخيار -o للأمر الداخلي set.
أسماء خيارات الصدفة كما يقبلها أمر shopt المدمج.
أسماء الإشارات (Signals).
أسماء المهام المتوقفة، إذا كان التحكم بالمهام نشطًا.
أسماء المستخدمين. يمكن تحديدها أيضاً عبر -u.
أسماء جميع متغيرات الصدفة. يمكن تحديدها أيضًا كـ -v.
يُنفذ command في بيئة صدفة فرعية، ويُستخدم خرجه كإكمالات ممكنة. تُمرر الوسائط كما هو الحال مع الخيار -F.
تُنفذ دالة الصدفة function في بيئة الصدفة الحالية. عند تنفيذ الدالة، يكون المعطى الأول ($1) هو اسم الأمر الذي يجري إكمال معطياته، والمعطى الثاني ($2) هو الكلمة الجاري إكمالها، والمعطى الثالث ($3) هو الكلمة التي تسبق الكلمة الجاري إكمالها في سطر الأوامر الحالي. عند انتهائها، تُجلب الإكمالات المحتملة من قيمة متغير المصفوفة COMPREPLY.
يُوسع نمط توسيع المسار globpat لتوليد الإكمالات المحتملة.
تُضاف البادئة prefix في بداية كل إكمال محتمل بعد تطبيق كافة الخيارات الأخرى.
تُلحق اللاحقة suffix بكل إكمال محتمل بعد تطبيق كافة الخيارات الأخرى.
تُقسم wordlist باستخدام المحارف الموجودة في متغير IFS الخاص كفواصل، وتُوسع كل كلمة ناتجة. تُحترم قواعد الاقتباس في الصدفة داخل wordlist لتوفير آلية تسمح للكلمات باحتواء محارف ميتة للصدفة أو محارف موجودة في قيمة IFS. الإكمالات المحتملة هي أعضاء القائمة الناتجة التي تطابق الكلمة الجاري إكمالها.
يُعد filterpat نمطًا يُستخدم لتوسيع أسماء المسارات. يُطبق على قائمة الإكمالات الممكنة التي ولدتها الخيارات والوسائط السابقة، وتُزال كل إكمال يطابق filterpat من القائمة. علامة ! البادئة في filterpat تنفي النمط؛ في هذه الحالة، تُزال أي إكمال لا يطابق filterpat.

قيمة العودة صحيحة (true) ما لم يُوفر خيار غير صالح، أو يُوفر خيار غير -p أو -r بدون معطى name، أو تُجرى محاولة لإزالة تخصيص إكمال لـ name لا يوجد له تخصيص، أو يحدث خطأ أثناء إضافة تخصيص إكمال.

تعديل خيارات الإكمال لكل name وفقًا لـ options، أو للإكمال الجاري تنفيذه حاليًا إذا لم تُوفر أي names. إذا لم تُعطَ أي options، تُعرض خيارات الإكمال لكل name أو الإكمال الحالي. القيم الممكنة لـ option هي تلك الصالحة للأمر المدمج complete الموضح أعلاه. يشير الخيار -D إلى أن الخيارات الأخرى المزودة يجب أن تُطبق على إكمال الأمر “المبدئي”؛ أي الإكمال المحاول على أمر لم يُعرف له إكمال سابقًا. يشير الخيار -E إلى أن الخيارات الأخرى المزودة يجب أن تُطبق على إكمال الأمر “الفارغ”؛ أي الإكمال المحاول على سطر فارغ. يشير الخيار -I إلى أن الخيارات الأخرى المزودة يجب أن تُطبق على الإكمال في الكلمة الأولى التي ليست إسنادًا في السطر، أو بعد فاصل أوامر مثل ; أو |، وهو عادةً إكمال اسم الأمر.

القيمة المرجعة هي true ما لم يُقدم خيار غير صالح، أو حدثت محاولة لتعديل الخيارات لـ name لا يوجد له مواصفات إكمال، أو حدث خطأ في المخرج.

استئناف التكرار التالي للحلقة المحيطة for أو while أو until أو select. إذا حُدد n، يُستأنف العمل عند الحلقة المحيطة رقم n. يجب أن يكون n أكبر من أو يساوي 1. إذا كان n أكبر من عدد الحلقات المحيطة، تُستأنف آخر حلقة محيطة (الحلقة “العليا”). قيمة العودة هي 0 ما لم يكن n ليس أكبر من أو يساوي 1.
التصريح عن المتغيرات و/أو إعطاؤها سمات. إذا لم تُعطَ أي names، تُعرض قيم المتغيرات. سيعرض الخيار -p السمات والقيم لكل name. عند استخدام -p مع معطيات name، تُتجاهل الخيارات الإضافية الأخرى غير -f و -F. عند توفير -p بدون معطيات name، سيعرض السمات والقيم لكافة المتغيرات التي تملك السمات المحددة بالخيارات الإضافية. إذا لم تُوفر خيارات أخرى مع -p، سيعرض declare السمات والقيم لكافة متغيرات الصدفة. سيقصر الخيار -f العرض على دوال الصدفة. يمنع الخيار -F عرض تعريفات الدوال؛ حيث تُطبع فقط أسماء الدوال وسماتها. إذا فُعل خيار الصدفة extdebug باستخدام shopt، يُعرض أيضًا اسم ملف المصدر ورقم السطر حيث عُرف كل name. الخيار -F يتضمن -f. يجبر الخيار -g على إنشاء المتغيرات أو تعديلها في النطاق العام، حتى عند تنفيذ declare داخل دالة صدفة. ويُتجاهل في كافة الحالات الأخرى. يتسبب الخيار -I في جعل المتغيرات المحلية ترث السمات (باستثناء سمة nameref) والقيمة لأي متغير موجود بنفس name في نطاق محيط. إذا لم يوجد متغير موجود، يكون المتغير المحلي غير مضبوط مبدئيًا. يمكن استخدام الخيارات التالية لقصر المخرج على المتغيرات ذات السمات المحددة أو لإعطاء المتغيرات سمات:
كل اسم هو متغير مصفوفة مفهرسة (راجع المصفوفات above).
كل اسم هو متغير مصفوفة ترابطية (راجع المصفوفات above).
استخدام أسماء الدوال فقط.
تُعامل المتغير كعدد صحيح؛ التقييم الحسابي (انظر ARITHMETIC EVALUATION above) يُنفذ عندما يُسند قيمة للمتغير.
عند تعيين قيمة للمتغير، تُحول كافة المحارف الكبيرة إلى محارف صغيرة. تُعطل سمة المحارف الكبيرة.
اعطِ كل اسم سمة nameref، مما يجعله مرجع اسم لمتغير آخر. يتم تحديد ذلك المتغير الآخر بواسطة قيمة الاسم. جميع المراجع والتخصيصات وتعديلات السمات على الاسم، باستثناء تلك التي تستخدم أو تغير سمة -n نفسها، تُنفذ على المتغير المشار إليه بواسطة قيمة الاسم. لا يمكن تطبيق سمة nameref على متغيرات المصفوفات.
يجعل name للقراءة فقط. لا يمكن بعد ذلك تعيين قيم لهذه الأسماء بواسطة بيانات تعيين لاحقة أو إلغاء تعيينها.
اعطِ كل اسم سمة trace. ترث الدوال المتتبعة مصائد DEBUG و RETURN من الصدفة المستدعية. ليس لسمة التتبع معنى خاص للمتغيرات.
عند تعيين قيمة للمتغير، تُحول كافة المحارف الصغيرة إلى محارف كبيرة. تُعطل سمة المحارف الصغيرة.
وسم names للتصدير إلى الأوامر اللاحقة عبر البيئة.

يؤدي استخدام `+' بدلاً من `-' إلى إيقاف السمة بدلاً من ذلك، مع استثناء أن +a و +A لا يمكن استخدامهما لتدمير متغيرات المصفوفة، و +r لن يزيل سمة القراءة فقط (readonly). عند استخدامهما في دالة، يجعل declare و typeset كل name محليًا، كما في أمر local، ما لم يُوفر الخيار -g. إذا كان اسم المتغير متبوعًا بـ =value، تُضبط قيمة المتغير إلى value. عند استخدام -a أو -A وصيغة الإسناد المركب لإنشاء متغيرات المصفوفة، لا تسري السمات الإضافية إلا في الإسنادات اللاحقة. قيمة العودة هي 0 ما لم يُواجه خيار غير صالح، أو تُجرى محاولة لتعريف دالة باستخدام ``-f foo=bar'', جرت محاولة لتعيين قيمة لمتغير للقراءة فقط، أو جرت محاولة لتعيين قيمة لمتغير مصفوفة دون استخدام صيغة التعيين المركبة (انظر Arrays above), أحد الأسماء ليس اسم متغير صدفة صالح، أو بُذلت محاولة لإيقاف حالة القراءة فقط لمتغير قراءة فقط، أو بُذلت محاولة لإيقاف حالة المصفوفة لمتغير مصفوفة، أو بُذلت محاولة لعرض دالة غير موجودة باستخدام -f.

بدون خيارات، يعرض قائمة الأدلة المتذكرة حاليًا. العرض المبدئي يكون في سطر واحد مع فصل أسماء الأدلة بمسافات. تُضاف الأدلة إلى القائمة باستخدام أمر pushd؛ ويزيل أمر popd المدخلات من القائمة. الدليل الحالي هو دائمًا الدليل الأول في المكدس.
يمسح مكدس الأدلة بحذف جميع المدخلات.
ينتج قائمة باستخدام أسماء المسارات الكاملة؛ يستخدم تنسيق القائمة المبدئي علامة المدة (~) للإشارة إلى دليل المنزل.
اطبع مكدس الأدلة مع مدخل واحد لكل سطر.
اطبع مكدس الأدلة مع مدخل واحد لكل سطر، مسبوقاً بفهرسه في المكدس.
+n
يعرض المدخلة رقم n بالعد من يسار القائمة التي تظهر بواسطة dirs عند استدعائه بدون خيارات، بدءًا من الصفر.
يعرض المدخلة رقم n بالعد من يمين القائمة التي تظهر بواسطة dirs عند استدعائه بدون خيارات، بدءًا من الصفر.

القيمة المرجعة هي 0 ما لم يُقدم خيار غير صالح أو كان n يشير إلى ما بعد نهاية مكدس الدلائل.

بدون خيارات، يُزال كل jobspec من جدول الوظائف النشطة. إذا لم يوجد jobspec، ولم يُوفر أي من الخيارين -a أو -r، تُستخدم الوظيفة الحالية. إذا أُعطي الخيار -h، فلا يُزال كل jobspec من الجدول، ولكنه يُوسم بحيث لا تُرسل إشارة SIGHUP إلى الوظيفة إذا تلقت الصدفة إشارة SIGHUP. إذا لم يُوفر jobspec، فإن الخيار -a يعني إزالة أو وسم كافة الوظائف؛ ويقصر الخيار -r بدون معطى jobspec العملية على الوظائف الجارية. قيمة العودة هي 0 ما لم يكن jobspec لا يحدد وظيفة صالحة.
إخراج args، مفصولة بمسافات، متبوعة بسطر جديد. حالة العودة هي 0 ما لم يحدث خطأ في الكتابة. إذا حُدد -n، يُمنع السطر الجديد الختامي. إذا أُعطي الخيار -e، يُفعل تفسير محارف الهروب بالشرطة المائلة الخلفية التالية. يعطل الخيار -E تفسير محارف الهروب هذه، حتى في الأنظمة التي تُفسر فيها افتراضيًا. يمكن استخدام خيار الصدفة xpg_echo لتحديد ديناميكيًا ما إذا كان echo سيوسع محارف الهروب هذه افتراضيًا أم لا. لا يفسر echo العلامة -- كإشارة لنهاية الخيارات. يفسر echo تسلسلات الهروب التالية:
تنبيه (جرس)
backspace
اقمع المزيد من المخرجات
محرف هروب
تغذية الصفحة
سطر جديد
رجوع العربة
جدولة أفقية
علامة جدولة عمودية
\\
backslash
\0nnn
محرف الثمانية بتات الذي قيمته هي القيمة الثمانية nnn (من صفر إلى ثلاثة أرقام ثمانية)
حرف الثمانية بتات الذي قيمته هي القيمة الست عشرية HH (رقم واحد أو رقمان ست عشريان)
حرف يونيكود (ISO/IEC 10646) الذي قيمته هي القيمة الست عشرية HHHH (من رقم واحد إلى أربعة أرقام ست عشرية)
حرف يونيكود (ISO/IEC 10646) الذي قيمته هي القيمة الست عشرية HHHHHHHH (من رقم واحد إلى ثمانية أرقام ست عشرية)
تفعيل وتعطيل أوامر الصدفة المدمجة. يسمح تعطيل الأمر المدمج بتنفيذ أمر قرص له نفس اسم أمر صدفة مدمج دون تحديد مسار كامل، رغم أن الصدفة تبحث عادةً عن الأوامر المدمجة قبل أوامر القرص. إذا استُخدم -n، يُعطل كل name؛ وخلاف ذلك، تُفعل names. مثلاً، لاستخدام ملف test الثنائي الموجود عبر PATH بدلاً من نسخة الصدفة المدمجة، شغل ``enable -n test''. يعني الخيار -f تحميل الأمر المدمج الجديد name من الكائن المشترك filename، في الأنظمة التي تدعم التحميل الديناميكي. سيستخدم Bash قيمة متغير BASH_LOADABLES_PATH كقائمة أدلة مفصولة بنقطتين رأسيين للبحث عن filename. القيمة المبدئية تعتمد على النظام. سيحذف الخيار -d أمرًا مدمجًا حُمِّل سابقًا بـ -f. إذا لم تُعطَ أي معطيات name، أو إذا وُفر الخيار -p، تُطبع قائمة بأوامر الصدفة المدمجة. بدون معطيات خيارات أخرى، تتكون القائمة من كافة أوامر الصدفة المدمجة المفعلة. إذا وُفر -n، تُطبع الأوامر المدمجة المعطلة فقط. إذا وُفر -a، تتضمن القائمة المطبوعة كافة الأوامر المدمجة، مع إشارة إلى ما إذا كان كل منها مفعلًا أم لا. إذا وُفر -s، يقصر المخرج على أوامر POSIX المدمجة الخاصة. إذا لم تُوفر خيارات ولم يكن name أمر صدفة مدمج، سيحاول enable تحميل name من كائن مشترك يسمى name، كما لو كان الأمر ``enable -f name name . القيمة المرجعة هي 0 ما لم يكن name ليس وظيفة صدفة مدمجة أو حدث خطأ أثناء تحميل وظيفة مدمجة جديدة من كائن مشترك.
تُقرأ args وتُسلسل معًا في أمر واحد. ثم يُقرأ هذا الأمر ويُنفذ بواسطة الصدفة، وتُرجع حالة خروجه كقيمة لـ eval. إذا لم توجد args، أو كانت المعطيات فارغة فقط، يرجع eval القيمة 0.
إذا حُدد command، فإنه يستبدل الصدفة. لا تُنشأ عملية جديدة. تصبح arguments هي معطيات command. إذا وُفر الخيار -l، تضع الصدفة شرطة في بداية المعطى الصفري الممرر إلى command. وهذا ما يفعله login(1). يتسبب الخيار -c في تنفيذ command ببيئة فارغة. إذا وُفر -a، تمرر الصدفة name كالمعطى الصفري للأمر المنفذ. إذا تعذر تنفيذ command لسبب ما، تخرج الصدفة غير التفاعلية، ما لم يكن خيار الصدفة execfail مفعلًا؛ في تلك الحالة، يرجع فشلاً. ترجع الصدفة التفاعلية فشلاً إذا تعذر تنفيذ الملف. تخرج الصدفة الفرعية دون قيد أو شرط إذا فشل exec. إذا لم يُحدد command، تسري أي عمليات إعادة توجيه في الصدفة الحالية، وتكون حالة العودة 0. إذا حدث خطأ في إعادة التوجيه، تكون حالة العودة 1.
التسبب في خروج الصدفة بحالة n. إذا حُذف n، تكون حالة الخروج هي حالة آخر أمر نُفذ. تُنفذ مصيدة (trap) لـ EXIT قبل إنهاء الصدفة.
تُوسم names المزودة للتصدير الآلي إلى بيئة الأوامر المنفذة لاحقًا. إذا أُعطي الخيار -f، تشير names إلى الدوال. إذا لم تُعطَ names، أو وُفر الخيار -p، تُطبع قائمة بأسماء كافة المتغيرات المصدرة. يتسبب الخيار -n في إزالة خاصية التصدير من كل name. إذا كان اسم المتغير متبوعًا بـ =word، تُضبط قيمة المتغير إلى word. يرجع export حالة خروج 0 ما لم يُصادف خيار غير صالح، أو كان أحد names ليس اسم متغير صدفة صالحًا، أو وُفر -f مع name ليس دالة.
يختار النموذج الأول نطاقًا من الأوامر من first إلى last من قائمة التأريخ ويعرضها أو يحررها ويعيد تنفيذها. يمكن تحديد first و last كسلسلة (لتحديد موقع آخر أمر يبدأ بتلك السلسلة) أو كرقم (فهرس في قائمة التأريخ، حيث يُستخدم الرقم السالب كإزاحة من رقم الأمر الحالي). عند السرد، فإن first أو last بقيمة 0 يكافئ -1، و -0 يكافئ الأمر الحالي (عادةً أمر fc)؛ وخلاف ذلك فإن 0 يكافئ -1 و -0 غير صالح. إذا لم يُحدد last، يُضبط على الأمر الحالي للسرد (بحيث ``fc -l -10'' تطبع آخر 10 أوامر) وإلى first بخلاف ذلك. إذا لم يُحدد first، فيُضبط على الأمر السابق للتحرير وعلى -16 للقائمة.

The -n option suppresses the command numbers when listing. The -r option reverses the order of the commands. If the -l option is given, the commands are listed on standard output. Otherwise, the editor given by ename is invoked on a file containing those commands. If ename is not given, the value of the FCEDIT variable is used, and the value of EDITOR if FCEDIT is not set. If neither variable is set, vi is used. When editing is complete, the edited commands are echoed and executed.

في النموذج الثاني، يُعاد تنفيذ command بعد استبدال كل حالة لـ pat بـ rep. يُفسر Command بنفس طريقة first أعلاه. اسم مستعار مفيد للاستخدام مع هذا هو ``r="fc -s"'', حتى تجعل الكتابة ``r cc'' يُشغِّل آخر أمر يبدأ بـ ``cc'' والكتابة ``r'' يعيد تنفيذ الأمر الأخير.

إذا استُخدم النموذج الأول، تكون قيمة العودة 0 ما لم يُواجه خيار غير صالح أو حدد first أو last أسطر تأريخ خارج النطاق. إذا وُفر الخيار -e، تكون قيمة العودة هي قيمة آخر أمر نُفذ أو فشل إذا حدث خطأ في الملف المؤقت للأوامر. إذا استُخدم النموذج الثاني، تكون حالة العودة هي حالة الأمر المعاد تنفيذه، ما لم يكن cmd لا يحدد سطر تأريخ صالحًا، وفي هذه الحالة يرجع fc فشلاً.

استئناف jobspec في الواجهة، وجعله الوظيفة الحالية. إذا لم يوجد jobspec، يُستخدم مفهوم الصدفة عن الوظيفة الحالية. قيمة العودة هي قيمة الأمر الذي وُضع في الواجهة، أو فشل إذا شُغل عند تعطيل التحكم في الوظائف، أو عند تشغيله مع تفعيل التحكم في الوظائف ولم يحدد jobspec وظيفة صالحة أو حدد jobspec وظيفة بدأت بدون تحكم في الوظائف.
يُستخدم getopts بواسطة إجراءات الصدفة لتحليل المعاملات الموضعية. يحتوي optstring على محارف الخيارات المراد تمييزها؛ إذا كان المحرف متبوعًا بنقطتين رأسيين، فمن المتوقع أن يكون للخيار معطى، ويجب أن يُفصل عنه بمسافة بيضاء. لا يجوز استخدام محرفي النقطتين الرأسيين وعلامة الاستفهام كمحارف خيارات. في كل مرة يُستدعى فيها، يضع getopts الخيار التالي في متغير الصدفة name، مع تهيئة name إذا لم يكن موجودًا، ويضع فهرس المعطى التالي المراد معالجته في المتغير OPTIND. يُهيأ OPTIND إلى 1 في كل مرة تُستدعى فيها الصدفة أو سكربت صدفة. عندما يتطلب خيار ما معطى، يضع getopts ذلك المعطى في المتغير OPTARG. لا تعيد الصدفة ضبط OPTIND آليًا؛ بل يجب إعادة ضبطه يدويًا بين الاستدعاءات المتعددة لـ getopts داخل نفس جلسة استدعاء الصدفة إذا كانت ستُستخدم مجموعة جديدة من المعاملات.

عند مواجهة نهاية الخيارات، يخرج getopts بقيمة عودة أكبر من الصفر. يُضبط OPTIND على فهرس أول معطى ليس خيارًا، ويُضبط name على ?.

يحلل getopts عادةً المعاملات الموضعية، ولكن إذا وُفرت معطيات إضافية كقيم معطى، يحلل getopts تلك المعطيات بدلًا منها.

يمكن لـ getopts الإبلاغ عن الأخطاء بطريقتين. إذا كان المحرف الأول في optstring هو نقطتان رأسيان، يُستخدم الإبلاغ الصامت عن الأخطاء. في التشغيل العادي، تُطبع رسائل تشخيصية عند مواجهة خيارات غير صالحة أو معطيات خيارات مفقودة. إذا ضُبط المتغير OPTERR على 0، فلن تُعرض أي رسائل خطأ، حتى لو لم يكن المحرف الأول في optstring نقطتين رأسيين.

إذا شوهد خيار غير صالح، يضع getopts العلامة ? في name، وإذا لم يكن صامتًا، يطبع رسالة خطأ ويلغي ضبط OPTARG. إذا كان getopts صامتًا، يوضع محرف الخيار الذي عُثر عليه في OPTARG ولا تُطبع رسالة تشخيصية.

إذا لم يُعثر على معطى مطلوب، ولم يكن getopts صامتًا، توضع علامة استفهام (?) في name، ويُلغى ضبط OPTARG، وتُطبع رسالة تشخيصية. إذا كان getopts صامتًا، توضع نقطتان رأسيان (:) في name ويُضبط OPTARG على محرف الخيار الذي عُثر عليه.

يعيد getopts قيمة صواب (true) إذا عُثر على خيار، سواء كان محددًا أو غير محدد. ويعيد خطأ (false) عند الوصول إلى نهاية الخيارات أو حدوث خطأ.

في كل مرة يُستدعى فيها الأمر hash، يُحدد مسار الدليل الكامل للأمر name عبر البحث في الأدلة الموجودة في المتغير $PATH ويُحفظ. يُتخلص من أي مسار محفوظ مسبقًا. إذا زُوّد الخيار -p، فلا يُجرى بحث في المسارات، ويُستخدم filename كاسم الملف الكامل للأمر. يتسبب الخيار -r في جعل الصدفة تنسى جميع المواقع المحفوظة. أما الخيار -d فيجعل الصدفة تنسى الموقع المحفوظ لكل name. وإذا زُوّد الخيار -t، يُطبع مسار الدليل الكامل الذي يقابل كل name. في حال تقديم وسائط name متعددة مع الخيار -t، يُطبع name قبل مسار الدليل الكامل المحفوظ. يؤدي الخيار -l إلى عرض المخرجات بتنسيق يمكن إعادة استخدامه كمدخلات. إذا لم تُعطَ أي وسائط، أو إذا زُوّد الخيار -l فقط، تُطبع معلومات حول الأوامر المحفوظة. حالة الإرجاع هي صحيح ما لم يُعثر على name أو زُوّد خيار غير صالح.
عرض معلومات مساعدة حول الأوامر المدمجة. إذا حُدد pattern، يعطي help مساعدة مفصلة عن جميع الأوامر التي تطابق pattern؛ وإلا تُطبع المساعدة لجميع الأوامر المدمجة وبنى التحكم في الصدفة.
اعرض وصفاً قصيراً لكل نمط pattern
اعرض وصف كل نمط pattern بتنسيق يشبه صفحات الدليل
اعرض فقط ملخص استخدام قصير لكل نمط pattern

حالة الإرجاع هي 0 ما لم يطابق أي أمر pattern.

بدون خيارات، تُعرض قائمة تاريخ الأوامر مع أرقام الأسطر. الأسطر المدرجة مع علامة * تكون قد عُدلت. تعرض الوسيطة n آخر n أسطر فقط. إذا ضُبط متغير الصدفة HISTTIMEFORMAT ولم يكن فارغًا، فإنه يُستخدم كسلسلة تنسيق للدالة strftime(3) لعرض الطابع الزمني المرتبط بكل مدخل تاريخ معروض. لا تُطبع مسافة فارغة فاصلة بين الطابع الزمني المنسق وسطر التاريخ. إذا زُوّد filename، فإنه يُستخدم كاسم لملف التاريخ؛ وإلا تُستخدم قيمة HISTFILE. الخيارات، إذا زُوّدت، لها المعاني التالية:
مسح قائمة التاريخ بحذف جميع المدخلات.
احذف مدخلة التاريخ في الموضع offset. إذا كانت قيمة offset سالبة، فستُفسر بالنسبة إلى موضع يزيد بواحد عن آخر موضع في التاريخ، لذا فإن الفهارس السالبة تعُد تنازلياً من نهاية التاريخ، ويشير الفهرس -1 إلى أمر history -d الحالي.
احذف نطاق مدخلات التاريخ بين الموضعين start و end، بما في ذلك الموضعين. تُفسر القيم الموجبة والسالبة لـ start و end كما هو موضح أعلاه.
إلحاق أسطر التاريخ "الجديدة" بملف التاريخ. هذه هي أسطر التاريخ التي أُدخلت منذ بداية جلسة bash الحالية، ولم تُلحق بملف التاريخ بالفعل.
قراءة أسطر التاريخ التي لم تُقرأ بعد من ملف التاريخ في قائمة التاريخ الحالية. هذه هي الأسطر التي أُلحقت بملف التاريخ منذ بداية جلسة bash الحالية.
قراءة محتويات ملف التاريخ وإلحاقها بقائمة التاريخ الحالية.
كتابة قائمة التاريخ الحالية في ملف التاريخ، مع استبدال محتويات ملف التاريخ.
إجراء استبدال التاريخ على args التالية وعرض النتيجة على المخرج القياسي. لا تُخزن النتائج في قائمة التاريخ. يجب وضع كل arg بين علامتي اقتباس لتعطيل توسيع التاريخ العادي.
تخزين args في قائمة التاريخ كمدخل واحد. يُزال الأمر الأخير في قائمة التاريخ قبل إضافة args.

إذا ضُبط المتغير HISTTIMEFORMAT، تُكتب معلومات الطابع الزمني المرتبطة بكل مدخل تاريخ في ملف التاريخ، مميزة بعلامة تعليق التاريخ. عند قراءة ملف التاريخ، تُفسر الأسطر التي تبدأ بعلامة تعليق التاريخ ويليها رقم مباشرة على أنها طوابع زمنية لمدخل التاريخ التالي. القيمة المرجعة هي 0 ما لم يُصادف خيار غير صالح، أو يحدث خطأ أثناء قراءة أو كتابة ملف التاريخ، أو تُقدم إزاحة offset أو نطاق غير صالح كوسيط لـ -d، أو يفشل توسيع التاريخ المقدم كوسيط لـ -p.

النموذج الأول يسرد الوظائف النشطة. الخيارات لها المعاني التالية:
أدرج معرفات العمليات بالإضافة إلى المعلومات العادية.
اعرض معلومات فقط حول الوظائف التي تغيرت حالتها منذ آخر مرة تم فيها إخطار المستخدم بحالتها.
أدرج فقط معرف العملية (PID) لقائد مجموعة عمليات المهمة.
اعرض فقط الوظائف الجارية.
اعرض فقط الوظائف المتوقفة.

إذا أُعطي jobspec، يقتصر المخرج على معلومات حول تلك المهمة. حالة الإرجاع هي 0 ما لم يُصادف خيار غير صالح أو يُقدم jobspec غير صالح.

إذا زُوّد الخيار -x، يستبدل jobs أي jobspec يوجد في command أو args بمعرف مجموعة العمليات المقابل، ويُنفذ command ممررًا له args، ويعيد حالة الخروج الخاصة به.

إرسال الإشارة المسماة بـ sigspec أو signum إلى العمليات المسماة بـ pid أو jobspec. sigspec هو إما اسم إشارة غير حساس لحالة الأحرف مثل SIGKILL (مع أو بدون البادئة SIG) أو رقم إشارة؛ signum هو رقم إشارة. إذا لم يوجد sigspec، يُفترض استخدام SIGTERM. تدرج الوسيطة -l أسماء الإشارات. إذا زُوّدت أي وسائط عند تقديم -l، تُدرج أسماء الإشارات المقابلة للوسائط، وتكون حالة الإرجاع 0. وسيطة exit_status لـ -l هي رقم يحدد إما رقم إشارة أو حالة خروج عملية أُنهيت بإشارة. الخيار -L يعادل -l. يعيد kill صحيحًا إذا أُرسلت إشارة واحدة على الأقل بنجاح، أو خطأ إذا حدث خطأ أو صودف خيار غير صالح.
كل arg هو تعبير حسابي سيُقيم (انظر ARITHMETIC EVALUATION above). إذا كانت نتيجة تقييم آخر arg هي 0، يعيد let القيمة 1؛ وإلا يُعاد 0.
لكل وسيط، يُنشأ متغير محلي باسم name، ويُسند إليه value. يمكن أن يكون option أيًا من الخيارات التي يقبلها declare. عند استخدام local داخل دالة، فإنه يجعل المتغير name ذا نطاق مرئي يقتصر على تلك الدالة وتوابعها. إذا كان name هو -، تصبح مجموعة خيارات الصدفة محلية للدالة التي استدعت local: خيارات الصدفة التي غُيرت باستخدام الأمر المدمج set داخل الدالة تُستعاد إلى قيمها الأصلية عندما تعود الدالة. تُنفذ الاستعادة كما لو نُفذت سلسلة من أوامر set لاستعادة القيم التي كانت قائمة قبل الدالة. بدون معاملات، يكتب local قائمة بالمتغيرات المحلية في المخرج القياسي. يعد استخدام local خارج دالة خطأً. حالة الإرجاع هي 0 ما لم يُستخدم local خارج دالة، أو زُوّد name غير صالح، أو كان name متغيرًا للقراءة فقط.
الخروج من صدفة ولوج.
قراءة الأسطر من المدخل القياسي في متغير مصفوفة مفهرسة array، أو من واصف الملف fd إذا زُوّد الخيار -u. المتغير MAPFILE هو المصفوفة array المبدئية. الخيارات، إذا زُوّدت، لها المعاني التالية:
يُستخدم الحرف الأول من delim لإنهاء كل سطر مدخلات، بدلاً من سطر جديد. إذا كان delim سلسلة فارغة، سينهي mapfile السطر عند قراءة محرف NUL.
نسخ count من الأسطر كحد أقصى. إذا كان count هو 0، تُنسخ جميع الأسطر.
ابدأ الإسناد إلى المصفوفة عند المؤشر origin. المؤشر المبدئي هو 0.
اهمل أول count أسطر تم قراءتها.
إزالة المحدد delim اللاحق (المبدئي هو سطر جديد) من كل سطر مقروء.
قراءة الأسطر من واصف الملف fd بدلًا من المدخل القياسي.
تقييم callback في كل مرة تُقرأ فيها quantum من الأسطر. يحدد الخيار -c مقدار quantum.
تحديد عدد الأسطر المقروءة بين كل استدعاء لـ callback.

إذا حُدد -C بدون -c، فإن الكم المبدئي هو 5000. عند تقييم callback، يزود بفهرس عنصر المصفوفة التالي المراد تعيينه والسطر المراد تعيينه لهذا العنصر كوسيطات إضافية. يتم تقييم callback بعد قراءة السطر ولكن قبل تعيين عنصر المصفوفة.

إذا لم يزود بأصل صريح، سيقوم mapfile بمسح array قبل التعيين إليها.

يعود mapfile بنجاح ما لم يُزود خيار أو وسيط خيار غير صالح، أو كان array غير صالح أو لا يمكن التعيين إليه، أو لم يكن array مصفوفة مفهرسة.

إزالة المدخلات من مكدس الأدلة. تُرقم العناصر بدءًا من 0 من الدليل الأول المدرج بواسطة dirs. بدون وسائط، يزيل popd الدليل العلوي من المكدس، وينتقل إلى الدليل العلوي الجديد. الوسائط، إذا زُوّدت، لها المعاني التالية:
يمنع تغيير الدليل العادي عند إزالة الأدلة من المكدس، بحيث يُتلاعب بالمكدس فقط.
+n
يزيل المدخل رقم n بالعد من يسار القائمة التي يعرضها dirs، بدءًا من الصفر، من المكدس. على سبيل المثال: ``popd +0'' يزيل الدليل الأول، ``popd +1'' الثاني.
يزيل المدخل رقم n بالعد من يمين القائمة التي يعرضها dirs، بدءًا من الصفر. على سبيل المثال: ``popd -0'' يزيل الدليل الأخير، ``popd -1'' قبل الأخير.

إذا عُدّل العنصر العلوي في مكدس الأدلة، ولم يتم توفير الخيار -n، يستخدم الأمر popd الأمر الداخلي cd للانتقال إلى الدليل الموجود في أعلى المكدس. وإذا فشل cd، يعيد popd قيمة غير صفرية.

خلاف ذلك، يعيد popd خطأً إذا صودف خيار غير صالح، أو كان مكدس الأدلة فارغًا، أو حُدد مدخل مكدس أدلة غير موجود.

إذا نجح أمر popd، يُشغل bash الأمر dirs لعرض المحتويات النهائية لمكدس الأدلة، وتكون حالة الإرجاع 0.

كتابة arguments المنسقة إلى المخرج القياسي تحت تحكم format. يتسبب الخيار -v في تعيين المخرج للمتغير var بدلاً من طباعته في المخرج القياسي.

سلسلة format هي سلسلة محارف تحتوي على ثلاثة أنواع من الكائنات: المحارف العادية، والتي تُنسخ ببساطة إلى المخرج القياسي، وتتابعات الهروب، والتي تُحول وتُنسخ إلى المخرج القياسي، ومواصفات التنسيق، حيث تؤدي كل منها إلى طباعة argument المتتالي التالي. بالإضافة إلى مواصفات تنسيق printf(1) القياسية، يفسر printf الامتدادات التالية:

%b
يتسبب في قيام printf بتوسيع متواليات الهروب للشرطة المائلة العكسية في argument المقابل بنفس الطريقة التي يقوم بها echo -e.
%q
تجعل printf يخرج argument المقابل بتنسيق يمكن إعادة استخدامه كمدخلات للصدفة.
%Q
مثل %q، ولكن يطبق أي دقة معطاة على argument قبل وضعه بين علامتي اقتباس.
%(datefmt)T
تجعل printf يخرج سلسلة التاريخ والوقت الناتجة عن استخدام datefmt كسلسلة تنسيق للدالة strftime(3). argument المقابل هو عدد صحيح يمثل عدد الثواني منذ الحقبة (epoch). يمكن استخدام قيمتين خاصتين للوسيط: -1 يمثل الوقت الحالي، و-2 يمثل الوقت الذي استدعيت فيه الصدفة. إذا لم تُحدد أي وسيطة، يتصرف التحويل كما لو أُعطي -1. هذا استثناء لسلوك printf المعتاد.

تستخدم التوجيهات %b و %q و %T جميعًا وسائط عرض الحقل والدقة من مواصفات التنسيق وتكتب ذلك العدد من البايتات من (أو تستخدم حقلًا بهذا العرض لـ) الوسيط الموسع، والذي عادةً ما يحتوي على محارف أكثر من الأصلي.

تُعامل وسائط محددات التنسيق غير النصية كثوابت لغة C، باستثناء أنه يُسمح بعلامة زائد أو ناقص بادئة، وإذا كان المحرف البادئ هو علامة اقتباس مفردة أو مزدوجة، فإن القيمة هي قيمة ASCII للمحرف التالي.

يُعاد استخدام format حسب الضرورة لاستنفاد جميع arguments. إذا تطلب format وسائط أكثر مما زُوّد، تتصرف مواصفات التنسيق الإضافية كما لو زُوّدت بقيمة صفرية أو سلسلة فارغة، حسب الاقتضاء. القيمة المرجعة هي صفر عند النجاح، وغير صفرية عند الفشل.

يضيف دليلاً إلى أعلى مكدس الأدلة، أو يدور المكدس، مما يجعل الجزء العلوي الجديد من المكدس هو دليل العمل الحالي. بدون وسائط، يبدل pushd بين العنصرين العلويين في مكدس الأدلة. الوسائط، إذا زُوّدت، لها المعاني التالية:
يمنع تغيير الدليل العادي عند تدوير أو إضافة أدلة إلى المكدس، بحيث يُتلاعب بالمكدس فقط.
+n
يدور المكدس بحيث يصبح الدليل رقم n (بالعد من يسار القائمة التي يعرضها dirs، بدءًا من الصفر) في الأعلى.
تدوير المكدس بحيث يكون الدليل رقم n (بالعد من يمين القائمة المعروضة بواسطة dirs، بدءًا من الصفر) في الأعلى.
يضيف dir إلى مكدس الأدلة في الأعلى

بعد تعديل المكدس، إذا لم يُزود خيار -n، يستخدم pushd أمر cd المضمن للانتقال إلى الدليل الموجود في قمة المكدس. إذا فشل cd، يعيد pushd قيمة غير صفرية.

خلاف ذلك، إذا لم تُزود أي وسائط، يعيد pushd القيمة 0 ما لم يكن مكدس الأدلة فارغًا. عند تدوير مكدس الأدلة، يعيد pushd القيمة 0 ما لم يكن مكدس الأدلة فارغًا أو حُدد عنصر مكدس أدلة غير موجود.

إذا نجح أمر pushd، يُشغل bash الأمر dirs لعرض المحتويات النهائية لمكدس الأدلة.

اطبع مسار الاسم المطلق لدليل العمل الحالي. لا يحتوي مسار الاسم المطبوع على روابط رمزية إذا قُدم الخيار -P أو مُكن الخيار -o physical للأمر المدمج set. إذا استُخدم الخيار -L، فقد يحتوي مسار الاسم المطبوع على روابط رمزية. حالة العودة هي 0 ما لم يحدث خطأ أثناء قراءة اسم الدليل الحالي أو قُدم خيار غير صالح.
يُقرأ سطر واحد من المدخل القياسي، أو من واصف الملف fd المزود كوسيط للخيار -u، ويُقسم إلى كلمات كما هو موضح above تحت قسم Word Splitting، وتُسند الكلمة الأولى إلى name الأول، والكلمة الثانية إلى name الثاني، وهكذا. إذا كان هناك كلمات أكثر من الأسماء، تُسند الكلمات المتبقية ومحدداتها الفاصلة إلى name الأخير. إذا قُرئت كلمات أقل من الأسماء من دفق المدخلات، تُسند قيم فارغة للأسماء المتبقية. تُستخدم المحارف الموجودة في IFS لتقسيم السطر إلى كلمات باستخدام نفس القواعد التي تستخدمها الصدفة للتوسيع (الموضحة above تحت قسم Word Splitting). يمكن استخدام محرف المائلة الخلفية (\) لإزالة أي معنى خاص للمحرف التالي الذي يُقرأ ولتكملة السطر. الخيارات، إذا زُوّدت، لها المعاني التالية:
تُسند الكلمات إلى فهارس متسلسلة لمتغير المصفوفة aname، بدءًا من 0. يُلغى تحديد aname قبل إسناد أي قيم جديدة. وتُتجاهل معاملات name الأخرى.
يُستخدم الحرف الأول من delim لإنهاء سطر المدخلات، بدلاً من سطر جديد. إذا كان delim سلسلة فارغة، سينهي read السطر عند قراءة محرف NUL.
إذا كانت المدخلات القياسية قادمة من طرفية، تُستخدم readline (انظر READLINE above) للحصول على السطر. تستخدم Readline إعدادات التحرير الحالية (أو المبدئية، إذا لم يكن تحرير السطر نشطًا مسبقًا)، ولكنها تستخدم إكمال اسم الملف المبدئي الخاص بـ readline.
إذا كانت readline تُستخدم لقراءة السطر، يُوضع text في مخزن التحرير المؤقت قبل بدء التحرير.
يعود read بعد قراءة nchars من المحارف بدلاً من انتظار سطر كامل من المدخلات، لكنه يحترم المحدد إذا قُرئ أقل من nchars من المحارف قبل المحدد.
يعود read بعد قراءة nchars من المحارف تمامًا بدلاً من انتظار سطر كامل من المدخلات، ما لم يُواجه نهاية الملف (EOF) أو تنتهي مهلة read. لا تُعامل محارف المحدد التي تُصادف في المدخلات معاملة خاصة ولا تجعل read يعود حتى تُقرأ nchars من المحارف. لا تُقسم النتيجة بناءً على المحارف الموجودة في IFS؛ القصد هو أن يُسند للمتغير المحارف التي قُرئت بالضبط (باستثناء المائلة الخلفية؛ انظر الخيار -r أدناه).
عرض prompt على المخرج القياسي للخطأ، بدون سطر جديد ختامي، قبل محاولة قراءة أي مدخلات. يُعرض الموجه فقط إذا كانت المدخلات قادمة من طرفية.
لا تعمل الشرطة المائلة الخلفية كحرف هروب. تُعتبر الشرطة المائلة الخلفية جزءًا من السطر. وبوجه خاص، لا يجوز استخدام زوج (شرطة مائلة خلفية-سطر جديد) كتكملة للسطر.
الوضع الصامت. إذا كان الإدخال قادمًا من طرفية، فلن يتم ترديد (echo) المحارف.
يجعل read ينتهي وقته ويعيد فشلًا إذا لم يُقرأ سطر كامل من المدخلات (أو عدد محدد من المحارف) خلال timeout من الثواني. يمكن أن يكون timeout رقمًا عشريًا مع جزء كسري بعد العلامة العشرية. يكون هذا الخيار فعالاً فقط إذا كان read يقرأ المدخلات من طرفية أو أنبوب أو ملف خاص آخر؛ وليس له أي تأثير عند القراءة من ملفات عادية. إذا انتهى وقت read، يحفظ read أي مدخلات جزئية قُرئت في المتغير name المحدد. إذا كان timeout هو 0، يعود read فورًا، دون محاولة قراءة أي بيانات. حالة الخروج هي 0 إذا كانت المدخلات متاحة على واصف الملف المحدد، أو إذا كانت القراءة ستعيد EOF، وغير ذلك تكون غير صفرية. وتكون حالة الخروج أكبر من 128 في حال تجاوز المهلة الزمنية.
قراءة المدخلات من واصف الملف fd.

إذا لم تُزود أي names، فإن السطر المقروء، بدون محدد النهاية ولكن بدون تعديل بخلاف ذلك، يُسند إلى المتغير REPLY. حالة الخروج هي صفر، ما لم يُواجه نهاية الملف، أو تنتهي مهلة read (وفي هذه الحالة تكون الحالة أكبر من 128)، أو يحدث خطأ في تعيين المتغير (مثل التعيين لمتغير للقراءة فقط)، أو يُزود واصف ملف غير صالح كوسيط لـ -u.

تُعلم الأسماء names المعطاة كمتغيرات للقراءة فقط؛ ولا يمكن تغيير قيم هذه الأسماء names عن طريق تعيين لاحق. إذا زُوّد الخيار -f، تُعلم الدوال المقابلة للأسماء names بذلك. يقصر الخيار -a المتغيرات على المصفوفات المفهرسة؛ ويقصر الخيار -A المتغيرات على المصفوفات الترابطية. إذا زُوّد كلا الخيارين، تكون الأولوية لـ -A. إذا لم تُعطَ أي وسائط name، أو إذا زُوّد الخيار -p، تُطبع قائمة بجميع الأسماء المخصصة للقراءة فقط. يمكن استخدام الخيارات الأخرى لقصر المخرجات على مجموعة فرعية من الأسماء المخصصة للقراءة فقط. يتسبب الخيار -p في عرض المخرجات بتنسيق يمكن إعادة استخدامه كمدخلات. إذا تبع اسم المتغير =word، تُضبط قيمة المتغير لتكون word. حالة الإرجاع هي 0 ما لم يُصادف خيار غير صالح، أو لم يكن أحد names اسم متغير صدفة صالحًا، أو زُوّد -f مع name ليس دالة.
يجعل الدالة تتوقف عن التنفيذ وتعيد القيمة المحددة بواسطة n إلى المستدعي. إذا حُذف n، تكون حالة الإرجاع هي حالة آخر أمر نُفذ في جسم الدالة. إذا نُفذ return بواسطة معالج فخ (trap handler)، فإن آخر أمر استُخدم لتحديد الحالة هو آخر أمر نُفذ قبل معالج الفخ. إذا نُفذ return أثناء فخ DEBUG، فإن آخر أمر استُخدم لتحديد الحالة هو آخر أمر نُفذ بواسطة معالج الفخ قبل استدعاء return. إذا استُخدم return خارج دالة، ولكن أثناء تنفيذ سكربت بواسطة الأمر . (source)، فإنه يجعل الصدفة تتوقف عن تنفيذ ذلك السكربت وتعيد إما n أو حالة الخروج لآخر أمر نُفذ داخل السكربت كحالة خروج للسكربت. إذا زُوّد n، تكون القيمة المرجعة هي أقل 8 بتات دلالة. حالة الإرجاع غير صفرية إذا زُوّد return بوسيط غير رقمي، أو استُخدم خارج دالة وليس أثناء تنفيذ سكربت بواسطة . أو source. يُنفذ أي أمر مرتبط بفخ RETURN قبل استئناف التنفيذ بعد الدالة أو السكربت.
بدون خيارات، يُعرض اسم وقيمة كل متغير صدفة بتنسيق يمكن إعادة استخدامه كمدخلات لضبط أو إعادة ضبط المتغيرات المعينة حاليًا. لا يمكن إعادة ضبط المتغيرات المخصصة للقراءة فقط. في posix mode، تُدرج متغيرات الصدفة فقط. تُفرز المخرجات وفقًا للمحلية (locale) الحالية. عند تحديد خيارات، فإنها تقوم بضبط أو إلغاء ضبط سمات الصدفة. تُعامل أي وسائط متبقية بعد معالجة الخيارات كقيم للمعاملات الموضعية وتُسند، بالترتيب، إلى $1، $2، ... $n. الخيارات، إذا حُددت، لها المعاني التالية:
يتم إعطاء كل متغير أو دالة تُنشأ أو تُعدل سمة التصدير وتُحدد للتصدير إلى بيئة الأوامر اللاحقة.
الإبلاغ عن حالة وظائف الخلفية المنتهية فورًا، بدلاً من الانتظار حتى الموجه الرئيس التالي. هذا فعال فقط عندما يكون التحكم في الوظائف مفعلاً.
اخرج فورًا إذا كان هناك pipeline (الذي قد يتكون من أمر بسيط واحد)، أو list، أو compound command (انظر SHELL GRAMMAR) above), تخرج بحالة غير صفرية. لا تخرج الصدفة إذا كان الأمر الذي فشل جزءًا من قائمة الأوامر التي تلي مباشرة الكلمات المفتاحية while أو until، أو جزءًا من الاختبار الذي يلي الكلمات المحجوزة if أو elif، أو جزءًا من أي أمر نُفذ في قائمة && أو || باستثناء الأمر الذي يلي آخر && أو ||، أو أي أمر في أنبوب ما عدا الأخير، أو إذا كانت قيمة إرجاع الأمر معكوسة باستخدام !. إذا أعاد أمر مركب بخلاف الصدفة الفرعية حالة غير صفرية لأن أمرًا فشل بينما كان -e يتم تجاهله، فلا تخرج الصدفة. يُنفذ فخ على ERR، إذا ضُبط، قبل خروج الصدفة. ينطبق هذا الخيار على بيئة الصدفة وكل بيئة صدفة فرعية بشكل منفصل (انظر COMMAND EXECUTION ENVIRONMENT above), وقد يتسبب في خروج الصدفات الفرعية قبل تنفيذ جميع الأوامر فيها.

إذا نُفذ أمر مركب أو دالة صدفة في سياق يتم فيه تجاهل -e، فلن يتأثر أي من الأوامر المنفذة داخل الأمر المركب أو جسم الدالة بإعداد -e، حتى لو ضُبط -e وأعاد أمر ما حالة فشل. إذا ضبط أمر مركب أو دالة صدفة -e أثناء التنفيذ في سياق يتم فيه تجاهل -e، فلن يكون لهذا الإعداد أي تأثير حتى يكتمل الأمر المركب أو الأمر الذي يحتوي على استدعاء الدالة.

عطّل توسيع اسم المسار.
تذكر موقع الأوامر أثناء البحث عنها للتنفيذ. هذا مفعل مبدئيًا.
يتم وضع جميع الوسائط التي تأتي على شكل عبارات تخصيص في بيئة الأمر، وليس فقط تلك التي تسبق اسم الأمر.
وضع المراقبة. تم تمكين التحكم في الوظائف. هذا الخيار مفعل مبدئياً للأصداف التفاعلية على الأنظمة التي تدعمه (انظر JOB CONTROL above). تعمل جميع العمليات في مجموعة عمليات منفصلة. عندما تنتهي مهمة خلفية، يقوم الغلاف (shell) بطباعة سطر يحتوي على حالة الخروج الخاصة بها.
قراءة الأوامر دون تنفيذها. قد يُستخدم هذا لفحص أخطاء الصيغة في سكربت صدفة. تتجاهل الصدف التفاعلية هذا.
يمكن أن يكون اسم-الخيار واحدًا مما يلي:
نفس الخيار -a.
نفس -B.
استخدم واجهة تحرير سطر أوامر بأسلوب emacs. يُفعل هذا مبدئيًا عندما تكون الصدفة تفاعلية، ما لم تُبدأ الصدفة بخيار --noediting. يؤثر هذا أيضًا على واجهة التحرير المستخدمة لـ read -e.
نفس -e.
نفس -E.
نفس -T.
مماثل لـ -h.
نفس -H.
تفعيل تاريخ الأوامر، كما هو موضح above تحت HISTORY. هذا الخيار مفعّل مبدئيًا في الصدفات التفاعلية.
التأثير كما لو كان أمر الشل ``IGNOREEOF=10'' قد نُفذ (انظر متغيرات الصدفة above).
مماثل لـ -k.
مماثل لـ -m.
نفس -C.
مماثل لـ -n.
مماثل لـ -f.
يُتجاهل حاليًا.
نفس -b.
مماثل لـ -u.
نفس -t.
نفس -P.
إذا ضُبطت، فإن القيمة المعادة من أنبوب هي قيمة آخر أمر (الأكثر يميناً) يخرج بحالة غير صفرية، أو صفر إذا خرجت كل أوامر الأنبوب بنجاح. هذا الخيار مُعطّل مبدئياً.
تغيير سلوك bash حيثما تختلف العملية المبدئية عن معيار POSIX لمطابقة المعيار (posix mode). انظر SEE ALSO below لمرجع إلى مستند يفصل كيف يؤثر وضع posix على سلوك bash.
نفس الخيار -p.
مماثل لـ -v.
استخدم واجهة تحرير سطر أوامر بأسلوب vi. يؤثر هذا أيضًا على واجهة التحرير المستخدمة لـ read -e.
نفس -x.

إذا زُوّد -o بدون option-name، تُطبع قيم الخيارات الحالية. إذا زُوّد +o بدون option-name، تُعرض سلسلة من أوامر set لإعادة إنشاء إعدادات الخيارات الحالية على المخرج القياسي.

تشغيل وضع الامتياز privileged. في هذا الوضع، لا تُعالج ملفات $ENV و $BASH_ENV، ولا تُورث دوال الصدفة من البيئة، وتُتجاهل متغيرات SHELLOPTS و BASHOPTS و CDPATH و GLOBIGNORE إذا ظهرت في البيئة. إذا بُدئت الصدفة بمعرف مستخدم (مجموعة) فعال لا يساوي معرف المستخدم (المجموعة) الحقيقي، ولم يُزود الخيار -p، تُتخذ هذه الإجراءات ويُضبط معرف المستخدم الفعال ليكون نفس المعرف الحقيقي. إذا زُوّد الخيار -p عند بدء التشغيل، فلا يُعاد ضبط معرف المستخدم الفعال. يؤدي إيقاف هذا الخيار إلى ضبط معرفات المستخدم والمجموعة الفعالة لتكون نفس المعرفات الحقيقية.
تفعيل وضع الصدفة المقيدة. لا يمكن إلغاء ضبط هذا الخيار بمجرد ضبطه.
اخرج بعد قراءة وتنفيذ أمر واحد.
معاملة المتغيرات والمعاملات غير المعينة -بخلاف المعاملات الخاصة "@" و "*"، أو متغيرات المصفوفة المفهرسة بـ "@" أو "*"- كخطأ عند إجراء توسيع المعاملات. إذا جرت محاولة توسيع لمتغير أو معامل غير معين، تطبع الصدفة رسالة خطأ، وإذا لم تكن تفاعلية، تخرج بحالة غير صفرية.
اطبع أسطر مدخلات الصدفة فور قراءتها.
بعد توسيع كل أمر بسيط simple command، أو أمر for، أو أمر case، أو أمر select، أو أمر for حسابي، تُعرض القيمة الموسعة لـ PS4، يليها الأمر ووسائطه الموسعة أو قائمة الكلمات المرتبطة به.
تقوم الصدفة بتوسيع الأقواس (انظر توسيع الأقواس above). هذا الخيار مفعل افتراضياً.
إذا ضُبط، لا يقوم bash بالكتابة فوق ملف موجود باستخدام معاملات إعادة التوجيه > و >& و <>. يمكن تجاوز هذا عند إنشاء ملفات المخرجات باستخدام معامل إعادة التوجيه >| بدلاً من >.
إذا ضُبطت، فإن أي اعتراض (trap) على ERR ستورثه دوال الصدفة، وتبديلات الأوامر، والأوامر المنفذة في بيئة صدفة فرعية. عادةً لا يُورث اعتراض ERR في هذه الحالات.
تفعيل استبدال التاريخ بأسلوب !. هذا الخيار مفعل افتراضيًا عندما تكون الصدفة تفاعلية.
إذا ضُبطت، فلن تحلل الصدفة الروابط الرمزية عند تنفيذ أوامر مثل cd التي تغير دليل العمل الحالي. بل ستستخدم هيكل الأدلة الفيزيائي بدلاً من ذلك. مبدئياً، يتبع bash السلسلة المنطقية للأدلة عند تنفيذ الأوامر التي تغير الدليل الحالي.
إذا ضُبطت، فإن أي اعتراضات على DEBUG و RETURN ستورثها دوال الصدفة، وتبديلات الأوامر، والأوامر المنفذة في بيئة صدفة فرعية. عادةً لا تُورث اعتراضات DEBUG و RETURN في هذه الحالات.
--
إذا لم تتبع هذا الخيار أي وسائط، فسيُلغى ضبط المعاملات الموضعية. وإلا، تُضبط المعاملات الموضعية لتكون args، حتى لو بدأ بعضها بـ -.
-
الإشارة إلى نهاية الخيارات، مما يتسبب في تعيين جميع args المتبقية للمعاملات الموضعية. يُوقف تشغيل الخيارين -x و -v. إذا لم تكن هناك args، تظل المعاملات الموضعية دون تغيير.

تكون الخيارات متوقفة مبدئيًا ما لم يُنص على خلاف ذلك. يؤدي استخدام + بدلاً من - إلى إيقاف تشغيل هذه الخيارات. يمكن أيضًا تحديد الخيارات كوسائط عند استدعاء الصدفة. يمكن العثور على مجموعة الخيارات الحالية في $-. حالة الإرجاع هي دائمًا صحيح ما لم يُصادف خيار غير صالح.

تُعاد تسمية المعاملات الموضعية من n+1 ... إلى $1 ..... المعاملات الممثلة بالأرقام من $# تنازليًا إلى $#-n+1 يُلغى ضبطها. يجب أن يكون n رقمًا غير سالب أقل من أو يساوي $#. إذا كان n هو 0، فلا تُغير أي معاملات. إذا لم يُعطَ n، يُفترض أنه 1. إذا كان n أكبر من $#، لا تُغير المعاملات الموضعية. حالة الإرجاع أكبر من صفر إذا كان n أكبر من $# أو أقل من صفر؛ وإلا تكون 0.
تبديل قيم الإعدادات التي تتحكم في سلوك الصدفة الاختياري. يمكن أن تكون الإعدادات إما تلك المدرجة أدناه، أو -إذا استُخدم الخيار -o- تلك المتاحة مع الخيار -o للأمر المدمج set. بدون خيارات، أو مع الخيار -p، تُعرض قائمة بجميع الخيارات القابلة للضبط، مع إشارة إلى ما إذا كان كل منها مضبوطًا أم لا؛ وإذا زُوّدت optnames، يقتصر المخرج على تلك الخيارات. يتسبب الخيار -p في عرض المخرجات بشكل يمكن إعادة استخدامه كمدخلات. الخيارات الأخرى لها المعاني التالية:
تفعيل (ضبط) كل optname.
عطّل (ألغِ ضبط) كل optname.
يكتم المخرجات العادية (الوضع الهادئ)؛ تشير حالة الإرجاع إلى ما إذا كان optname مضبوطًا أم لا. إذا أُعطيت وسائط optname متعددة مع -q، تكون حالة الإرجاع صفرًا إذا كانت جميع optnames مفعلة؛ وغير صفرية خلاف ذلك.
قصر قيم optname على تلك المعرفة للخيار -o للأمر المدمج set.

إذا استُخدم إما -s أو -u بدون وسيطات optname، يعرض shopt فقط الخيارات المضبوطة أو غير المضبوطة، على التوالي. ما لم يُذكر خلاف ذلك، تكون خيارات shopt معطلة (غير مضبوطة) مبدئيا.

حالة الإرجاع عند سرد الخيارات هي صفر إذا كانت جميع optnames مفعلة، وغير ذلك تكون غير صفرية. عند ضبط الخيارات أو إلغاء ضبطها، تكون حالة الإرجاع صفراً ما لم يكن optname ليس خيار صدفة صالحاً.

قائمة خيارات shopt هي:

إذا ضُبط، تمنع الصدفة التقييم المتعدد لمفاتيح المصفوفة الترابطية أثناء تقييم التعبيرات الحسابية، وأثناء تنفيذ الأوامر المدمجة التي يمكنها إجراء تعيينات للمتغيرات، وأثناء تنفيذ الأوامر المدمجة التي تجري إلغاء مرجعية للمصفوفة.
إذا ضُبطت، فإن اسم الأمر الذي يمثل اسم دليل يُنفّذ كما لو كان معاملًا لأمر cd. هذا الخيار يُستخدم فقط بواسطة الصدف التفاعلية.
إذا ضُبطت، فإن أي معامل للأمر المدمج cd ليس دليلاً يُفترض أنه اسم لمتغير قيمته هي الدليل المراد الانتقال إليه.
إذا ضُبط، تُصحح الأخطاء الطفيفة في هجاء جزء من مسار الدليل في أمر cd. الأخطاء التي يُفحص عنها هي تبديل المحارف، أو محرف مفقود، أو محرف زائد. إذا وُجد تصحيح، يُطبع اسم الملف المصحح ويستمر الأمر. يُستخدم هذا الخيار فقط في الصدفات التفاعلية.
إذا ضُبط، يتحقق bash من أن الأمر الموجود في جدول الحفظ (hash table) موجود قبل محاولة تنفيذه. إذا لم يعد الأمر المحفوظ موجودًا، يُجرى بحث عادي في المسارات.
إذا ضُبط، يدرج bash حالة أي وظائف متوقفة أو تعمل قبل الخروج من صدفة تفاعلية. إذا كانت هناك أي وظائف تعمل، فإن هذا يتسبب في تأجيل الخروج حتى تُجرى محاولة خروج ثانية دون أمر فاصل (انظر JOB CONTROL above). تؤجل الصدفة دائماً الخروج إذا كانت هناك أي وظائف متوقفة.
إذا ضُبط، يتحقق bash من حجم النافذة بعد كل أمر خارجي (غير مدمج) ويحدث قيم LINES و COLUMNS إذا لزم الأمر. هذا الخيار مفعل مبدئيًا.
إذا ضُبطت، فسيحاول bash حفظ كل أسطر الأمر المتعدد الأسطر في نفس مدخلة التأريخ. مما يسمح بإعادة تحرير الأوامر المتعددة الأسطر بسهولة. هذا الخيار مُفعّل مبدئياً، لكن لا تأثير له إلا إذا فُعّل تأريخ الأوامر، كما هو موضح above تحت HISTORY.
تتحكم هذه في جوانب وضع توافق الصدفة (انظر SHELL COMPATIBILITY MODE below).
إذا ضُبطت، فسيقتبس bash كل المحارف الميتا (metacharacters) للصدفة في أسماء الملفات وأسماء الأدلة عند إجراء الإكمال. إذا لم تُضبط، فسيحذف bash المحارف الميتا مثل علامة الدولار من مجموعة المحارف التي ستُقتبس في أسماء الملفات المكتملة عندما تظهر هذه المحارف في مراجع متغيرات الصدفة في الكلمات المراد إكمالها. هذا يعني أن علامات الدولار في أسماء المتغيرات التي تتوسع إلى أدلة لن تُقتبس؛ ومع ذلك، لن تُقتبس أي علامات دولار تظهر في أسماء الملفات أيضاً. هذا فعال فقط عندما يستخدم bash الخطوط المائلة الخلفية لاقتباس أسماء الملفات المكتملة. هذا المتغير مضبوط مبدئياً، وهو سلوك bash المبدئي في الإصدارات حتى 4.2.
إذا ضُبط، يستبدل bash أسماء الأدلة بنتائج توسيع الكلمات عند إجراء إكمال أسماء الملفات. هذا يغير محتويات مخزن تحرير readline. إذا لم يُضبط، يحاول bash الحفاظ على ما كتبه المستخدم.
إذا ضُبطت، فسيحاول bash تصحيح إملاء أسماء الأدلة أثناء إكمال الكلمات إذا كان اسم الدليل المقدّم أولياً غير موجود.
إذا ضُبط، يضمن bash أسماء الملفات التي تبدأ بـ `.` في نتائج توسيع أسماء المسارات. يجب دائمًا مطابقة اسمي الملفين “.” و “..” صراحةً، حتى لو كان dotglob مضبوطًا.
إذا ضُبط، لن تخرج الصدفة غير التفاعلية إذا تعذر عليها تنفيذ الملف المحدد كوسيط للأمر المدمج exec. الصدفة التفاعلية لا تخرج إذا فشل exec.
إذا ضُبطت، فستُوسّع الأسماء المستعارة كما هو موضح above تحت ALIASES. هذا الخيار مفعّل مبدئيًا للصدمات التفاعلية.
إذا ضُبطت عند استدعاء الصدفة، أو في ملف بدء تشغيل الصدفة، فرتّب لتنفيذ تشكيلة المنقّح قبل بدء الصدفة، وهو ما يطابق خيار --debugger. أما إذا ضُبطت بعد الاستدعاء، فيُفعّل السلوك المخصص لاستخدام المنقّحين:
1.
يعرض الخيار -F للأمر الداخلي declare اسم ملف المصدر ورقم السطر المقابل لكل اسم دالة مُرر كمعامل.
2.
إذا أرجع الأمر الذي تم تشغيله بواسطة فخ DEBUG قيمة غير صفرية، فسيتم تخطي الأمر التالي وعدم تنفيذه.
3.
إذا أرجع الأمر الذي تم تشغيله بواسطة فخ DEBUG القيمة 2، وكانت الصدفة تنفذ داخل روتين فرعي (دالة صدفة أو نص صدفة يتم تنفيذه بواسطة المدمجات . أو source)، فإن الصدفة تحاكي استدعاء return.
4.
يُحدّث BASH_ARGC و BASH_ARGV كما هو موضح في أوصافهما above).
5.
تتبع الدوال مُمكّن: استبدال الأوامر، ودوال الصدفة، والصدفات الفرعية المستدعاة بـ ( الأمر ) ترث مصائد DEBUG و RETURN.
6.
تتبع الأخطاء مفعل: استبدال الأوامر، ودوال الصدفة، والصدفات الفرعية المستدعاة باستخدام ( command ) ترث فخ ERR.
إذا ضُبط، تُفعل ميزات مطابقة الأنماط الموسعة الموضحة above تحت قسم Pathname Expansion.
إذا ضُبط، يُجرى اقتباس $'string' و $"string" داخل توسيعات ${parameter} المحاطة بعلامات اقتباس مزدوجة. هذا الخيار مفعل مبدئيًا.
إذا ضُبطت، فإن الأنماط التي تفشل في مطابقة أسماء الملفات أثناء توسيع مسار الملف ستؤدي إلى خطأ في التوسيع.
إذا ضُبط، تتسبب اللاحقات المحددة في متغير صدفة FIGNORE في تجاهل الكلمات عند إجراء إكمال الكلمات حتى لو كانت الكلمات المتجاهلة هي الإكمالات الممكنة الوحيدة. انظر SHELL VARIABLES above للحصول على وصف لـ FIGNORE. هذا الخيار مفعّل بشكل مبدئي.
إذا ضُبطت، فإن تعبيرات النطاق المستخدمة في تعبيرات الأقواس لمطابقة الأنماط (انظر Pattern Matching above) يتصرف كما هو الحال في محلية C التقليدية عند إجراء المقارنات. أي أن تسلسل المقابلة للمحلية الحالية لا يُؤخذ في الاعتبار، لذا لن يقع المحرف b بين A و B، وسيتم ترتيب محارف ASCII الكبيرة والصغيرة معًا.
إذا ضُبط، لن يطابق توسيع أسماء المسارات اسمي الملفين “.” و “..” أبدًا، حتى لو بدأ النمط بـ “.”. هذا الخيار مفعل مبدئيًا.
إذا ضُبطت، فإن النمط ** المستخدم في سياق توسيع مسار الملف سيطابق كل الملفات وصفرًا أو أكثر من الأدلة والأدلة الفرعية. إذا تبع النمط /، فستتطابق الأدلة والأدلة الفرعية فقط.
إذا ضُبطت، فستُكتب رسائل خطأ الصدفة بتنسيق رسائل خطأ GNU القياسي.
إذا ضُبطت، فستُلحق قائمة التأريخ بالملف المسمى حسب قيمة متغير HISTFILE عند خروج الصدفة، بدلاً من الكتابة فوق الملف.
إذا ضُبط، وكانت readline مستخدمة، تُمنح للمستخدم الفرصة لإعادة تحرير استبدال تاريخ فاشل.
إذا ضُبطت، وكان readline مستخدماً، فلن تُمرر نتائج تبديل التأريخ فوراً إلى محلل الصدفة. بدلاً من ذلك، يُحمّل السطر الناتج في مخزن تحرير readline، مما يسمح بإجراء مزيد من التعديلات.
إذا ضُبطت، وكان readline مستخدماً، فسيحاول bash إجراء إكمال لاسم المضيف عندما تكون الكلمة التي تحتوي على @ قيد الإكمال (انظر Completing تحت READLINE above). هذا مفعل مبدئيًا.
إذا ضُبطت، فسيُرسل bash إشارة SIGHUP إلى كل المهام عند الخروج من صدفة ولوج تفاعلية.
إذا ضُبط، يرث استبدال الأوامر قيمة خيار errexit، بدلاً من إلغاء ضبطه في بيئة الصدفة الفرعية. يُفعل هذا الخيار عندما يكون posix mode مفعلاً.
إذا ضُبط، يسمح للكلمة التي تبدأ بـ # بجعل تلك الكلمة وجميع المحارف المتبقية في ذلك السطر يتم تجاهلها في الصدفة التفاعلية (انظر COMMENTS above). هذا الخيار مُمكّن مبدئيًا.
إذا ضُبطت، ولم يكن التحكم في المهام نشطاً، فستشغّل الصدفة آخر أمر في أنبوب لم يُنفّذ في الخلفية في بيئة الصدفة الحالية.
إذا ضُبطت، وفُعّل الخيار cmdhist، فستُحفظ الأوامر المتعددة الأسطر في التأريخ مع أسطر جديدة مضمنة بدلاً من استخدام فواصل الفاصلة المنقوطة كلما أمكن ذلك.
إذا ضُبطت، فستورث المتغيرات المحلية قيمة وسمات متغير بنفس الاسم موجود في نطاق سابق قبل تعيين أي قيمة جديدة. سمة nameref لا تُورث.
إذا ضُبط، فإن استدعاء unset على المتغيرات المحلية في نطاقات الدوال السابقة يوسمها بحيث تجدها عمليات البحث اللاحقة غير معينة حتى تعود تلك الدالة. هذا يطابق سلوك إلغاء ضبط المتغيرات المحلية في نطاق الدالة الحالي.
تضبط الصدفة هذا الخيار إذا بُدئت كصدفة تسجيل دخول (انظر الاستدعاء above). لا يجوز تغيير القيمة.
إذا ضُبط، وكان الملف الذي يتحقق bash من وجود بريد فيه قد تم الوصول إليه منذ آخر مرة فُحص فيها، تُعرض الرسالة "لقد قُرئ البريد في mailfile".
إذا ضُبط، وكانت readline مستخدمة، لن يحاول bash البحث في PATH عن إكمالات محتملة عند محاولة الإكمال في سطر فارغ.
إذا ضُبطت، فسيطابق bash أسماء الملفات بطريقة غير حساسة لحالة الأحرف عند إجراء توسيع مسار الملف (انظر Pathname Expansion above).
إذا ضُبطت، فسيُطابق bash الأنماط بطريقة غير حساسة لحالة الأحرف عند إجراء المطابقة أثناء تنفيذ أوامر case أو الأوامر الشرطية [[، أو عند إجراء توسيعات كلمات تبديل الأنماط، أو عند تصفية الإكمالات الممكنة كجزء من الإكمال المبرمج.
إذا ضُبط، يحيط bash النتائج المترجمة لاقتباس $"..." بعلامات اقتباس مفردة بدلاً من مزدوجة. إذا لم تُترجم السلسلة، فلن يكون لهذا أي تأثير.
إذا ضُبط، يسمح bash للأنماط التي لا تطابق أي ملفات (انظر Pathname Expansion above) بالتوسع إلى سلسلة فارغة، بدلاً من التوسع إلى نفسها.
إذا ضُبطت، فسيوسع bash حالات ظهور & في سلسلة الاستبدال لتبديل الأنماط إلى النص المطابق للنمط، كما هو موضح تحت Parameter Expansion above. هذا الخيار مُمكّن مبدئيًا.
إذا ضُبط، تُفعل مرافق الإكمال القابلة للبرمجة (انظر Programmable Completion above) مفعلة. هذا الخيار مفعل مبدئيًا.
إذا ضُبط، وكان الإكمال القابل للبرمجة مفعلاً، يعامل bash اسم الأمر الذي ليس له أي إكمالات كاسم مستعار محتمل ويحاول توسيع الاسم المستعار. إذا كان له اسم مستعار، يحاول bash إجراء الإكمال القابل للبرمجة باستخدام كلمة الأمر الناتجة عن الاسم المستعار الموسع.
إذا ضُبطت، فستخضع سلاسل الحث لتوسيع المعاملات، وتبديل الأوامر، والتوسيع الحسابي، وإزالة الاقتباس بعد توسيعها كما هو موضح في PROMPTING above. هذا الخيار مُمكّن مبدئيًا.
تضبط الصدفة هذا الخيار إذا بُدئت في الوضع المقيد (انظر الصدفة المقيدة below). لا يجوز تغيير القيمة. لا يُعاد ضبط هذا عند تنفيذ ملفات بدء التشغيل، مما يسمح لملفات بدء التشغيل باكتشاف ما إذا كانت الصدفة مقيدة أم لا.
إذا ضُبطت، فسيطبع الأمر المدمج shift رسالة خطأ عندما يتجاوز عدد الإزاحات عدد المعاملات الموضعية.
مسار_المصدر
إذا ضُبط، يستخدم الأمر المدمج . (source) قيمة PATH للعثور على الدليل الذي يحتوي على الملف المزود كوسيط. هذا الخيار مفعل مبدئيًا.
إذا ضُبطت، فستغلق الصدفة آلياً واصفات الملفات المعينة باستخدام صيغة إعادة التوجيه {varname} (انظر REDIRECTION above) بدلاً من تركها مفتوحة عند اكتمال الأمر.
إذا ضُبط، يوسع الأمر المدمج echo تتابعات الهروب بالمائلة الخلفية مبدئيًا.
تعليق تنفيذ هذه الصدفة حتى تستلم إشارة SIGCONT. لا يمكن تعليق صدفة ولوج، أو صدفة بدون تفعيل التحكم في الوظائف؛ يمكن استخدام الخيار -f لتجاوز ذلك وفرض التعليق. حالة الإرجاع هي 0 ما لم تكن الصدفة صدفة ولوج أو كان التحكم في الوظائف غير مفعل ولم يُزود الخيار -f.
[ تعبير ]
إرجاع حالة 0 (صواب) أو 1 (خطأ) بناءً على تقييم التعبير الشرطي expr. يجب أن يكون كل عامل ومعامل وسيطًا منفصلًا. تتكون التعبيرات من الأساسيات الموصوفة above تحت التعبيرات الشرطية. لا يقبل test أي خيارات، ولا يقبل ويتجاهل معامل -- كعلامة على نهاية الخيارات.

يمكن دمج التعبيرات باستخدام المعاملات التالية، المدرجة بترتيب تنازلي حسب الأولوية. يعتمد التقييم على عدد الوسائط؛ انظر أدناه. تُستخدم أولوية المعاملات عندما يكون هناك خمس وسائط أو أكثر.

! expr
صحيح إذا كان expr خاطئًا.
( expr )
يعيد قيمة expr. يمكن استخدام هذا لتجاوز الأولوية العادية للمعاملات.
صحيح إذا كان كل من expr1 و expr2 صحيحين.
صحيح إذا كان أي من expr1 أو expr2 صحيحًا.

يُقيم test و [ التعبيرات الشرطية باستخدام مجموعة من القواعد المبنية على عدد المعطيات.

0 arguments
التعبير خاطئ.
معطى واحد
يكون التعبير صحيحًا إذا وفقط إذا كان المعامل ليس فارغًا (not null).
معطيان
إذا كان الوسيط الأول !، يكون التعبير صحيحًا فقط إذا كان الوسيط الثاني فارغًا. إذا كان الوسيط الأول أحد العمليات الشرطية الأحادية المدرجة above تحت التعبيرات الشرطية، يكون التعبير صحيحًا إذا كان الاختبار الأحادي صحيحًا. إذا لم يكن المعامل الأول عاملًا شرطيًا أحاديًا صالحًا، يكون التعبير خاطئًا.
3 معطيات
يتم تطبيق الشروط التالية بالترتيب المذكور. إذا كان المعامل الثاني هو أحد العوامل الشرطية الثنائية المدرجة above تحت التعبيرات الشرطية، تكون نتيجة التعبير هي نتيجة الاختبار الثنائي باستخدام المعاملين الأول والثالث. يُعتبر العاملان -a و -o عوامل ثنائية عندما يوجد ثلاثة معاملات. إذا كان المعامل الأول هو !، تكون القيمة نفيًا لاختبار المعاملين الثاني والثالث. إذا كان المعامل الأول هو ( تمامًا والمعامل الثالث هو ) تمامًا، تكون النتيجة هي اختبار المعامل الواحد للمعامل الثاني. خلاف ذلك، يكون التعبير خاطئًا.
4 معطيات
تُطبق الشروط التالية بالترتيب المذكور. إذا كانت الوسيطة الأولى هي !، تكون النتيجة هي نفي التعبير ذي الوسائط الثلاث المكون من الوسائط المتبقية. اختبار الوسيطتين باستخدام الوسيطتين الثانية والثالثة. إذا كانت الوسيطة الأولى هي بالضبط ( والوسيطة الرابعة هي بالضبط )، تكون النتيجة هي اختبار الوسيطتين للوسيطتين الثانية والثالثة. خلاف ذلك، يتم تحليل التعبير وتقييمه وفقًا للأولوية باستخدام القواعد المذكورة أعلاه.
5 معطيات أو أكثر
يتم تحليل التعبير وتقييمه وفقًا للأسبقية باستخدام القواعد المذكورة أعلاه.

عند استخدامه مع test أو [، يقوم المعاملان < و > بالفرز معجميًا باستخدام ترتيب ASCII.

اطبع أوقات المستخدم والنظام المتراكمة للصدفة وللعمليات التي يتم تشغيلها من الصدفة. حالة العودة هي 0.
يتم قراءة الأمر arg وتنفيذه عندما تستلم الصدفة الإشارة (أو الإشارات) sigspec. إذا غاب arg (وكان هناك sigspec واحد) أو كان -، يُعاد ضبط كل إشارة محددة إلى وضعها الأصلي (القيمة التي كانت عليها عند دخول الصدفة). إذا كان arg هو السلسلة الفارغة، فإن الإشارة المحددة بكل sigspec يتم تجاهلها من قبل الصدفة ومن قبل الأوامر التي تستدعيها. إذا لم يوجد arg و زُوّد الخيار -p، تُعرض أوامر الفخ المرتبطة بكل sigspec. إذا لم تُزود أي وسائط أو إذا زُوّد -p فقط، يطبع trap قائمة بالأوامر المرتبطة بكل إشارة. يتسبب الخيار -l في طباعة الصدفة لقائمة بأسماء الإشارات وأرقامها المقابلة. كل sigspec هو إما اسم إشارة معرف في <signal.h>، أو رقم إشارة. أسماء الإشارات غير حساسة لحالة الأحرف والبادئة SIG اختيارية.

إذا كان sigspec هو EXIT (0)، يُنفذ الأمر arg عند الخروج من الصدفة. إذا كان sigspec هو DEBUG، يُنفذ الأمر arg قبل كل أمر بسيط simple command، وأمر for، وأمر case، وأمر select، وكل أمر for حسابي، وقبل تنفيذ أول أمر في دالة صدفة (انظر SHELL GRAMMAR above). ارجع إلى وصف خيار extdebug للأمر المدمج shopt للحصول على تفاصيل حول تأثيره على فخ DEBUG. إذا كان sigspec هو RETURN، يُنفذ الأمر arg في كل مرة تنتهي فيها دالة صدفة أو سكربت نُفذ باستخدام الأوامر المدمجة . أو source.

إذا كان sigspec هو ERR، يُنفذ الأمر arg كلما أعاد أنبوب (قد يتكون من أمر بسيط واحد)، أو قائمة، أو أمر مركب حالة خروج غير صفرية، وفقًا للشروط التالية. لا يُنفذ فخ ERR إذا كان الأمر الفاشل جزءًا من قائمة الأوامر التي تلي مباشرة الكلمات المفتاحية while أو until، أو جزءًا من اختبار في جملة if، أو جزءًا من أمر نُفذ في قائمة && أو || باستثناء الأمر الذي يلي آخر && أو ||، أو أي أمر في أنبوب ما عدا الأخير، أو إذا كانت قيمة إرجاع الأمر معكوسة باستخدام !. هذه هي نفس الشروط التي يتبعها خيار errexit (-e).

الإشارات المتجاهلة عند دخول الصدفة لا يمكن وضع فخاخ لها أو إعادة ضبطها. الإشارات المصبوبة في فخ والتي لا يتم تجاهلها تُعاد إلى قيمها الأصلية في الصدفة الفرعية أو بيئة الصدفة الفرعية عند إنشائها. حالة الإرجاع هي خطأ إذا كان أي sigspec غير صالح؛ وإلا يعيد trap صحيحًا.

بدون خيارات، يشير إلى كيفية تفسير كل name إذا استُخدم كاسم أمر. إذا استُخدم الخيار -t، يطبع type سلسلة تكون واحدة من alias أو keyword أو function أو builtin أو file إذا كان name اسمًا مستعارًا، أو كلمة محجوزة في الصدفة، أو دالة، أو أمرًا مدمجًا، أو ملف قرص، على التوالي. إذا لم يُعثر على name، فلا يُطبع شيء، وتُعاد حالة خروج خطأ. إذا استُخدم الخيار -p، يعيد type إما اسم ملف القرص الذي سيُنفذ إذا حُدد name كاسم أمر، أو لا يعيد شيئًا إذا ``type -t name'' لن يعيد file. يجبر الخيار -P البحث في PATH عن كل name، حتى لو ``type -t name'' لم يكن ليعيد file. إذا كان الأمر محفوظًا (hashed)، يطبع -p و -P القيمة المحفوظة، والتي ليست بالضرورة الملف الذي يظهر أولاً في PATH. إذا استُخدم الخيار -a، يطبع type جميع الأماكن التي تحتوي على ملف تنفيذي باسم name. يتضمن ذلك الأسماء المستعارة والدوال، فقط وحصريًا إذا لم يُستخدم الخيار -p أيضًا. لا يتم الرجوع إلى جدول الأوامر المحفوظة عند استخدام -a. يقوم الخيار -f بكتم البحث عن دوال الصدفة، كما هو الحال مع الأمر المدمج command. يعيد type صحيحًا إذا عُثر على جميع الوسائط، وخطأ إذا لم يُعثر على أي منها.
يوفر التحكم في الموارد المتاحة للصدفة والعمليات التي تبدأها، في الأنظمة التي تسمح بهذا التحكم. يحدد الخياران -H و -S ما إذا كان سيتم ضبط الحد الصارم (hard) أو الحد المرن (soft) للمورد المعطى. لا يمكن للمستخدم العادي زيادة الحد الصارم بمجرد ضبطه؛ أما الحد المرن فيمكن زيادته حتى قيمة الحد الصارم. إذا لم يُحدد لا -H ولا -S، تُضبط الحدود المرنة والصارمة معًا. يمكن أن تكون قيمة limit رقمًا بالوحدة المحددة للمورد أو إحدى القيم الخاصة hard أو soft أو unlimited، والتي ترمز إلى الحد الصارم الحالي، والحد المرن الحالي، وعدم وجود حد، على التوالي. إذا حُذف limit، تُطبع القيمة الحالية للحد المرن للمورد، ما لم يُعط الخيار -H. عندما يُحدد أكثر من مورد، يُطبع اسم الحد والوحدة، إذا كان ذلك مناسبًا، قبل القيمة. تُفسر الخيارات الأخرى على النحو التالي:
يتم الإبلاغ عن جميع الحدود الحالية؛ ولا تُضبط أي حدود
الحد الأقصى لحجم مخزن المقبس المؤقت
الحد الأقصى لحجم ملفات core المنشأة
الحد الأقصى لحجم مقطع البيانات للعملية
الحد الأقصى لأولوية الجدولة ("nice")
الحد الأقصى لحجم الملفات المكتوبة بواسطة الصدفة وتوابعها
الحد الأقصى لعدد الإشارات المعلقة
الحد الأقصى لعدد kqueues التي يمكن تخصيصها
الحد الأقصى للحجم الذي يمكن قفله في الذاكرة
أقصى حجم للمجموعة المقيمة (لا تحترم العديد من الأنظمة هذا الحد)
الحد الأقصى لعدد واصفات الملفات المفتوحة (معظم الأنظمة لا تسمح بضبط هذه القيمة)
حجم الأنبوب بكتل سعة 512 بايت (قد لا يُسمح بضبط هذا)
الحد الأقصى لعدد البايتات في صفوف رسائل POSIX
الحد الأقصى لأولوية جدولة الوقت الحقيقي
الحد الأقصى لحجم المكدس
الحد الأقصى لوقت وحدة المعالجة المركزية بالثواني
الحد الأقصى لعدد العمليات المتاحة لمستخدم واحد
الحد الأقصى لحجم الذاكرة الافتراضية المتاحة للصدفة، وفي بعض الأنظمة، لتوابعها
الحد الأقصى لعدد أقفال الملفات
الحد الأقصى لعدد الطرفيات الوهمية
الحد الأقصى للوقت الذي يمكن لعملية وقت حقيقي تشغيله قبل أن تُعاق، بالميكروثانية
الحد الأقصى لعدد الخيوط

إذا أُعطي limit، ولم يُستخدم الخيار -a، فإن limit هو القيمة الجديدة للمورد المحدد. إذا لم يُعطَ أي خيار، فيُفترض -f. تكون القيم بزيادات قدرها 1024 بايت، باستثناء -t الذي يكون بالثواني؛ و -R الذي يكون بالميكروثانية؛ و -p الذي يكون بوحدات كتل سعة 512 بايت؛ و -P و -T و -b و -k و -n و -u والتي هي قيم غير محجمة؛ وعندما تكون في وضع posix، يكون -c و -f بزيادات قدرها 512 بايت. حالة الإرجاع هي 0 ما لم يُزود خيار أو وسيط غير صالح، أو يحدث خطأ أثناء ضبط حد جديد.

تُضبط قناع إنشاء ملفات المستخدم على الوضع. إذا بدأ الوضع برقم، يُفسّر على أنه رقم ثماني؛ وإلا فيُفسّر على أنه قناع وضع رمزي مشابه لذلك الذي يقبله chmod(1). إذا أُسقط الوضع، تُطبع القيمة الحالية للقناع. يؤدي الخيار -S إلى طباعة القناع في شكل رمزي؛ المخرج المبدئي هو رقم ثماني. إذا زُوّد الخيار -p، وأُسقط الوضع، يكون المخرج في شكل يمكن إعادة استخدامه كمدخل. حالة العودة هي 0 إذا غُيّر الوضع بنجاح أو إذا لم يُزوّد وسيط وضع، وتكون كاذبة في غير ذلك.
يُزال كل اسم من قائمة الأسماء المستعارة المعرفة. إذا زُوّد الخيار -a، تُزال جميع تعريفات الأسماء المستعارة. قيمة العودة صائبة ما لم يكن الاسم المزود ليس اسماً مستعاراً معرفاً.
لكل اسم، يُزال المتغير أو الدالة المقابلة. إذا أُعطي الخيار -v، يشير كل اسم إلى متغير صدفة، ويُزال ذلك المتغير. لا يجوز إلغاء تعيين المتغيرات المخصصة للقراءة فقط. إذا حُدد -f، يشير كل اسم إلى دالة صدفة، ويُزال تعريف الدالة. إذا زُوّد الخيار -n، وكان الاسم متغيراً بسمة nameref، فسيُلغى تعيين الاسم نفسه بدلاً من المتغير الذي يشير إليه. ليس لـ -n أي تأثير إذا زُوّد الخيار -f. في حال عدم تزويد أي خيارات، يشير كل اسم إلى متغير؛ وإذا لم يوجد متغير بهذا الاسم، تُزال الدالة التي تحمل هذا الاسم، إن وجدت. يُزال كل متغير أو دالة أُلغي تعيينها من البيئة الممرة إلى الأوامر اللاحقة. إذا أُلغي تعيين أي من BASH_ALIASES أو BASH_ARGV0 أو BASH_CMDS أو BASH_COMMAND أو BASH_SUBSHELL أو BASHPID أو COMP_WORDBREAKS أو DIRSTACK أو EPOCHREALTIME أو EPOCHSECONDS أو FUNCNAME أو GROUPS أو HISTCMD أو LINENO أو RANDOM أو SECONDS أو SRANDOM، فإنها تفقد خصائصها الخاصة، حتى لو أُعيد تعيينها لاحقاً. حالة الخروج صائبة ما لم يكن الاسم للقراءة فقط أو لا يمكن إلغاء تعيينه.
يُنتظر كل عملية فرعية محددة وتُعاد حالة إنهائها. يمكن أن يكون كل معرف معرف عملية أو مواصفة وظيفة؛ إذا أُعطيت مواصفة وظيفة، يُنتظر جميع العمليات في أنبوب تلك الوظيفة. إذا لم يُعطَ معرف، ينتظر wait جميع وظائف الخلفية قيد التشغيل وآخر عملية تبديل نُفذت، إذا كان معرف عمليتها هو نفسه $!، وتكون حالة العودة صفراً. إذا زُوّد الخيار -n، ينتظر wait اكتمال وظيفة واحدة من قائمة المعرفات، أو أي وظيفة إذا لم تُزود أي معرفات، ويعيد حالة خروجها. إذا لم يكن أي من الوسائط المزودة تابعاً للصدفة، أو إذا لم تُزود وسائط ولم يكن لدى الصدفة أطفال غير منتظرين، تكون حالة الخروج 127. إذا زُوّد الخيار -p، يُنسب معرف العملية أو الوظيفة للوظيفة التي أُعيدت حالة خروجها إلى المتغير اسم_المتغير المسمى بواسطة وسيط الخيار. سيُلغى تعيين المتغير مبدئياً قبل أي إسناد. هذا مفيد فقط عند تزويد الخيار -n. تزويد الخيار -f، عند تمكين التحكم في الوظائف، يجبر wait على انتظار المعرف حتى ينتهي قبل إعادة حالته، بدلاً من العودة عند تغير حالته. إذا حدد المعرف عملية أو وظيفة غير موجودة، تكون حالة العودة 127. إذا قوطع wait بإشارة، فستكون حالة العودة أكبر من 128، كما هو موضح تحت SIGNALS above. خلاف ذلك، تكون حالة العودة هي حالة خروج آخر عملية أو وظيفة انتُظرت.

وضع توافق الصدفة

قدم Bash-4.0 مفهوم مستوى توافق الصدفة، المحدد كمجموعة من الخيارات للأمر المدمج shopt (مثل compat31، و compat32، و compat40، و compat41، وما إلى ذلك). لا يوجد سوى مستوى توافق حالي واحد -- كل خيار مانع للآخر. مستوى التوافق مخصص للسماح للمستخدمين بتحديد سلوك من الإصدارات السابقة غير متوافق مع الإصدارات الأحدث أثناء ترحيلهم للسكربتات لاستخدام الميزات والسلوك الحالي. وهو مخصص ليكون حلاً مؤقتاً.

لا يذكر هذا القسم السلوك القياسي لإصدار معين (على سبيل المثال، تعيين compat32 يعني أن اقتباس الطرف الأيمن لمشغل مطابقة التعبيرات النمطية يقتبس محارف التعبيرات النمطية الخاصة في الكلمة، وهو السلوك المبدئي في bash-3.2 والإصدارات اللاحقة).

إذا مكن مستخدم ما، على سبيل المثال، compat32، فقد يؤثر ذلك على سلوك مستويات التوافق الأخرى وصولاً إلى مستوى التوافق الحالي وتضمينه. الفكرة هي أن كل مستوى توافق يتحكم في السلوك الذي تغير في ذلك الإصدار من bash، ولكن هذا السلوك قد يكون موجودا في إصدارات سابقة. على سبيل المثال، التغيير لاستخدام المقارنات القائمة على الإعدادات المحلية (locale) مع أمر [[ جاء في bash-4.1، واستخدمت الإصدارات الأقدم مقارنات قائمة على ASCII، لذا فإن تمكين compat32 سيمكن المقارنات القائمة على ASCII أيضا. قد لا تكون هذه الدقة كافية لجميع الاستخدامات، ونتيجة لذلك يجب على المستخدمين استخدام مستويات التوافق بحذر. اقرأ الوثائق الخاصة بميزة معينة لمعرفة السلوك الحالي.

قدم Bash-4.3 متغير صدفة جديدًا: BASH_COMPAT. تحدد القيمة المسندة لهذا المتغير (رقم إصدار عشري مثل 4.2، أو عدد صحيح مقابل لخيار compatNN، مثل 42) مستوى التوافق.

بدءاً من bash-4.4، بدأ Bash في إهمال مستويات التوافق القديمة. في النهاية، ستُزال الخيارات لصالح BASH_COMPAT.

Bash-5.0 هو الإصدار الأخير الذي سيكون له خيار shopt فردي للإصدار السابق. يجب على المستخدمين استخدام BASH_COMPAT في bash-5.0 والإصدارات الأحدث.

يصف الجدول التالي تغييرات السلوك التي يتحكم فيها كل إعداد لمستوى التوافق. يُستخدم وسم compatNN كاختصار لضبط مستوى التوافق على NN باستخدام إحدى الآليات التالية. بالنسبة للإصدارات الأقدم من bash-5.0، يمكن ضبط مستوى التوافق باستخدام خيار shopt المقابل compatNN. بالنسبة لـ bash-4.3 والإصدارات الأحدث، يُفضل متغير BASH_COMPAT، وهو مطلوب لـ bash-5.1 والإصدارات الأحدث.

ليس لاقتباس الطرف الأيمن لمشغل مطابقة التعبيرات النمطية (=~) للأمر [[ أي تأثير خاص
يؤدي مقاطعة قائمة أوامر مثل "a ; b ; c" إلى تنفيذ الأمر التالي في القائمة (في bash-4.0 والإصدارات الأحدث، تعمل الصدفة كما لو أنها تلقت المقاطعة، لذا فإن مقاطعة أمر واحد في قائمة يجهض تنفيذ القائمة بأكملها)
لا تراعي المشغلات < و > للأمر [[ المحلية الحالية عند مقارنة السلاسل؛ بل تستخدم ترتيب ASCII. تستخدم إصدارات Bash السابقة لـ bash-4.1 ترتيب ASCII و strcmp(3)؛ بينما يستخدم bash-4.1 والأحدث تسلسل ترتيب المحلية الحالية و strcoll(3).
  • في وضع posix، قد يتبع time خيارات ويظل معترفاً به ككلمة محجوزة (هذا هو تفسير POSIX رقم 267)
  • في وضع posix، يتطلب المحلل وجود عدد زوجي من علامات الاقتباس المفردة في جزء الكلمة من توسيع معطى مقتبس باقتباس مزدوج ويعاملها بشكل خاص، بحيث تُعتبر المحارف الموجودة داخل الاقتباس المفرد مقتبسة (هذا هو تفسير POSIX رقم 221)
  • سلسلة الاستبدال في استبدال النمط المقتبس مزدوجاً لا تخضع لإزالة الاقتباس، كما هو الحال في الإصدارات بعد bash-4.2
  • في وضع posix، تُعتبر علامات الاقتباس المفردة خاصة عند توسيع جزء الكلمة من توسيع معطى مقتبس باقتباس مزدوج ويمكن استخدامها لاقتباس قوس إغلاق أو محرف خاص آخر (هذا جزء من تفسير POSIX رقم 221)؛ في الإصدارات اللاحقة، لا تكون علامات الاقتباس المفردة خاصة داخل توسعات الكلمات المقتبسة مزدوجاً
  • لا تطبع الصدفة رسالة تحذير إذا جرت محاولة لاستخدام إسناد مركب مقتبس كوسييط لـ declare (مثلاً: declare -a foo='(1 2)'). الإصدارات اللاحقة تحذر من أن هذا الاستخدام مهجور
  • تُعتبر أخطاء توسيع الكلمات أخطاء غير قاتلة تؤدي إلى فشل الأمر الحالي، حتى في وضع posix (السلوك المبدئي هو جعلها أخطاء قاتلة تؤدي إلى خروج الصدفة)
  • عند تنفيذ دالة صدفة، لا تُصفّر حالة الحلقة (while/until/إلخ)، لذا فإن break أو continue في تلك الدالة سيقطع أو يواصل الحلقات في سياق المستدعي. يقوم Bash-4.4 والأحدث بتصغير حالة الحلقة لمنع ذلك
  • تضبط الصدفة القيم المستخدمة بواسطة BASH_ARGV و BASH_ARGC بحيث يمكن توسيعهما إلى المعطيات الموضعية للصدفة حتى لو لم يكن وضع التنقيح الموسع مُمكناً
  • ترث الصدفة الفرعية الحلقات من سياقها الأب، لذا سيؤدي break أو continue إلى خروج الصدفة الفرعية. يقوم Bash-5.0 والأحدث بتصغير حالة الحلقة لمنع الخروج
  • تستمر إسنادات المتغيرات التي تسبق الأوامر المدمجة مثل export و readonly التي تضبط السمات في التأثير على المتغيرات التي تحمل نفس الاسم في بيئة الاستدعاء حتى لو لم تكن الصدفة في وضع posix
  • غير Bash-5.1 الطريقة التي يُولد بها $RANDOM لتقديم عشوائية أكثر قليلاً. إذا ضُبط مستوى توافق الصدفة على 50 أو أقل، فإنه يعود إلى الطريقة من bash-5.0 والإصدارات السابقة، لذا فإن بذر مولد الأرقام العشوائية عن طريق إسناد قيمة لـ RANDOM سينتج نفس التسلسل كما في bash-5.0
  • إذا كان جدول هاش الأوامر فارغاً، كانت إصدارات bash السابقة لـ bash-5.1 تطبع رسالة إعلامية بهذا المعنى، حتى عند إنتاج مخرج يمكن إعادة استخدامه كمدخل. يقوم Bash-5.1 بكتم تلك الرسالة عند تزويد الخيار -l.
يعامل الأمر الداخلي unset محاولات إلغاء تعيين أدلة المصفوفة @ و * بشكل مختلف اعتمادًا على ما إذا كانت المصفوفة مفهرسة أو ترابطية، وبشكل مختلف عما كان في الإصدارات السابقة.

صدفة مقيدة

إذا بُدئ bash بالاسم rbash، أو زُوّد الخيار -r عند الاستدعاء، تصبح الصدفة مقيدة. تُستخدم الصدفة المقيدة لإعداد بيئة أكثر تحكماً من الصدفة القياسية. وهي تتصرف بشكل مطابق لـ bash مع استثناء أن الأمور التالية غير مسموح بها أو لا تُنفذ:

  • تغيير الأدلة باستخدام cd
  • ضبط أو إلغاء تعيين قيم SHELL أو PATH أو HISTFILE أو ENV أو BASH_ENV
  • تحديد أسماء أوامر تحتوي على /
  • تحديد اسم ملف يحتوي على / كوسيط للأمر المدمج .
  • تحديد اسم ملف يحتوي على شرطة مائلة كوسيط للأمر المدمج history
  • تحديد اسم ملف يحتوي على شرطة مائلة كوسيط للخيار -p للأمر المدمج hash
  • استيراد تعريفات الدوال من بيئة الصدفة عند بدء التشغيل
  • تحليل قيمة SHELLOPTS من بيئة الصدفة عند بدء التشغيل
  • إعادة توجيه المخرج باستخدام مشغلات إعادة التوجيه > و >| و <> و >& و &> و >>
  • استخدام الأمر المدمج exec لاستبدال الصدفة بأمر آخر
  • إضافة أو حذف أوامر مدمجة باستخدام الخيارين -f و -d للأمر المدمج enable
  • استخدام الأمر المدمج enable لتمكين الأوامر المدمجة المعطلة للصدفة
  • تحديد الخيار -p للأمر المدمج command
  • إيقاف تشغيل الوضع المقيد باستخدام set +r أو shopt -u restricted_shell.

تُطبق هذه القيود بعد قراءة أي ملفات بدء تشغيل.

When a command that is found to be a shell script is executed (see COMMAND EXECUTION above), rbash يوقف أي قيود في الصدفة التي تم إنشاؤها لتنفيذ البرنامج النصي.

انظر أيضًا

دليل مرجع Bash، برايان فوكس وتشيت رامي
مكتبة Gnu Readline، برايان فوكس وتشيت رامي
مكتبة Gnu History، برايان فوكس وتشيت رامي
واجهة نظام التشغيل المحمولة (POSIX) الجزء 2: الصدفة والأدوات المساعدة، IEEE --
http://pubs.opengroup.org/onlinepubs/9699919799/
http://tiswww.case.edu/~chet/bash/POSIX -- وصف لوضع posix

الملفات

/bin/bash
ملف bash التنفيذي
/etc/profile
ملف تهيئة النظام، يُنفذ لصدفات الولوج
/etc/bash.bashrc
ملف بدء التشغيل لكل صدفة تفاعلية على مستوى النظام
/etc/bash.bash.logout
ملف تنظيف صدفة الولوج على مستوى النظام، يُنفذ عند خروج صدفة الولوج
~/.bash_profile
ملف التهيئة الشخصي، يُنفذ لصدفات الولوج
~/.bashrc
ملف بدء التشغيل الفردي لكل صدفة تفاعلية
~/.bash_logout
ملف تنظيف صدفة الولوج الفردي، يُنفذ عند خروج صدفة الولوج
~/.bash_history
القيمة المبدئية لـ HISTFILE، الملف الذي تحفظ فيه bash تاريخ الأوامر
~/.inputrc
ملف تهيئة readline الفردي

المؤلفون

برايان فوكس، مؤسسة البرمجيات الحرة
bfox@gnu.org

تشيت رامي، جامعة كيس وسترن ريسرف
chet.ramey@case.edu

تقارير العلات

إذا وجدت علة في bash، فيجب عليك الإبلاغ عنها. ولكن أولاً، يجب عليك التأكد من أنها علة حقاً، وأنها تظهر في أحدث إصدار من bash. أحدث إصدار متاح دائماً من ftp://ftp.gnu.org/pub/gnu/bash/ و http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz.

بمجرد تأكدك من وجود علة بالفعل، استخدم الأمر bashbug لتقديم تقرير عن العلة. إذا كان لديك إصلاح، فنحن نشجعك على إرساله أيضاً! يمكن إرسال الاقتراحات وتقارير العلل 'الفلسفية' إلى bug-bash@gnu.org أو نشرها في مجموعة أخبار Usenet المسمى gnu.bash.bug.

يجب أن تتضمن جميع بلاغات العلل ما يلي:

رقم نسخة bash
العتاد ونظام التشغيل
المُصنف المستخدم للتصنيف
وصف لسلوك العلة
سكربت قصير أو `وصفة' تُظهر العلة

يُدرج bashbug العناصر الثلاثة الأولى آلياً في النموذج الذي يوفره لتقديم بلاغ عن علة.

يجب توجيه التعليقات وبلاغات العلل المتعلقة بصفحة الدليل هذه إلى chet.ramey@case.edu.

العلل

إنها ضخمة للغاية وبطيئة للغاية.

هناك بعض الاختلافات الدقيقة بين bash والإصدارات التقليدية من sh، ومعظمها بسبب مواصفات POSIX.

الأسماء المستعارة مربكة في بعض الاستخدامات.

أوامر الصدفة المدمجة ودوالها غير قابلة للإيقاف أو إعادة التشغيل.

الأوامر المركبة وتسلسلات الأوامر من الشكل `a ; b ; c' لا تُعامل بلباقة عند محاولة تعليق العملية. عندما تُوقف عملية ما، تنفذ الصدفة فوراً الأمر التالي في التسلسل. يكفي وضع تسلسل الأوامر بين قوسين لإجباره على الدخول في صدفة فرعية، والتي يمكن إيقافها كوحدة واحدة.

متغيرات المصفوفة لا يمكن (حتى الآن) تصديرها.

قد تكون هناك عملية مشتركة نشطة واحدة فقط في كل مرة.

ترجمة

تُرجمت هذه الصفحة من الدليل بواسطة

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.

19 سبتمبر 2022 GNU Bash 5.2