table of contents
- الاسم
- موجز
- حقوق النسخ
- الوصف
- الخيارات
- المعطيات
- الاستدعاء
- تعريفات
- الكلمات المحجوزة
- قواعد الصدفة
- تعليقات
- الاقتباس
- المعاملات
- توسيع
- إعادة التوجيه
- الأسماء المستعارة
- الوظائف
- التقييم الحسابي
- التعبيرات الشرطية
- توسيع الأوامر البسيطة
- تنفيذ الأوامر
- بيئة تنفيذ الأوامر
- البيئة
- حالة الخروج
- إشارات
- التحكم في المهام
- المحث
- READLINE
- التاريخ
- توسيع التاريخ
- أوامر الصدفة المدمجة
- وضع توافق الصدفة
- صدفة مقيدة
- انظر أيضًا
- الملفات
- المؤلفون
- تقارير العلات
- العلل
- ترجمة
| BASH(1) | General Commands Manual | BASH(1) |
الاسم¶
bash - صدفة جنو بورن-أغين (Bourne-Again SHell)
موجز¶
bash [خيارات] [سلسلة_أوامر | ملف]
حقوق النسخ¶
Bash is Copyright (C) 1989-2025 by the Free Software Foundation, Inc.
الوصف¶
إنّ Bash مفسر للغة الأوامر ينفذ الأوامر المقروءة من الدخل القياسي، أو من سلسلة نصية، أو من ملف. وهو إعادة تنفيذ وتوسعة لصدفة بورن (Bourne shell)، مفسر لغة أوامر يونكس التاريخي. كما يدمج Bash ميزات مفيدة من صدفتي Korn و C (ksh و csh).
POSIX هو اسم لعائلة من معايير الحوسبة المبنية على يونكس. يهدف Bash ليكون تنفيذاً مطابقاً لقسم الصدفة والأدوات المساعدة في مواصفات IEEE POSIX (معيار IEEE 1003.1). يغير نمط Bash POSIX (المشار إليه لاحقاً باسم posix mode) سلوك الصدفة عندما تختلف عملياتها المبدئية عن المعيار لتتوافق معه تماماً. انظر قسم انظر أيضاً أدناه للحصول على مرجع لمستند يفصل كيف يؤثر نمط posix على سلوك bash. يمكن ضبط Bash ليكون متوافقاً مع POSIX مبدئياً.
الخيارات¶
يمكن استخدام كافة خيارات الصدفة أحادية المحرف الموثقة في وصف أمر set المدمج، بما في ذلك -o، كخيارات عند استدعاء الصدفة. بالإضافة إلى ذلك، يفسر bash الخيارات التالية عند استدعائه:
- -c
- إذا وُجد الخيار -c، تُقرأ الأوامر من أول معامل ليس خياراً command_string. إذا وُجدت معاملات بعد command_string، يُسند المعامل الأول إلى $0 وتُسند بقية المعاملات إلى المعاملات الموضعية. التعيين لـ $0 يضبط اسم الصدفة، والذي يُستخدم في رسائل التحذير والخطأ.
- -i
- إذا وُجد الخيار -i، تكون الصدفة تفاعلية.
- -l
- جعل bash يتصرف كما لو أنه استُدعي كصدفة ولوج (انظر الاستدعاء أدناه).
- -r
- إذا وُجد الخيار -r، تصبح الصدفة مقيدة (انظر الصدفة المقيدة أدناه).
- -s
- إذا وُجد الخيار -s، أو لم تبقَ أي معاملات بعد معالجة الخيارات، تقرأ الصدفة الأوامر من الدخل القياسي. يسمح هذا الخيار بضبط المعاملات الموضعية عند استدعاء صدفة تفاعلية أو عند قراءة الدخل عبر أنبوب.
- -v
- اطبع أسطر مدخلات الصدفة فور قراءتها.
- -x
- طباعة الأوامر ومعاملاتها أثناء تنفيذها.
- -D
- اطبع قائمة بكافة السلاسل النصية المحاطة بعلامات اقتباس مزدوجة والمسبوقة بـ $ على الخرج القياسي. هذه هي السلاسل التي تخضع للترجمة اللغوية عندما لا تكون المحلية الحالية C أو POSIX. هذا يتضمن الخيار -n؛ لن تُنفذ أي أوامر.
- [-+]O [shopt_option]
- shopt_option هو أحد خيارات الصدفة التي يقبلها أمر shopt المدمج (انظر أوامر الصدفة المدمجة أدناه). إذا وُجد shopt_option، يضبط -O قيمة ذلك الخيار؛ بينما يلغيه +O. إذا لم يُزود shopt_option، يطبع bash أسماء وقيم خيارات الصدفة التي يقبلها shopt على الخرج القياسي. إذا كان خيار الاستدعاء هو +O، يُعرض الخرج بتنسيق يمكن استخدامه مجدداً كدخل.
- --
- تُشير -- إلى نهاية الخيارات وتعطل أي معالجة إضافية للخيارات. تُعامل أي معاملات بعد -- كاسم ملف لسكربت صدفة (انظر أدناه) ومعاملات ممررة إلى ذلك السكربت. المعامل - يعادل --.
يفسر Bash أيضاً عدداً من الخيارات متعددة المحارف. يجب أن تظهر هذه الخيارات على سطر الأوامر قبل الخيارات أحادية المحرف ليُتعرف عليها.
- --debugger
- الترتيب لتنفيذ تشكيلة المنقح قبل بدء الصدفة. يُفعل نمط التنقيح الموسع (انظر وصف خيار extdebug لأمر shopt المدمج أدناه).
- --dump-po-strings
- يعادل -D، لكن الخرج يكون بتنسيق ملف GNU gettext “po” (كائن محمول - portable object).
- --dump-strings
- يعادل -D.
- --help
- اعرض رسالة الاستخدام على الخرج القياسي واخرج بنجاح.
- --init-file file
- --rcfile file
- تنفيذ الأوامر من ملف بدلاً من ملف التهيئة على مستوى النظام /etc/bash.bashrc وملف التهيئة الشخصي القياسي ~/.bashrc إذا كانت الصدفة تفاعلية (انظر الاستدعاء أدناه).
- --login
- يكافئ -l.
- --noediting
- لا تستخدم مكتبة GNU readline لقراءة أسطر الأوامر عندما تكون الصدفة تفاعلية.
- --noprofile
- لا تقرأ ملف بدء التشغيل الخاص بالنظام /etc/profile أو أياً من ملفات التهيئة الشخصية ~/.bash_profile, ~/.bash_login, أو ~/.profile. مبدئياً، يقرأ bash هذه الملفات عند استدعائه كصدفة ولوج (انظر الاستدعاء أدناه).
- --norc
- عدم قراءة وتنفيذ ملف التهيئة على مستوى النظام /etc/bash.bashrc وملف التهيئة الشخصي ~/.bashrc إذا كانت الصدفة تفاعلية. هذا الخيار مفعل مبدئياً إذا استدعيت الصدفة باسم sh.
- --posix
- تفعيل وضع posix؛ يغير سلوك bash حيثما تختلف العملية الافتراضية عن معيار POSIX لمطابقة المعيار.
- --restricted
- تصبح الصدفة مقيدة (انظر الصدفة المقيدة أدناه).
- --verbose
- يعادل -v.
- --version
- اعرض معلومات الإصدار لنسخة bash هذه على الخرج القياسي واخرج بنجاح.
المعطيات¶
إذا بقيت معاملات بعد معالجة الخيارات، ولم يُزود أي من الخيارين -c أو -s، يُعامل المعامل الأول كاسم ملف يحتوي على أوامر صدفة (سكربت صدفة). عند استدعاء bash بهذه الطريقة، يُضبط $0 على اسم الملف، وتُضبط المعاملات الموضعية على المعاملات المتبقية. يقرأ bash الأوامر من هذا الملف وينفذها، ثم يخرج. حالة خروج bash هي حالة خروج آخر أمر نُفذ في السكربت. إذا لم تُنفذ أي أوامر، تكون حالة الخروج 0. يحاول bash أولاً فتح الملف في الدليل الحالي، وإذا لم يُعثر على الملف، يبحث في الأدلة الموجودة في PATH عن السكربت.
الاستدعاء¶
صدفة الولوج هي التي يكون المحرف الأول من معاملها رقم صفر هو -، أو التي بدأت بخيار --login.
الصدفة التفاعلية هي التي تبدأ بدون معاملات ليست خيارات (ما لم يُحدد -s) وبدون الخيار -c، ويكون دخلها القياسي وخرج خطئها القياسي متصلين بمحطات طرفية (كما يحدد isatty(3))، أو التي بدأت بالخيار -i. يضبط bash القيمة PS1 ويُضمن i في $- إذا كانت الصدفة تفاعلية، لذا يمكن لسكربت صدفة أو ملف بدء تشغيل اختبار هذه الحالة.
تصف الفقرات التالية كيف ينفذ 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, إذا كانت هذه الملفات موجودة وقابلة للقراءة. لا يقرأ Bash هذا الملف إذا استُدعي كـ sh. يمنع الخيار --norc هذا السلوك، ويجعل الخيار --rcfile bash يستخدم ملفاً مختلفاً بدلاً من ~/.bashrc, ولكن عموماً لا يقوم rshd ولا sshd باستدعاء الصدفة بهذه الخيارات أو السماح بتحديدها.
إذا بدأت الصدفة مع معرف مستخدم (أو مجموعة) فعلي لا يساوي معرف المستخدم (أو المجموعة) الحقيقي، ولم يُزود الخيار -p، فلا تُقرأ أي ملفات بدء تشغيل، ولا تُورث وظائف الصدفة من البيئة، وتُتجاهل المتغيرات SHELLOPTS، و BASHOPTS، و CDPATH، و GLOBIGNORE إذا ظهرت في البيئة، ويُضبط معرف المستخدم الفعلي ليكون هو معرف المستخدم الحقيقي. إذا زُوِّد الخيار -p عند الاستدعاء، يكون سلوك بدء التشغيل هو نفسه، ولكن لا يُعاد ضبط معرف المستخدم الفعلي.
تعريفات¶
تُستخدم التعريفات التالية في بقية هذا المستند.
- فراغ (blank)
- مسافة أو علامة جدولة (tab).
- مسافة فارغة (whitespace)
- محرف ينتمي لفئة المحارف space في المحلية الحالية، أو الذي تعيد معه isspace(3) قيمة صحيحة.
- كلمة (word)
- تسلسل من المحارف التي تعتبرها الصدفة وحدة واحدة. تُعرف أيضاً باسم علامة (token).
- name
- كلمة تتكون فقط من محارف أبجدية رقمية وشرطات سفلية، وتبدأ بمحرف أبجدي أو بشرطة سفلية. يُشار إليها أيضاً باسم معرف (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 (انظر إعادة التوجيه أدناه). إذا كان |& هو عامل الأنبوب، فإن خطأ command1 القياسي، بالإضافة إلى خرجه القياسي، يُوصل بالدخل القياسي لـ command2 عبر الأنبوب؛ وهو اختصار لـ 2>&1 |. تُجرى عملية إعادة التوجيه الضمنية هذه لخطأ القياسي إلى الخرج القياسي بعد أي عمليات إعادة توجيه يحددها command1.
حالة الإرجاع للأنبوب هي حالة خروج آخر أمر، ما لم يُفعل الخيار pipefail. إذا فُعل pipefail، فإن حالة إرجاع الأنبوب هي قيمة آخر أمر (في أقصى اليمين) يخرج بحالة غير صفرية، أو صفر إذا خرجت جميع الأوامر بنجاح. إذا سبقت الكلمة المحجوزة ! الأنبوب، تكون حالة خروج ذلك الأنبوب هي النفي المنطقي لحالة الخروج كما هو موضح أعلاه. إذا نُفذ الأنبوب بشكل متزامن، تنتظر الصدفة جميع الأوامر في الأنبوب لتنتهي قبل إرجاع القيمة.
إذا سبقت الكلمة المحجوزة time أنبوباً، تبلغ الصدفة عن الوقت المنقضي بالإضافة إلى وقت المستخدم والنظام المستهلك في تنفيذه عند انتهاء الأنبوب. يغير الخيار -p تنسيق الخرج إلى التنسيق الذي يحدده POSIX بدأت العلامة (token) التالية بـ “-”. قيمة المتغير TIMEFORMAT هي سلسلة تنسيق تحدد كيفية عرض معلومات التوقيت؛ انظر وصف TIMEFORMAT أدناه في قسم متغيرات الصدفة.
عندما تكون الصدفة في نمط posix، قد تظهر time بمفردها كالكلمة الوحيدة في أمر بسيط. في هذه الحالة، تعرض الصدفة إجمالي وقت المستخدم والنظام المستهلك بواسطة الصدفة وعملياتها التابعة. يحدد المتغير TIMEFORMAT تنسيق معلومات الوقت.
يُنفيذ كل أمر في أنبوب متعدد الأوامر، حيث تُنشأ الأنابيب، في صدفة فرعية، وهي عملية منفصلة. انظر بيئة تنفيذ الأوامر لوصف للصدف الفرعية وبيئتها. إذا فُعل الخيار lastpipe باستخدام أمر shopt المدمج (انظر وصف shopt أدناه)، ولم يكن التحكم في المهام نشطاً، فقد يُشغل العنصر الأخير من الأنبوب بواسطة عملية الصدفة نفسها.
قوائم¶
القائمة هي تسلسل من أنبوب واحد أو أكثر يفصل بينها أحد العوامل ;، أو &، أو &&، أو ||، وتنتهي اختيارياً بـ ;، أو &، أو <سطر_جديد>.
من بين عوامل القائمة هذه، يتمتع && و || بأولوية متساوية، يليهما ; و &، واللذان يتمتعان أيضاً بأولوية متساوية.
قد يظهر تسلسل من سطر جديد واحد أو أكثر في قائمة بدلاً من الفاصلة المنقوطة لترسيم الأوامر.
إذا أُنهي أمر بعامل التحكم &، تنفذ الصدفة الأمر في الخلفية في صدفة فرعية. لا تنتظر الصدفة انتهاء الأمر، وتكون حالة الإرجاع 0. يُشار إليها باسم الأوامر غير المتزامنة. تُنفذ الأوامر المفصولة بـ ; بشكل متسلسل؛ حيث تنتظر الصدفة انتهاء كل أمر بدوره. حالة الإرجاع هي حالة خروج آخر أمر نُفذ.
قوائم AND و OR هي تسلسلات من أنبوب واحد أو أكثر تفصل بينها عوامل التحكم && و || على التوالي. تُنفذ قوائم AND و OR بترابط من اليسار. تأخذ قائمة AND الشكل التالي
command1 && command2
يُنفيذ command2 إذا، وفقط إذا، أرجع command1 حالة خروج صفرية (نجاح).
تأخذ قائمة OR الشكل التالي
command1 || command2
يُنفيذ command2 إذا، وفقط إذا، أرجع command1 حالة خروج غير صفرية. حالة الإرجاع لقوائم AND و OR هي حالة خروج آخر أمر نُفذ في القائمة.
الأوامر المركبة¶
الأمر المركب هو أحد الأوامر التالية. في معظم الحالات، قد تُفصل قائمة في وصف الأمر عن بقية الأمر بسطر جديد واحد أو أكثر، وقد يتبعها سطر جديد بدلاً من الفاصلة المنقوطة.
- (list)
- تُنفيذ قائمة في صدفة فرعية (انظر بيئة تنفيذ الأوامر أدناه لوصف لبيئة الصدفة الفرعية). تعيينات المتغيرات والأوامر المدمجة التي تؤثر على بيئة الصدفة لا يظل مفعولها سارياً بعد اكتمال الأمر. حالة الإرجاع هي حالة خروج القائمة.
- { list; }
- تُنفيذ قائمة في بيئة الصدفة الحالية. يجب إنهاء القائمة بسطر جديد أو فاصلة منقوطة. يُعرف هذا باسم أمر المجموعة. حالة الإرجاع هي حالة خروج القائمة.
- لاحظ أنه على عكس المحارف الواصفة ( و )، فإن { و } هي كلمات محجوزة ويجب أن تظهر في مكان يُسمح فيه بالتعرف على الكلمات المحجوزة. وبما أنها لا تسبب فاصلاً بين الكلمات، يجب فصلها عن القائمة بمسافة فارغة أو محرف واصف آخر للصدفة.
- ((expression))
- يُقيّم التعبير الحسابي وفقاً للقواعد الموضحة أدناه في قسم التقييم الحسابي. إذا كانت قيمة التعبير غير صفرية، تكون حالة الإرجاع 0؛ وخلاف ذلك تكون حالة الإرجاع 1. يخضع التعبير لنفس التوسعات كما لو كان داخل علامات اقتباس مزدوجة، لكن علامات الاقتباس المزدوجة غير المهربة في التعبير لا تُعامل معاملة خاصة وتُحذف. وبما أن هذا قد يؤدي إلى سلاسل فارغة، يعامل هذا الأمر تلك السلاسل كتعبيرات تُقيّم بـ 0.
- [[ expression ]]
- قيم التعبير الشرطي التعبير وأرجع حالة صفرية (صحيح) أو غير صفرية (خطأ). تتكون التعبيرات من العناصر الأساسية الموضحة أدناه في قسم التعبيرات الشرطية. الكلمات بين [[ و ]] لا تخضع لتقسيم الكلمات وتوسيع مسار الملف. تجري الصدفة توسيع علامة المدة، وتوسيع المعاملات والمتغيرات، والتوسيع الحسابي، واستبدال الأوامر، واستبدال العمليات، وحذف الاقتباس على تلك الكلمات. العوامل الشرطية مثل -f يجب أن تكون غير محاطة باقتباس ليُتعرف عليها كعناصر أساسية.
- عند استخدامها مع [[، يقوم العاملان < و > بالفرز معجمياً باستخدام المحلية الحالية.
انظر وصف الأمر المدمج test (قسم SHELL BUILTIN COMMANDS أدناه) لمعرفة كيفية التعامل مع المعلمات (أي المعلمات المفقودة).
- عند استخدام العاملين == و !=، تُعتبر السلسلة الموجودة على يمين العامل نمطاً وتتم مطابقتها وفقاً للقواعد الموضحة أدناه في قسم مطابقة الأنماط، كما لو كان خيار الصدفة extglob مفعلاً. العامل = يعادل ==. إذا فُعل خيار الصدفة nocasematch، تُجرى المطابقة دون مراعاة لحالة المحارف الأبجدية. قيمة الإرجاع هي 0 إذا طابقت السلسلة النمط (==) أو لم تطابقه (!=)، و 1 خلاف ذلك. إذا حُوصر أي جزء من النمط باقتباس، تتم مطابقة الجزء المقتبس كسلسلة نصية: كل محرف في الجزء المقتبس يطابق نفسه، بدلاً من أن يكون له أي معنى خاص لمطابقة الأنماط.
- يتوفر عامل ثنائي إضافي، =~، بنفس أولوية == و !=. عند استخدامه، تُعتبر السلسلة الموجودة على يمين العامل تعبيراً نمطياً موسعاً POSIX وتتم مطابقتها وفقاً لذلك (باستخدام واجهات POSIX regcomp و regexec الموصوفة عادة في regex(3)). قيمة الإرجاع هي 0 إذا طابقت السلسلة النمط، و 1 خلاف ذلك. إذا كان التعبير النمطي غير صحيح لغوياً، تكون قيمة إرجاع التعبير الشرطي 2. إذا فُعل خيار الصدفة nocasematch، تُجرى المطابقة دون مراعاة لحالة المحارف الأبجدية.
- إذا حُوصر أي جزء من النمط باقتباس، تتم مطابقة الجزء المقتبس حرفياً، كما ذكرنا أعلاه. إذا كان النمط مخزناً في متغير صدفة، فإن إحاطة توسيع المتغير باقتباس يجبر النمط بأكمله على أن يُطابق حرفياً. تعامل مع تعبيرات الأقواس في التعبيرات النمطية بحذر، لأن الاقتباس العادي ومحارف الأنماط تفقد معانيها بين الأقواس.
- تنجح المطابقة إذا طابق النمط أي جزء من السلسلة. ارسِ النمط باستخدام عاملي التعبير النمطي ^ و $ لإجباره على مطابقة السلسلة بأكملها.
- يسجل متغير المصفوفة BASH_REMATCH أي أجزاء من السلسلة طابقت النمط. يحتوي العنصر ذو الفهرس 0 في BASH_REMATCH على جزء السلسلة الذي طابق التعبير النمطي بالكامل. تُحفظ السلاسل الفرعية التي طابقتها التعبيرات الفرعية المحاطة بأقواس داخل التعبير النمطي في فهارس BASH_REMATCH المتبقية. العنصر ذو الفهرس n في BASH_REMATCH هو جزء السلسلة الذي طابق التعبير الفرعي المحاط بأقواس رقم n. يضبط Bash المتغير BASH_REMATCH في النطاق العام؛ التصريح عنه كمتغير محلي سيؤدي إلى نتائج غير متوقعة.
- يمكن دمج التعبيرات باستخدام العوامل التالية، مرتبة تنازلياً حسب الأولوية:
- ( expression )
- يعيد قيمة التعبير. يمكن استخدام هذا لتجاوز الأولوية العادية للعوامل.
- ! expression
- صحيح إذا كان التعبير خاطئاً.
- expression1 && expression2
- صحيح إذا كان كل من expression1 و expression2 صحيحين.
- expression1 || expression2
- صحيح إذا كان أي من expression1 أو expression2 صحيحاً.
لا يُقيم العاملان && و || التعبير expression2 إذا كانت قيمة expression1 كافية لتحديد قيمة الإرجاع للتعبير الشرطي بأكمله.
- for name [ [ in word ... ] ; ] do list ; done
- أولاً، يتم توسيع قائمة الكلمات التي تلي in، لإنتاج قائمة من العناصر. ثم، يُضبط المتغير name على كل عنصر من هذه القائمة بدوره، وتُنفيذ القائمة في كل مرة. إذا حُذفت in word، ينفذ أمر for القائمة مرة واحدة لكل معامل موضعي مضبوط (انظر المعاملات أدناه). حالة الإرجاع هي حالة خروج آخر أمر نُفذ. إذا أدى توسيع العناصر التي تلي in إلى قائمة فارغة، لا تُنفذ أي أوامر، وتكون حالة الإرجاع 0.
- for (( expr1 ; expr2 ; expr3 )) [;] do list ; done
- أولاً، يُقيم التعبير الحسابي expr1 وفقاً للقواعد الموضحة أدناه في قسم التقييم الحسابي. ثم، يُقيم التعبير الحسابي expr2 بشكل متكرر حتى يُقيم بـ صفر. في كل مرة يُقيم فيها expr2 بقيمة غير صفرية، تُنفذ القائمة ويُقيم التعبير الحسابي expr3. إذا حُذف أي تعبير، فإنه يتصرف كما لو كان يُقيم بـ 1. قيمة الإرجاع هي حالة خروج آخر أمر نُفذ في القائمة، أو قيمة غير صفرية إذا كان أي من التعبيرات غير صحيح.
- استخدم أمري break و continue المدمجين (انظر أوامر الصدفة المدمجة أدناه) للتحكم في تنفيذ الحلقة.
- select name [ in word ] ; do list ; done
- أولاً، يتم توسيع قائمة الكلمات التي تلي in لإنتاج قائمة من العناصر، وتُطبع مجموعة الكلمات الموسعة على الخطأ القياسي، كل منها مسبوق برقم. إذا حُذفت in word، تُطبع المعاملات الموضعية (انظر المعاملات أدناه). ثم يعرض select المحث PS3 ويقرأ سطراً من الدخل القياسي. إذا كان السطر يتكون من رقم مطابق لإحدى الكلمات المعروضة، يضبط select قيمة name على تلك الكلمة. إذا كان السطر فارغاً، يعرض select الكلمات والمحث مرة أخرى. إذا قُرئت نهاية الملف (EOF)، يكتمل select ويعيد 1. أي قيمة أخرى تضبط name على قيمة فارغة. يُحفظ السطر المقروء في المتغير REPLY. تُنفذ القائمة بعد كل اختيار حتى يُنفذ أمر break. حالة خروج select هي حالة خروج آخر أمر نُفذ في القائمة، أو صفر إذا لم تُنفذ أي أوامر.
- case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
- يقوم أمر case أولاً بتوسيع word، ويحاول مطابقتها مع كل pattern بدوره، بالانتقال من الأول إلى الأخير، باستخدام قواعد المطابقة الموضحة في قسم مطابقة الأنماط أدناه. قائمة الأنماط هي مجموعة من نمط واحد أو أكثر مفصولة بـ ، وينهي العامل ) قائمة الأنماط. يتم توسيع word باستخدام توسيع علامة المدة، وتوسيع المعاملات والمتغيرات، والتوسيع الحسابي، واستبدال الأوامر، واستبدال العمليات، وحذف الاقتباس. يتم توسيع كل pattern مفحوص باستخدام توسيع علامة المدة، وتوسيع المعاملات والمتغيرات، والتوسيع الحسابي، واستبدال الأوامر، واستبدال العمليات، وحذف الاقتباس. إذا فُعل خيار الصدفة nocasematch، تُجرى المطابقة دون مراعاة لحالة المحارف الأبجدية. البند (clause) هو قائمة أنماط و قائمة مرتبطة بها.
- عند العثور على مطابقة، ينفذ case القائمة المقابلة. إذا أنهى العامل ;; بند case، يكتمل أمر case بعد المطابقة الأولى. يؤدي استخدام ;& بدلاً من ;; إلى استمرار التنفيذ مع القائمة المرتبطة بقائمة الأنماط التالية. ويؤدي استخدام ;;& بدلاً من ;; إلى قيام الصدفة باختبار قائمة الأنماط التالية في العبارة، إن وُجدت، وتنفيذ أي قائمة مرتبطة إذا نجحت المطابقة، مع الاستمرار في تنفيذ عبارة case كما لو أن قائمة الأنماط لم تتطابق. حالة الخروج هي صفر إذا لم يتطابق أي نمط.
- خلاف ذلك، هي حالة خروج آخر أمر نُفذ في آخر قائمة نُفذت.
- if list; then list; [ elif list; then list; ] ... [ else list; ] fi
- تُنفيذ if list. إذا كانت حالة خروجها صفراً، تُنفذ then list. خلاف ذلك، تُنفذ كل elif list بدورها، وإذا كانت حالة خروجها صفراً، تُنفذ then list المقابلة ويكتمل الأمر. خلاف ذلك، تُنفذ else list، إن وُجدت. حالة الخروج هي حالة خروج آخر أمر نُفذ، أو صفر إذا لم يختبر أي شرط كصحيح.
- while list-1; do list-2; done
- until list-1; do list-2; done
- ينفذ أمر 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. يمكن استخدام الأمر المدمج wait لانتظار انتهاء العملية المشتركة.
بما أن العملية المشتركة تُنشأ كأمر غير متزامن، فإن الأمر coproc يعود دائماً بالنجاح. حالة العودة للعملية المشتركة هي حالة الخروج لـ الأمر.
تعريفات وظائف الصدفة¶
وظيفة الصدفة هي كائن يُستدعى مثل أمر بسيط وينفذ أمراً مركباً مع مجموعة جديدة من المعاملات الموضعية. تُصرح وظائف الصدفة على النحو التالي:
- اسم_الوظيفة () أمر-مركب [إعادة-توجيه]
- function اسم_الوظيفة [()] أمر-مركب [إعادة-توجيه]
- يُعرف هذا وظيفة تُسمى اسم_الوظيفة. الكلمة المحجوزة function اختيارية. إذا زُودت الكلمة المحجوزة function، تصبح الأقواس اختيارية. متن الوظيفة هو الأمر المركب أمر-مركب (انظر الأوامر المركبة أعلاه). هذا الأمر عادة ما يكون قائمة من الأوامر بين { و }، ولكن يمكن أن يكون أي أمر مدرج تحت الأوامر المركبة أعلاه. إذا استُخدمت الكلمة المحجوزة function ولم تُزود الأقواس، فيوصى باستخدام الأقواس المعقوفة. يُنفذ أمر-مركب كلما حُدد اسم_الوظيفة كاسم لأمر بسيط. عند التواجد في وضع posix، يجب أن يكون اسم_الوظيفة اسماً صالحاً للصدفة وألا يكون اسم أحد الأوامر المدمجة الخاصة لـ POSIX يمكن أن يكون اسم الوظيفة أي كلمة صدفة غير مقتبسة لا تحتوي على $.
أي عمليات إعادة توجيه (انظر إعادة_التوجيه أدناه) تُحدد عند تعريف الوظيفة تُنفذ عند تنفيذ الوظيفة.
حالة الخروج لتعريف الوظيفة هي صفر ما لم يحدث خطأ في بناء الجملة أو كانت هناك وظيفة للقراءة فقط بنفس الاسم موجودة بالفعل. عند التنفيذ، تكون حالة الخروج للوظيفة هي حالة الخروج لآخر أمر نُفذ في المتن. (انظر الوظائف أدناه.)
تعليقات¶
في الصدفة غير التفاعلية، أو الصدفة التفاعلية التي تم فيها تمكين خيار interactive_comments للأمر المدمج shopt (انظر أوامر الصدفة المدمجة أدناه)، فإن الكلمة التي تبدأ بـ # تقدم تعليقاً. تبدأ الكلمة في بداية السطر، أو بعد مسافة بيضاء غير مقتبسة، أو بعد معامل. يتسبب التعليق في تجاهل تلك الكلمة وجميع الأحرف المتبقية في ذلك السطر. الصدفة التفاعلية التي لا يتوفر فيها خيار interactive_comments لا تسمح بالتعليقات. يُمكن خيار interactive_comments مبدئياً في الصدفات التفاعلية.
الاقتباس¶
يُستخدم الاقتباس لإزالة المعنى الخاص لأحرف أو كلمات معينة بالنسبة للصدفة. يمكن استخدام الاقتباس لتعطيل المعاملة الخاصة للأحرف الخاصة، ولمنع التعرف على الكلمات المحجوزة ككلمات محجوزة، ولمنع توسيع المعاملات.
كل من الأحرف الوصفية المدرجة أعلاه تحت التعريفات له معنى خاص للصدفة ويجب اقتباسه إذا كان ليمثل نفسه.
عند استخدام تسهيلات توسيع تاريخ الأوامر (انظر توسيع التاريخ أدناه)، يجب اقتباس حرف توسيع التاريخ، وهو عادةً !، لمنع توسيع التاريخ.
هناك أربع آليات للاقتباس: حرف الهروب، وعلامات الاقتباس المفردة، وعلامات الاقتباس المزدوجة، وعلامات الاقتباس المفردة المسبوقة بعلامة الدولار.
الشرطة المائلة الخلفية غير المقتبسة (\) هي حرف الهروب. وهي تحافظ على القيمة الحرفية للحرف التالي الذي يليها، مزيلة أي معنى خاص له، باستثناء <سطر جديد>. إذا ظهر زوج \<سطر جديد>، ولم تكن الشرطة المائلة الخلفية نفسها مقتبسة، فيُعامل زوج \<سطر جديد> كاستمرار للسطر (أي يُزال من دفق الإدخال ويُتجاهل فعلياً).
إحاطة الأحرف بعلامات اقتباس مفردة يحافظ على القيمة الحرفية لكل حرف داخل علامات الاقتباس. لا يجوز ظهور علامة اقتباس مفردة بين علامتي اقتباس مفردتين، حتى لو كانت مسبوقة بشرطة مائلة خلفية.
إحاطة الأحرف بعلامات اقتباس مزدوجة يحافظ على القيمة الحرفية لجميع الأحرف داخل علامات الاقتباس، باستثناء $، و `، و \، وعند تمكين توسيع التاريخ، !. عندما تكون الصدفة في وضع posix، لا يكون لـ ! أي معنى خاص داخل علامات الاقتباس المزدوجة، حتى عند تمكين توسيع التاريخ. تحتفظ الأحرف $ و ` بمعناها الخاص داخل علامات الاقتباس المزدوجة. تحتفظ الشرطة المائلة الخلفية بمعناها الخاص فقط عندما يتبعها أحد الأحرف التالية: $، أو `، أو "، أو \، أو <سطر جديد>. وتُترك الشرطة المائلة الخلفية التي تسبق أحرفاً ليس لها معنى خاص دون تعديل.
يمكن اقتباس علامة اقتباس مزدوجة داخل علامات اقتباس مزدوجة بسبقها بشرطة مائلة خلفية. إذا كان ممكناً، سيُجرى توسيع التاريخ ما لم يهرب ! الذي يظهر في علامات الاقتباس المزدوجة باستخدام شرطة مائلة خلفية. لا تُزال الشرطة المائلة الخلفية التي تسبق !.
المعاملات الخاصة * و @ لها معنى خاص عندما تكون داخل علامات اقتباس مزدوجة (انظر المعاملات أدناه).
تُعامل تسلسلات الأحرف من الصيغة $'سلسلة' كمتغير خاص لعلامات الاقتباس المفردة. يتوسع التسلسل إلى سلسلة، مع استبدال الأحرف المهربة بشرطة مائلة خلفية في سلسلة كما هو محدد في معيار ANSI C. وتُفك ترميز تسلسلات هروب الشرطة المائلة الخلفية، إن وجدت، كما يلي:
- \a
- تنبيه (جرس)
- \b
- backspace
- \e
- \E
- محرف هروب
- \f
- تغذية الصفحة
- \n
- سطر جديد
- \r
- رجوع العربة
- \t
- جدولة أفقية
- \v
- علامة جدولة عمودية
- \\
- backslash
- \'
- علامة اقتباس مفردة
- \"
- علامة اقتباس مزدوجة
- \?
- علامة استفهام
- \nnn
- حرف الثمانية بتات الذي قيمته هي القيمة الثمانية nnn (من رقم واحد إلى ثلاثة أرقام ثمانية).
- \xHH
- المحرف المكون من ثمانية بتات والذي قيمته هي القيمة الست عشرية HH (رقم أو رقمان ست عشريان).
- \uHHHH
- محرف يونيكود (ISO/IEC 10646) الذي قيمته هي القيمة الست عشرية HHHH (من رقم واحد إلى أربعة أرقام ست عشرية).
- \UHHHHHHHH
- محرف يونيكود (ISO/IEC 10646) الذي قيمته هي القيمة الست عشرية HHHHHHHH (من رقم واحد إلى ثمانية أرقام ست عشرية).
- \cx
- حرف تحكم-x.
توضع النتيجة الموسعة بين علامتي اقتباس مفردتين، كما لو أن علامة الدولار لم تكن موجودة.
ترجمة السلاسل¶
تؤدي السلسلة المقتبسة اقتباساً مزدوجاً والمسبوقة بعلامة دولار ($"سلسلة") إلى ترجمة السلسلة وفقاً للمحلية الحالية. تقوم البنية التحتية لـ gettext بعملية البحث والترجمة، باستخدام متغيرات الصدفة LC_MESSAGES و TEXTDOMAINDIR و TEXTDOMAIN. إذا كانت المحلية الحالية هي C أو POSIX، أو إذا لم تكن هناك ترجمات متاحة، أو إذا لم تُترجم السلسلة، تُتجاهل علامة الدولار، وتُعامل السلسلة على أنها مقتبسة اقتباساً مزدوجاً كما هو موضح أعلاه. هذا شكل من أشكال الاقتباس المزدوج، لذا تظل السلسلة مقتبسة اقتباساً مزدوجاً مبدئياً، سواء تُرجمت واستُبدلت أم لا. إذا تم تمكين خيار noexpand_translation باستخدام الأمر المدمج shopt، فإن السلاسل المترجمة تُقتبس اقتباساً مفرداً بدلاً من الاقتباس المزدوج. انظر وصف shopt أدناه تحت أوامر الصدفة المدمجة.
المعاملات¶
المعامل هو كيان يخزن القيم. يمكن أن يكون اسماً أو رقماً أو أحد الأحرف الخاصة المدرجة أدناه تحت المعاملات الخاصة. المتغير هو معامل يُشار إليه بواسطة اسم. للمتغير قيمة وصفر أو أكثر من السمات. تُعين السمات باستخدام الأمر المدمج declare (انظر declare أدناه في أوامر الصدفة المدمجة). يعين الأمران المدمجان export و readonly سمات محددة.
يُعتبر المعامل مُعيناً إذا خُصصت له قيمة. السلسلة الفارغة هي قيمة صالحة. بمجرد تعيين متغير، لا يمكن إلغاء تعيينه إلا باستخدام الأمر المدمج unset (انظر أوامر الصدفة المدمجة أدناه).
يُعين المتغير باستخدام جملة من الصيغة
الاسم=[القيمة]
إذا لم تُعطَ القيمة، يُعين للمتغير السلسلة الفارغة. تخضع جميع القيم لتوسيع التلدة (tilde)، وتوسيع المعاملات والمتغيرات، واستبدال الأوامر، والتوسيع الحسابي، وإزالة الاقتباس (انظر التوسيع أدناه). إذا كانت سمة integer للمتغير مُعينة، فستُقيم القيمة كتعبير حسابي حتى لو لم يُستخدم توسيع $((...)) (انظر التوسيع الحسابي أدناه). لا يُجرى تقسيم الكلمات ولا توسيع مسار الملف. قد تظهر جمل التعيين أيضاً كوسائط للأوامر المدمجة alias، و declare، و typeset، و export، و readonly، و local (أوامر التصريح). عند التواجد في وضع posix، قد تظهر هذه الأوامر المدمجة في أمر بعد مثيل واحد أو أكثر من الأمر المدمج command وتحتفظ بخصائص جملة التعيين هذه.
في السياق الذي تقوم فيه جملة التعيين بتعيين قيمة لمتغير صدفة أو فهرس مصفوفة، فإن “+=” المعامل يلحق بالقيمة السابقة للمتغير أو يضيف إليها. يتضمن ذلك الوسائط لأوامر التصريح مثل declare التي تقبل جمل التعيين. عندما “+=” يُطبق على متغير عُينت له سمة integer، تُقيم كل من قيمة المتغير الحالية و القيمة كتعبيرات حسابية، ويُعين مجموع النتائج كقيمة للمتغير. القيمة الحالية عادة ما تكون ثابتاً صحيحاً، ولكن قد تكون تعبيراً. عندما “+=” يُطبق على متغير مصفوف باستخدام تعيين مركب (انظر المصفوفات أدناه)، لا تُلغى قيمة المتغير (كما يحدث عند استخدام “=”), وتُلحق القيم الجديدة بالمصفوفة بدءاً من واحد أكبر من الحد الأقصى لفهرس المصفوفة (للمصفوفات المفهرسة) أو تُضاف كأزواج مفتاح-قيمة إضافية في مصفوفة ترابطية. وعند تطبيقه على متغير ذي قيمة نصية، تُوسع القيمة وتُلحق بقيمة المتغير.
يمكن تعيين سمة nameref لمتغير باستخدام خيار -n للأوامر المدمجة declare أو local (انظر أوصاف declare و local أدناه) لإنشاء مرجع اسم، أو مرجع لمتغير آخر. يتيح ذلك التلاعب بالمتغيرات بشكل غير مباشر. كلما تمت الإشارة إلى متغير مرجع الاسم، أو التعيين له، أو إلغاء تعيينه، أو تعديل سماته (بخلاف استخدام أو تغيير سمة nameref نفسها)، تُنفذ العملية فعلياً على المتغير المحدد بواسطة قيمة متغير مرجع الاسم. يشيع استخدام مرجع الاسم داخل وظائف الصدفة للإشارة إلى متغير مُرر اسمه كوسيط للوظيفة. على سبيل المثال، إذا مُرر اسم متغير إلى وظيفة صدفة كوسيط أول لها، فإن تشغيل
declare -n ref=$1
داخل الوظيفة ينشئ متغيراً محلياً لمرجع الاسم ref قيمته هي اسم المتغير المُرر كوسيط أول. تُعامل المراجع والتعيينات لـ ref، والتغييرات في سماته، كمراجع وتعيينات وتعديلات للسمات للمتغير الذي مُرر اسمه كـ $1. إذا كان لمتغير التحكم في حلقة for سمة مرجع الاسم، يمكن أن تكون قائمة الكلمات قائمة بمتغيرات الصدفة، ويُنشأ مرجع اسم لكل كلمة في القائمة بالترتيب عند تنفيذ الحلقة. لا يمكن منح متغيرات المصفوفة سمة nameref. ومع ذلك، يمكن لمتغيرات مرجع الاسم الإشارة إلى متغيرات المصفوفة ومتغيرات المصفوفة المفهرسة. يمكن إلغاء تعيين مراجع الأسماء باستخدام الخيار -n للأمر المدمج unset. بخلاف ذلك، إذا نُفذ unset مع اسم متغير مرجع الاسم كوسيط، فسيُلغى تعيين المتغير الذي يشير إليه متغير مرجع الاسم.
عندما تبدأ الصدفة، تقرأ بيئتها وتنشئ متغير صدفة من كل متغير بيئة له اسم صالح، كما هو موضح أدناه (انظر البيئة).
المعاملات الموضعية¶
المعامل الموضعي هو معامل يُشار إليه برقم واحد أو أكثر، بخلاف الرقم المنفرد 0. تُعين المعاملات الموضعية من وسائط الصدفة عند استدعائها، وقد يُعاد تعيينها باستخدام الأمر المدمج set. لا يجوز التعيين للمعاملات الموضعية باستخدام جمل التعيين. تُستبدل المعاملات الموضعية مؤقتاً عند تنفيذ وظيفة صدفة (انظر الوظائف أدناه).
عند توسيع معامل موضعي يتكون من أكثر من رقم واحد، يجب إحاطته بأقواس معقوفة (انظر التوسيع أدناه). بدون الأقواس، لا يمكن للرقم الذي يلي $ إلا أن يشير إلى أحد المعاملات الموضعية التسعة الأولى ($1-$9) أو المعامل الخاص $0 (انظر القسم التالي).
المعاملات الخاصة¶
تعامل الصدفة عدة معاملات بشكل خاص. يمكن الإشارة إلى هذه المعاملات فقط؛ ولا يُسمح بالتعيين لها. يُشار إلى المعاملات الخاصة بأحد الأحرف التالية.
- *
- ($*) يتوسع إلى المعاملات الموضعية، بدءاً من واحد. عندما لا يكون التوسيع داخل علامات اقتباس مزدوجة، يتوسع كل معامل موضعي إلى كلمة منفصلة. في السياقات التي تُجرى فيها توسعات الكلمات، تخضع تلك الكلمات لمزيد من تقسيم الكلمات وتوسيع مسار الملف. عندما يحدث التوسيع داخل علامات اقتباس مزدوجة، فإنه يتوسع إلى كلمة واحدة مع فصل قيمة كل معامل بواسطة الحرف الأول من متغير IFS. أي أن "$*" يعادل "$1c$2c..."، حيث c هو الحرف الأول من قيمة متغير IFS. إذا لم يُعين IFS، تُفصل المعاملات بمسافات. إذا كان IFS فارغاً، تُدمج المعاملات بدون فواصل بينها.
- @
- ($@) يتوسع إلى المعاملات الموضعية، بدءاً من واحد. في السياقات التي يُجرى فيها تقسيم الكلمات، يوسع هذا كل معامل موضعي إلى كلمة منفصلة؛ وإذا لم يكن داخل علامات اقتباس مزدوجة، تخضع هذه الكلمات لتقسيم الكلمات. في السياقات التي لا يُجرى فيها تقسيم الكلمات، مثل جزء القيمة في جملة التعيين، يتوسع هذا إلى كلمة واحدة مع فصل كل معامل موضعي بمسافة. عندما يحدث التوسيع داخل علامات اقتباس مزدوجة، ويُجرى تقسيم الكلمات، يتوسع كل معامل إلى كلمة منفصلة. أي أن "$@" يعادل "$1" "$2" ... إذا حدث التوسيع المقتبس اقتباساً مزدوجاً داخل كلمة، يُدمج توسيع المعامل الأول مع توسيع الجزء الأول من الكلمة الأصلية، ويُدمج توسيع المعامل الأخير مع توسيع الجزء الأخير من الكلمة الأصلية. عندما لا توجد معاملات موضعية، يتوسع "$@" و $@ إلى لا شيء (أي يُزالان).
- #
- ($#) يتوسع إلى عدد المعاملات الموضعية بالنظام العشري.
- ?
- ($?) يتوسع إلى حالة الخروج لآخر أمر نُفذ.
- -
- ($-) يتوسع إلى أعلام الخيارات الحالية كما هي محددة عند الاستدعاء، أو بواسطة الأمر المدمج set، أو تلك التي عينتها الصدفة نفسها (مثل الخيار -i).
- $
- ($$) يتوسع إلى معرف العملية للصدفة. في الصدفة الفرعية، يتوسع إلى معرف العملية للصدفة الأب، وليس للصدفة الفرعية.
- !
- ($!) يتوسع إلى معرف العملية لآخر مهمة وُضعت في الخلفية، سواء نُفذت كأمر غير متزامن أو باستخدام الأمر المدمج bg (انظر التحكم في المهام أدناه).
- 0
- ($0) يتوسع إلى اسم الصدفة أو سكربت الصدفة. يُعين هذا عند تهيئة الصدفة. إذا استُدعي bash مع ملف من الأوامر، يُعين $0 باسم ذلك الملف. إذا بُدئ bash بالخيار -c، فسيُعين $0 بأول وسيط بعد السلسلة المراد تنفيذها، في حال وجوده. بخلاف ذلك، يُعين باسم الملف المستخدم لاستدعاء bash، كما هو معطى في الوسيط صفر.
متغيرات الصدفة¶
تعين الصدفة المتغيرات التالية:
- _
- ($_، شرطة سفلية) لها عدة معانٍ حسب السياق. عند بدء تشغيل الصدفة، يُعين _ بمسار الملف المستخدم لاستدعاء الصدفة أو سكربت الصدفة الذي يجري تنفيذه كما هو ممرر في البيئة أو قائمة الوسائط. لاحقاً، يتوسع إلى آخر وسيط للأمر البسيط السابق الذي نُفذ في الواجهة، بعد التوسيع. كما يُعين أيضاً بالمسار الكامل المستخدم لاستدعاء كل أمر مُنفذ ويُوضع في البيئة المصدرة لذلك الأمر. عند التحقق من البريد، يتوسع $_ إلى اسم ملف البريد الذي يجري التحقق منه حالياً.
- BASH
- يتوسع إلى اسم الملف الكامل المستخدم لاستدعاء نسخة bash هذه.
- BASHOPTS
- قائمة مفصولة بنقطتين لخيارات الصدفة الممكنة. كل كلمة في القائمة هي وسيط صالح للخيار -s للأمر المدمج shopt (انظر أوامر الصدفة المدمجة أدناه). الخيارات التي تظهر في BASHOPTS هي تلك التي يبلغ shopt أنها تعمل. إذا كان هذا المتغير موجوداً في البيئة عند بدء تشغيل bash، ستمكن الصدفة كل خيار في القائمة قبل قراءة أي ملفات بدء تشغيل. إذا صُدر هذا المتغير، ستمكن الصدفات الابنة كل خيار في القائمة. هذا المتغير للقراءة فقط.
- BASHPID
- يتوسع إلى معرف العملية لعملية bash الحالية. يختلف هذا عن $$ في ظروف معينة، مثل الصدفات الفرعية التي لا تتطلب إعادة تهيئة bash. لا تأثير لعمليات التعيين لـ BASHPID. إذا أُلغي تعيين BASHPID، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقاً.
- BASH_ALIASES
- متغير مصفوفة ترابطية تتوافق عناصرها مع القائمة الداخلية للأسماء المستعارة كما يحافظ عليها الأمر المدمج alias. تظهر العناصر المضافة إلى هذه المصفوفة في قائمة الأسماء المستعارة؛ ومع ذلك، فإن إلغاء تعيين عناصر المصفوفة حالياً لا يزيل الأسماء المستعارة من قائمة الأسماء المستعارة. إذا أُلغي تعيين BASH_ALIASES، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقاً.
- BASH_ARGC
- متغير مصفوفة قيمها هي عدد المعاملات في كل إطار من مكدس استدعاءات تنفيذ bash الحالي. يكون عدد المعاملات للروتين الفرعي الحالي (وظيفة صدفة أو سكربت مُنفذ بـ . أو source) في قمة المكدس. عند تنفيذ روتين فرعي، يُدفع عدد المعاملات الممررة إلى BASH_ARGC. تعين الصدفة BASH_ARGC فقط عندما تكون في وضع التنقيح الموسع (انظر وصف خيار extdebug للأمر المدمج shopt أدناه). قد يؤدي تعيين extdebug بعد أن تبدأ الصدفة في تنفيذ سكربت، أو الإشارة إلى هذا المتغير عندما لا يكون extdebug معيناً، إلى قيم غير متسقة. لا تأثير لعمليات التعيين لـ BASH_ARGC، ولا يجوز إلغاء تعيينه.
- BASH_ARGV
- متغير مصفوفة يحتوي على جميع المعاملات في مكدس استدعاءات تنفيذ bash الحالي. المعامل النهائي لآخر استدعاء روتين فرعي يكون في قمة المكدس؛ والمعامل الأول للاستدعاء الأولي يكون في القاع. عند تنفيذ روتين فرعي، تدفع الصدفة المعاملات المزودة إلى BASH_ARGV. تعين الصدفة BASH_ARGV فقط عندما تكون في وضع التنقيح الموسع (انظر وصف خيار extdebug للأمر المدمج shopt أدناه). قد يؤدي تعيين extdebug بعد أن تبدأ الصدفة في تنفيذ سكربت، أو الإشارة إلى هذا المتغير عندما لا يكون extdebug معيناً، إلى قيم غير متسقة. لا تأثير لعمليات التعيين لـ BASH_ARGV، ولا يجوز إلغاء تعيينه.
- BASH_ARGV0
- عند الإشارة إليه، يتوسع هذا المتغير إلى اسم الصدفة أو سكربت الصدفة (مطابق لـ $0؛ انظر وصف المعامل الخاص 0 أعلاه). تعيين قيمة لـ BASH_ARGV0 يعين $0 لنفس القيمة. إذا أُلغي تعيين BASH_ARGV0، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقاً.
- BASH_CMDS
- متغير مصفوفة ترابطية تتوافق عناصرها مع جدول التلبيد (hash) الداخلي للأوامر كما يحافظ عليه الأمر المدمج hash. تؤدي إضافة عناصر إلى هذه المصفوفة إلى ظهورها في جدول التلبيد؛ ومع ذلك، فإن إلغاء تعيين عناصر المصفوفة حالياً لا يزيل أسماء الأوامر من جدول التلبيد. إذا أُلغي تعيين BASH_CMDS، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقاً.
- BASH_COMMAND
- يتوسع إلى الأمر الذي يجري تنفيذه حالياً أو على وشك التنفيذ، ما لم تكن الصدفة تنفذ أمراً نتيجة لفخ (trap)، وفي هذه الحالة يكون هو الأمر الذي كان يُنفذ وقت الفخ. إذا أُلغي تعيين BASH_COMMAND، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقاً.
- BASH_EXECUTION_STRING
- وسيط الأمر لخيار الاستدعاء -c.
- BASH_LINENO
- متغير مصفوفة عناصره هي أرقام الأسطر في ملفات المصدر حيث تم استدعاء كل عنصر مقابل من FUNCNAME. ${BASH_LINENO[$i]} هو رقم السطر في ملف المصدر (${BASH_SOURCE[$i+1]}) حيث استُدعيت ${FUNCNAME[$i]} (أو ${BASH_LINENO[$i-1]} إذا تمت الإشارة إليها داخل وظيفة صدفة أخرى). استخدم LINENO للحصول على رقم السطر الحالي. لا تأثير لعمليات التعيين لـ BASH_LINENO، ولا يجوز إلغاء تعيينه.
- BASH_LOADABLES_PATH
- قائمة مفصولة بنقطتين للأدلة التي يبحث فيها الأمر enable عن الأوامر المدمجة القابلة للتحميل ديناميكياً.
- BASH_MONOSECONDS
- في كل مرة يُشار فيها إلى هذا المتغير، فإنه يتوسع إلى القيمة التي تعيدها الساعة الرتيبة (monotonic clock) للنظام، إن وجدت. إذا لم تكن هناك ساعة رتيبة، فإن هذا يعادل EPOCHSECONDS. إذا أُلغي تعيين BASH_MONOSECONDS، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقاً.
- BASH_REMATCH
- متغير مصفوفة تُعين عناصرها بواسطة المعامل الثنائي =~ للأمر الشرطي [[. العنصر ذو الفهرس 0 هو جزء السلسلة الذي يطابق التعبير النمطي بأكمله. العنصر ذو الفهرس n هو جزء السلسلة الذي يطابق التعبير الفرعي المحصور بين أقواس ذي الرقم n.
- BASH_SOURCE
- متغير مصفوفة عناصره هي أسماء ملفات المصدر حيث عُرفت أسماء وظائف الصدفة المقابلة في متغير مصفوفة FUNCNAME. وظيفة الصدفة ${FUNCNAME[$i]} مُعرفة في الملف ${BASH_SOURCE[$i]} واستُدعيت من ${BASH_SOURCE[$i+1]}. لا تأثير لعمليات التعيين لـ BASH_SOURCE، ولا يجوز إلغاء تعيينه.
- BASH_SUBSHELL
- يزداد بمقدار واحد داخل كل صدفة فرعية أو بيئة صدفة فرعية عندما تبدأ الصدفة في التنفيذ في تلك البيئة. القيمة الأولية هي 0. إذا أُلغي تعيين BASH_SUBSHELL، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقاً.
- BASH_TRAPSIG
- يُعين برقم الإشارة المقابل لإجراء الفخ (trap) الذي يجري تنفيذه أثناء تنفيذه. انظر وصف trap تحت أوامر الصدفة المدمجة أدناه للحصول على معلومات حول أرقام الإشارات وتنفيذ الفخ.
- BASH_VERSINFO
- متغير مصفوفة للقراءة فقط تحمل عناصره معلومات الإصدار لنسخة bash هذه. القيم المعينة لعناصر المصفوفة هي كما يلي:
- BASH_VERSINFO[0]
- رقم الإصدار الرئيس (release).
- BASH_VERSINFO[1]
- رقم الإصدار الفرعي (version).
- BASH_VERSINFO[2]
- مستوى الترقيع (patch level).
- BASH_VERSINFO[3]
- إصدار البناء.
- BASH_VERSINFO[4]
- حالة الإصدار (مثلاً، beta).
- BASH_VERSINFO[5]
- قيمة MACHTYPE.
- BASH_VERSION
- يتوسع إلى سلسلة تصف إصدار نسخة bash هذه (مثلاً، 5.2.37(3)-release).
- COMP_CWORD
- فهرس داخل ${COMP_WORDS} للكلمة التي تحتوي على موضع المؤشر الحالي. يتوفر هذا المتغير فقط في وظائف الصدفة المستدعاة بواسطة تسهيلات الإكمال القابلة للبرمجة (انظر الإكمال القابل للبرمجة أدناه).
- COMP_KEY
- المفتاح (أو المفتاح النهائي في تسلسل مفاتيح) المستخدم لاستدعاء وظيفة الإكمال الحالية. يتوفر هذا المتغير فقط في وظائف الصدفة والأوامر الخارجية المستدعاة بواسطة تسهيلات الإكمال القابلة للبرمجة (انظر الإكمال القابل للبرمجة أدناه).
- COMP_LINE
- سطر الأوامر الحالي. يتوفر هذا المتغير فقط في وظائف الصدفة والأوامر الخارجية المستدعاة بواسطة تسهيلات الإكمال القابلة للبرمجة (انظر الإكمال القابل للبرمجة أدناه).
- COMP_POINT
- فهرس موضع المؤشر الحالي بالنسبة لبداية الأمر الحالي. إذا كان موضع المؤشر الحالي في نهاية الأمر الحالي، فإن قيمة هذا المتغير تساوي ${#COMP_LINE}. يتوفر هذا المتغير فقط في وظائف الصدفة والأوامر الخارجية المستدعاة بواسطة تسهيلات الإكمال القابلة للبرمجة (انظر الإكمال القابل للبرمجة أدناه).
- COMP_TYPE
- يُعين بقيمة عددية تتوافق مع نوع محاولة الإكمال التي تسببت في استدعاء وظيفة إكمال: TAB، للإكمال العادي، أو ?، لسرد الإكمالات بعد ضغطات تاب متتالية، أو !، لسرد البدائل عند إكمال كلمة جزئية، أو @، لسرد الإكمالات إذا لم تكن الكلمة غير معدلة، أو %، لإكمال القائمة. يتوفر هذا المتغير فقط في وظائف الصدفة والأوامر الخارجية المستدعاة بواسطة تسهيلات الإكمال القابلة للبرمجة (انظر الإكمال القابل للبرمجة أدناه).
- COMP_WORDBREAKS
- مجموعة الأحرف التي تعاملها مكتبة readline كفواصل كلمات عند إجراء إكمال الكلمات. إذا أُلغي تعيين COMP_WORDBREAKS، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقاً.
- COMP_WORDS
- متغير مصفوفة (انظر المصفوفات أدناه) يتكون من الكلمات الفردية في سطر الأوامر الحالي. يُقسم السطر إلى كلمات كما تفعل readline، باستخدام COMP_WORDBREAKS كما هو موضح أعلاه. يتوفر هذا المتغير فقط في وظائف الصدفة المستدعاة بواسطة تسهيلات الإكمال القابلة للبرمجة (انظر الإكمال القابل للبرمجة أدناه).
- COPROC
- متغير مصفوفة (انظر المصفوفات أدناه) أُنشئ ليحمل واصفات الملفات للمخرجات من والمدخلات إلى عملية مشتركة غير مسماة (انظر العمليات المشتركة أعلاه).
- DIRSTACK
- متغير مصفوفة (انظر المصفوفات أدناه) يحتوي على المحتويات الحالية لمكدس الأدلة. تظهر الأدلة في المكدس بالترتيب الذي يعرضه الأمر المدمج dirs. يمكن استخدام التعيين لعناصر متغير المصفوفة هذا لتعديل الأدلة الموجودة بالفعل في المكدس، ولكن يجب استخدام الأمرين المدمجين pushd و popd لإضافة وإزالة الأدلة. التعيين لهذا المتغير لا يغير الدليل الحالي. إذا أُلغي تعيين DIRSTACK، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقاً.
- EPOCHREALTIME
- في كل مرة يُشار فيها إلى هذا المعامل، فإنه يتوسع إلى عدد الثواني منذ حقبة يونكس (انظر time(3)) كقيمة فاصلة عائمة بدقة ميكروثانية. تُتجاهل عمليات التعيين لـ EPOCHREALTIME. إذا أُلغي تعيين EPOCHREALTIME، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقاً.
- EPOCHSECONDS
- في كل مرة يُشار فيها إلى هذا المعامل، فإنه يتوسع إلى عدد الثواني منذ حقبة يونكس (انظر time(3)). تُتجاهل عمليات التعيين لـ EPOCHSECONDS. إذا أُلغي تعيين EPOCHSECONDS، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقاً.
- EUID
- يتوسع إلى معرف المستخدم الفعلي للمستخدم الحالي، ويُهيأ عند بدء تشغيل الصدفة. هذا المتغير للقراءة فقط.
- FUNCNAME
- متغير مصفوفة يحتوي على أسماء جميع وظائف الصدفة الموجودة حالياً في مكدس استدعاءات التنفيذ. العنصر ذو الفهرس 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. إذا أُلغي تعيين GROUPS، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقاً.
- HISTCMD
- رقم التأريخ، أو الفهرس في قائمة التأريخ، للأمر الحالي. لا تؤثر التعيينات في HISTCMD. إذا أُلغي تعيين HISTCMD، فإنها تفقد خصائصها الخاصة، حتى لو أُعيد تعيينها لاحقًا.
- HOSTNAME
- يُضبط آليًا إلى اسم المضيف الحالي.
- HOSTTYPE
- يُضبط آليًا إلى سلسلة تصف بشكل فريد نوع الجهاز الذي يشتغل عليه bash. القيمة المبدئية تعتمد على النظام.
- LINENO
- في كل مرة يُشار فيها إلى هذا المعامل، تستبدله الـ صدفة برقم عشري يمثل رقم السطر التسلسلي الحالي (بدءًا من 1) داخل سكربت أو دالة. عندما لا يكون في سكربت أو دالة، لا يُضمن أن تكون القيمة المستبدلة ذات معنى. إذا أُلغي تعيين LINENO، فإنها تفقد خصائصها الخاصة، حتى لو أُعيد تعيينها لاحقًا.
- MACHTYPE
- يُضبط آليًا إلى سلسلة تصف تمامًا نوع النظام الذي يشتغل عليه bash، بتنسيق cpu-company-system القياسي لـ GNU. القيمة المبدئية تعتمد على النظام.
- MAPFILE
- متغير مصفوفة (انظر Arrays أدناه) أُنشئ ليحوي النص المقروء بواسطة أمر mapfile المدمج عند عدم توفير اسم متغير.
- OLDPWD
- دليل العمل السابق كما عينه الأمر cd.
- OPTARG
- قيمة آخر معطى خيار عولج بواسطة أمر getopts المدمج (انظر أوامر الصدفة المدمجة أدناه).
- OPTIND
- فهرس المعطى التالي الذي سيُعالجه أمر getopts المدمج (انظر أوامر الصدفة المدمجة أدناه).
- OSTYPE
- يُضبط آليًا إلى سلسلة تصف نظام التشغيل الذي يشتغل عليه bash. القيمة المبدئية تعتمد على النظام.
- PIPESTATUS
- متغير مصفوفة (انظر Arrays أدناه) يحتوي على قائمة بقيم حالة الخروج من الأوامر في آخر أنبوب نفذ في الواجهة، والذي قد يتكون من أمر بسيط واحد فقط (انظر قواعد الصدفة أعلاه). يُعين bash المتغير PIPESTATUS بعد تنفيذ الأنابيب متعددة العناصر، والأنابيب الموقوتة والمنفية، والأوامر البسيطة، والصدفات الفرعية المنشأة باستخدام المعامل (، والأوامر المركبة [[ و ((، وبعد ظروف الخطأ التي تؤدي إلى إجهاض الـ صدفة لتنفيذ الأمر.
- PPID
- معرف عملية (PID) والد الـ صدفة. هذا المتغير للقراءة فقط.
- PWD
- دليل العمل الحالي كما عينه الأمر cd.
- RANDOM
- في كل مرة يُشار فيها إلى هذا المعامل، يتوسع إلى عدد صحيح عشوائي بين 0 و 32767. يؤدي تعيين قيمة لـ RANDOM إلى تهيئة (بذر) تسلسل الأعداد العشوائية. بذر مولد الأعداد العشوائية بنفس القيمة الثابتة ينتج نفس تسلسل القيم. إذا أُلغي تعيين RANDOM، فإنها تفقد خصائصها الخاصة، حتى لو أُعيد تعيينها لاحقًا.
- READLINE_ARGUMENT
- أي معطى عددي يُعطى لأمر readline عُرّف باستخدام “bind -x” (انظر أوامر الصدفة المدمجة أدناه) عند استدعائه.
- READLINE_LINE
- محتويات مخزن سطر readline المؤقت، للاستخدام مع “bind -x” (انظر أوامر الصدفة المدمجة أدناه).
- READLINE_MARK
- موضع الـ علامة (نقطة الإدراج المحفوظة) في مخزن سطر readline المؤقت، للاستخدام مع “bind -x” (انظر أوامر الصدفة المدمجة أدناه). غالبًا ما تسمى الأحرف بين نقطة الإدراج والـ علامة باسم المنطقة.
- READLINE_POINT
- موضع نقطة الإدراج في مخزن سطر readline المؤقت، للاستخدام مع “bind -x” (انظر أوامر الصدفة المدمجة أدناه).
- REPLY
- يُضبط على سطر المدخلات المقروء بواسطة أمر read المدمج عند عدم توفير أي معطيات.
- SECONDS
- في كل مرة يُشار فيها إلى هذا المعامل، فإنه يتوسع إلى عدد الثواني منذ استدعاء الـ صدفة. إذا عُينت قيمة لـ SECONDS، فإن القيمة المرجعة عند الإشارات اللاحقة هي عدد الثواني منذ التعيين زائد القيمة المعينة. يُحدد عدد الثواني عند استدعاء الـ صدفة والوقت الحالي دائمًا عن طريق الاستعلام من ساعة النظام بدقة ثانية واحدة. إذا أُلغي تعيين SECONDS، فإنها تفقد خصائصها الخاصة، حتى لو أُعيد تعيينها لاحقًا.
- SHELLOPTS
- قائمة مفصولة بنقطتين لخيارات الصدفة المفعّلة. كل كلمة في القائمة هي معامل صحيح للخيار -o الخاص بالأمر المدمج set (انظر أوامر الصدفة المدمجة أدناه). الخيارات التي تظهر في SHELLOPTS هي تلك التي يُبلّغ عنها بأنها on (مفعّلة) بواسطة set -o. إذا كان هذا المتغير موجودًا في البيئة عند بدء تشغيل bash، فستفعّل الصدفة كل خيار في القائمة قبل قراءة أي ملفات بدء تشغيل. إذا صُدّر هذا المتغير، فستفعّل الصدف الأبناء كل خيار في القائمة. هذا المتغير للقراءة فقط.
- SHLVL
- يُزاد بمقدار واحد في كل مرة يُبدأ فيها تشغيل نسخة من bash.
- SRANDOM
- في كل مرة يُشار إليه، يتوسع هذا المتغير إلى رقم عشوائي زائف بطول 32 بت. مولد الأرقام العشوائية ليس خطيًا على الأنظمة التي تدعم /dev/urandom أو arc4random(3)، لذا فإن كل رقم ناتج ليس له علاقة بالأرقام التي تسبقه. لا يمكن تزويد مولد الأرقام العشوائية ببذرة (seed)، لذا فإن عمليات التعيين لهذا المتغير ليس لها أي تأثير. إذا أُلغي تعيين SRANDOM، فإنه يفقد خصائصه الخاصة، حتى لو أُعيد تعيينه لاحقًا.
- UID
- يتوسع إلى معرّف المستخدم (user ID) للمستخدم الحالي، ويُهيّأ عند بدء تشغيل الصدفة. هذا المتغير للقراءة فقط.
تستخدم الصدفة المتغيرات التالية. في بعض الحالات، يُعيّن bash قيمة مبدئية لمتغير ما؛ وتُذكر هذه الحالات أدناه.
- BASH_COMPAT
- تُستخدم القيمة لضبط مستوى توافق الصدفة. انظر نمط توافق الصدفة أدناه للحصول على وصف لمستويات التوافق المختلفة وآثارها. قد تكون القيمة رقمًا عشريًا (مثل 4.2) أو عددًا صحيحًا (مثل 42) يقابل مستوى التوافق المطلوب. إذا أُلغي تعيين BASH_COMPAT أو عُيّن كسلسلة فارغة، فسيُضبط مستوى التوافق على القيمة المبدئية للإصدار الحالي. إذا عُيّن BASH_COMPAT على قيمة ليست من مستويات التوافق الصالحة، فستطبع الصدفة رسالة خطأ وتضبط مستوى التوافق على القيمة المبدئية للإصدار الحالي. تتوافق مجموعة فرعية من القيم الصالحة مع مستويات التوافق الموصوفة أدناه ضمن نمط توافق الصدفة. على سبيل المثال، 4.2 و 42 هي قيم صالحة تقابل خيار shopt المسمى compat42 وتضبط مستوى التوافق على 42. الإصدار الحالي هو أيضًا قيمة صالحة.
- BASH_ENV
- إذا عُيّنت هذه المعلمة عندما ينفذ bash سكربت صدفة، فستُفسر قيمتها الموسعة كاسم ملف يحتوي على أوامر لتهيئة الصدفة قبل قراءة وتنفيذ الأوامر من السكربت. تخضع قيمة BASH_ENV لتوسيع المعلمات، واستبدال الأوامر، والتوسيع الحسابي قبل تفسيرها كاسم ملف. لا يُستخدم PATH للبحث عن اسم الملف الناتج.
- BASH_XTRACEFD
- إذا عُيّن إلى عدد صحيح يقابل واصف ملف صالح، فسيكتب bash مخرجات التتبع المولدة عندما “set -x” يُفعّل إلى واصف الملف هذا، بدلاً من الخطأ القياسي. يُغلق واصف الملف عند إلغاء تعيين BASH_XTRACEFD أو تعيين قيمة جديدة له. يؤدي إلغاء تعيين BASH_XTRACEFD أو تعيينه كسلسلة فارغة إلى إرسال مخرجات التتبع إلى الخطأ القياسي. لاحظ أن تعيين BASH_XTRACEFD على 2 (واصف ملف الخطأ القياسي) ثم إلغاء تعيينه سيؤدي إلى إغلاق الخطأ القياسي.
- CDPATH
- مسار البحث للأمر cd. هذا عبارة عن قائمة مفصولة بنقطتين من المجلدات حيث تبحث الصدفة عن المجلدات المحددة كمعاملات للأمر cd. قيمة عينة هي “.:~:/usr”.
- CHILD_MAX
- يضبط عدد قيم حالة الأبناء المنتهية التي يجب أن تتذكرها الصدفة. لن يسمح Bash بتقليل هذه القيمة عن الحد الأدنى الذي يفرضه POSIX ، وهناك قيمة قصوى (حالياً 8192) لا يجوز تجاوزها. الحد الأدنى يعتمد على النظام.
- COLUMNS
- يستخدمه الأمر المركب select لتحديد عرض الطرفية عند طباعة قوائم الاختيار. يُضبط آليًا إذا فُعّل خيار checkwinsize أو في صدفة تفاعلية عند استلام SIGWINCH.
- COMPREPLY
- متغير مصفوفة يقرأ منه bash عمليات الإكمال الممكنة التي ولدتها دالة صدفة استدعتها ميزة الإكمال القابلة للبرمجة (انظر الإكمال القابل للبرمجة أدناه). يحتوي كل عنصر في المصفوفة على إكمال واحد ممكن.
- EMACS
- إذا وجد bash هذا المتغير في البيئة عند بدء تشغيل الصدفة بالقيمة “t”, فإنه يفترض أن الصدفة تعمل في مخزن مؤقت لصدفة Emacs ويعطل تحرير السطور.
- ENV
- يُوسع ويُنفذ بشكل مشابه لـ BASH_ENV (انظر الاستدعاء أعلاه) عند استدعاء صدفة تفاعلية في نمط posix.
- EXECIGNORE
- قائمة مفصولة بنقطتين من أنماط الصدفة (انظر مطابقة الأنماط) التي تحدد مجموعة أسماء الملفات التي يجب تجاهلها عند البحث عن الأوامر باستخدام PATH. الملفات التي تطابق مساراتها الكاملة أحد هذه الأنماط لا تُعتبر ملفات قابلة للتنفيذ لأغراض الإكمال وتنفيذ الأوامر عبر البحث في PATH. هذا لا يؤثر على سلوك الأوامر [ و test و [[. لا تخضع المسارات الكاملة في جدول هاش الأوامر لـ EXECIGNORE. استخدم هذا المتغير لتجاهل ملفات المكتبات المشتركة التي تم ضبط بت التنفيذ لها، ولكنها ليست ملفات قابلة للتنفيذ. تحترم مطابقة الأنماط إعداد خيار الصدفة extglob.
- FCEDIT
- المحرر المبدئي للأمر المدمج fc.
- FIGNORE
- قائمة مفصولة بنقطتين من اللاحقات التي يجب تجاهلها عند إجراء إكمال أسماء الملفات (انظر READLINE أدناه). يُستبعد اسم الملف الذي تطابق لاحقته أحد المدخلات في FIGNORE من قائمة أسماء الملفات المطابقة. قيمة عينة هي “.o:~” (الاقتباس مطلوب عند تعيين قيمة لهذا المتغير، والذي يحتوي على علامات مدة ~).
- FUNCNEST
- إذا ضُبط على قيمة عددية أكبر من 0، فإنه يحدد أقصى مستوى لتعشيش الدوال. استدعاءات الدوال التي تتجاوز مستوى التعشيش هذا تؤدي إلى إجهاض الأمر الحالي.
- GLOBIGNORE
- قائمة مفصولة بنقطتين من الأنماط التي تحدد مجموعة أسماء الملفات التي يجب تجاهلها عند توسيع مسار الملف. إذا كان اسم الملف المطابق لنمط توسيع المسار يطابق أيضًا أحد الأنماط في GLOBIGNORE، فسيُحذف من قائمة المطابقات. تحترم مطابقة الأنماط إعداد خيار الصدفة extglob.
- GLOBSORT
- يتحكم في كيفية فرز نتائج توسيع مسار الملف. تحدد قيمة هذا المتغير معايير الفرز وترتيبه لنتائج توسيع مسار الملف. إذا كان هذا المتغير غير معين أو معين كسلسلة فارغة، فإن توسيع مسار الملف يستخدم السلوك التاريخي للفرز حسب الاسم، بترتيب معجمي تصاعدي كما يحدده متغير الصدفة LC_COLLATE.
- إذا ضُبط، تبدأ القيمة الصالحة بعلامة + اختيارية (تُتجاهل)، أو - التي تعكس ترتيب الفرز من تصاعدي إلى تنازلي، متبوعة بمحدد فرز. محددات الفرز الصالحة هي name و numeric و size و mtime و atime و ctime و blocks، والتي تفرز الملفات حسب الاسم، والأسماء بترتيب عددي بدلاً من المعجمي، وحجم الملف، ووقت التعديل، ووقت الوصول، ووقت تغيير inode، وعدد الكتل، على التوالي. إذا تساوت أي من المفاتيح غير الاسمية (مثل تساوي حجم ملفين)، فسيُستخدم الاسم كمفتاح فرز ثانوي.
- على سبيل المثال، القيمة -mtime تفرز النتائج بترتيب تنازلي حسب وقت التعديل (الأحدث أولاً).
- يعامل المحدد numeric الأسماء المكونة من أرقام فقط كأرقام ويفرزها باستخدام قيمتها العددية (لذا فإن “2” تُفرز قبل “10”, على سبيل المثال). عند استخدام numeric، تُفرز الأسماء التي تحتوي على غير الأرقام بعد جميع الأسماء المكونة من أرقام فقط، وتُفرز حسب الاسم باستخدام السلوك التقليدي.
- يؤدي محدد الفرز nosort إلى تعطيل الفرز تماماً؛ حيث يعيد bash النتائج بالترتيب الذي قُرئت به من نظام الملفات، متجاهلاً أي علامة - في البداية.
- إذا كان محدد الفرز مفقوداً، فإنه يُفترض كونه name مبدئياً، لذا فإن القيمة + تعادل السلسلة الفارغة، والقيمة - تفرز حسب الاسم بترتيب تنازلي. أي قيمة غير صالحة تستعيد سلوك الفرز التاريخي.
- HISTCONTROL
- قائمة مفصولة بنقطتين من القيم التي تتحكم في كيفية حفظ الأوامر في قائمة التاريخ. إذا تضمنت قائمة القيم ignorespace، فلن تُحفظ السطور التي تبدأ بمسافة (space) في قائمة التاريخ. وتؤدي القيمة ignoredups إلى عدم حفظ السطور المطابقة لمدخل التاريخ السابق. القيمة ignoreboth هي اختصار لـ ignorespace و ignoredups. وتؤدي القيمة erasedups إلى حذف جميع السطور السابقة المطابقة للسطر الحالي من قائمة التاريخ قبل حفظ هذا السطر. تُتجاهل أي قيمة ليست في القائمة أعلاه. إذا كان HISTCONTROL غير معين، أو لا يتضمن قيمة صالحة، فسيحفظ bash جميع السطور التي يقرأها محلل الصدفة في قائمة التاريخ، مع مراعاة قيمة HISTIGNORE. إذا حُفظ السطر الأول من أمر مركب متعدد الأسطر، فلن تُختبر الأسطر الثانية واللاحقة، وتُضاف إلى التاريخ بغض النظر عن قيمة HISTCONTROL. وإذا لم يُحفظ السطر الأول، فلن تُحفظ الأسطر الثانية واللاحقة من الأمر أيضًا.
- HISTFILE
- اسم الملف الذي يُحفظ فيه تأريخ الأوامر (انظر التأريخ أدناه). يُعين Bash قيمة مبدئية هي ~/.bash_history. إذا أُلغي تعيين HISTFILE أو كانت فارغة، فلن تحفظ الـ صدفة تأريخ الأوامر عند خروجها.
- HISTFILESIZE
- الحد الأقصى لعدد الأسطر التي يحتوي عليها ملف التأريخ. عند تعيين قيمة لهذا المتغير، يتم اقتطاع ملف التأريخ، إذا لزم الأمر، ليحتوي على ما لا يزيد عن عدد مدخلات التأريخ التي لا يتجاوز مجموعها ذلك العدد من الأسطر عن طريق إزالة أقدم المدخلات. إذا كانت قائمة التأريخ تحتوي على مدخلات متعددة الأسطر، فقد يحتوي ملف التأريخ على أسطر أكثر من هذا الحد الأقصى لتجنب ترك مدخلات تأريخ جزئية. يتم أيضًا اقتطاع ملف التأريخ إلى هذا الحجم بعد كتابته عند خروج صدفة أو بواسطة أمر history المدمج. إذا كانت القيمة 0، يتم اقتطاع ملف التأريخ إلى حجم صفر. القيم غير العددية والقيم العددية الأقل من الصفر تمنع الاقتطاع. تضبط الـ صدفة القيمة المبدئية على قيمة HISTSIZE بعد قراءة أي ملفات بدء تشغيل.
- HISTIGNORE
- قائمة مفصولة بنقطتين من الأنماط المستخدمة لتحديد أي أسطر الأوامر يجب حفظها في قائمة التأريخ. إذا طابق سطر الأوامر أحد الأنماط في قيمة HISTIGNORE، فلن يُحفظ في قائمة التأريخ. كل نمط مثبت في بداية السطر ويجب أن يطابق السطر بالكامل (لا يلحق bash ضمنيًا “*”). يُختبر كل نمط مقابل السطر بعد تطبيق الفحوصات المحددة بواسطة HISTCONTROL. بالإضافة إلى أحرف مطابقة أنماط الـ صدفة العادية، “&” يطابق سطر التأريخ السابق. تستخدم الشرطة المائلة العكسية للهروب من “&”; تُزال الشرطة المائلة العكسية قبل محاولة المطابقة. إذا حُفظ السطر الأول من أمر مركب متعدد الأسطر، فلن تُختبر الأسطر الثانية واللاحقة، وستُضاف إلى التأريخ بغض النظر عن قيمة HISTIGNORE. إذا لم يُحفظ السطر الأول، فلن تُحفظ الأسطر الثانية واللاحقة من الأمر أيضًا. تحترم مطابقة الأنماط إعداد خيار الـ صدفة extglob.
- تتضمن HISTIGNORE بعض وظائف HISTCONTROL. نمط “&” مطابق لـ “ignoredups”, ونمط “[ ]*” مطابق لـ “ignorespace”. الجمع بين هذين النمطين، مع الفصل بينهما بنقطتين، يوفر وظيفة “ignoreboth”.
- HISTSIZE
- عدد الأوامر التي يجب تذكرها في تأريخ الأوامر (انظر التأريخ أدناه). إذا كانت القيمة 0، فلن تُحفظ الأوامر في قائمة التأريخ. تؤدي القيم العددية الأقل من الصفر إلى حفظ كل أمر في قائمة التأريخ (لا يوجد حد). تضبط الـ صدفة القيمة المبدئية على 500 بعد قراءة أي ملفات بدء تشغيل.
- HISTTIMEFORMAT
- إذا عُين هذا المتغير ولم يكن فارغًا، تُستخدم قيمته كسلسلة تنسيق لـ strftime(3) لطباعة الطابع الزمني المرتبط بكل مدخل تأريخ يعرضه أمر history المدمج. إذا عُين هذا المتغير، تكتب الـ صدفة طوابع زمنية في ملف التأريخ بحيث يمكن الحفاظ عليها عبر جلسات الـ صدفة. يستخدم هذا حرف تعليق التأريخ لتمييز الطوابع الزمنية عن أسطر التأريخ الأخرى.
- HOME
- الدليل الرئيسي للمستخدم الحالي؛ المعطى المبدئي للأمر المدمج cd. تُستخدم قيمة هذا المتغير أيضًا عند إجراء توسيع التلدة (tilde).
- HOSTFILE
- يحتوي على اسم ملف بنفس تنسيق /etc/hosts الذي يجب قراءته عندما تحتاج الـ صدفة إلى إكمال اسم مضيف. قد تُغير قائمة إكمالات أسماء المضيفين الممكنة أثناء تشغيل الـ صدفة؛ في المرة التالية التي تُحاول فيها إكمال اسم المضيف بعد تغيير القيمة، يضيف bash محتويات الملف الجديد إلى القائمة الموجودة. إذا عُين HOSTFILE، ولكن ليس له قيمة، أو لا يسمي ملفًا قابلاً للقراءة، يحاول bash قراءة /etc/hosts للحصول على قائمة إكمالات أسماء المضيفين الممكنة. عند إلغاء تعيين HOSTFILE، يمسح bash قائمة أسماء المضيفين.
- IFS
- فاصل الحقول الداخلي الذي يُستخدم لتقسيم الكلمات بعد التوسع ولتقسيم الأسطر إلى كلمات باستخدام أمر read المدمج. يوصف تقسيم الكلمات أدناه تحت التوسع. القيمة المبدئية هي “<space><tab><newline>”.
- IGNOREEOF
- يتحكم في إجراء صدفة تفاعلية عند استلام محرف EOF كمدخل وحيد. إذا عُين، فإن القيمة هي عدد محارف EOF المتتالية التي يجب كتابتها كأول محارف في سطر الإدخال قبل خروج bash. إذا عُين المتغير ولكن ليس له قيمة عددية، أو كانت القيمة فارغة، فإن القيمة المبدئية هي 10. إذا أُلغي تعيينه، فإن EOF تعني نهاية الإدخال للـ صدفة.
- INPUTRC
- اسم ملف بدء تشغيل readline، متجاوزًا القيمة المبدئية لـ ~/.inputrc (انظر READLINE أدناه).
- INSIDE_EMACS
- إذا ظهر هذا المتغير في البيئة عند بدء تشغيل الـ صدفة، يفترض bash أنه يعمل داخل مخزن صدفة Emacs وقد يعطل تحرير السطر، اعتمادًا على قيمة TERM.
- LANG
- يُستخدم لتحديد فئة الإعدادات المحلية لأي فئة لم تُحدد صراحة بمتغير يبدأ بـ LC_.
- LC_ALL
- يتجاوز هذا المتغير قيمة LANG وأي متغير LC_ آخر يحدد فئة إعدادات محلية.
- LC_COLLATE
- يحدد هذا المتغير ترتيب المقارنة المستخدم عند فرز نتائج توسيع مسار الملف، ويحدد سلوك تعبيرات النطاق، وفئات التكافؤ، وتسلسلات المقارنة داخل توسيع مسار الملف ومطابقة الأنماط.
- LC_CTYPE
- يحدد هذا المتغير تفسير المحارف وسلوك فئات المحارف داخل توسيع مسار الملف ومطابقة الأنماط.
- LC_MESSAGES
- يحدد هذا المتغير الإعدادات المحلية المستخدمة لترجمة السلاسل الموضوعة بين علامتي اقتباس مزدوجتين والمسبوقة بـ $.
- LC_NUMERIC
- يحدد هذا المتغير فئة الإعدادات المحلية المستخدمة لتنسيق الأرقام.
- LC_TIME
- يحدد هذا المتغير فئة الإعدادات المحلية المستخدمة لتنسيق التاريخ والوقت.
- LINES
- يستخدمه الأمر المركب select لتحديد طول العمود عند طباعة قوائم الاختيار. يُضبط آليًا إذا مُكّن خيار checkwinsize أو في صدفة تفاعلية عند تلقي إشارة SIGWINCH.
- إذا عُينت القيمة لاسم ملف أو دليل ولم يُعين متغير MAILPATH، فإن bash يخبر المستخدم بوصول بريد في الملف المحدد أو الدليل بتنسيق Maildir.
- MAILCHECK
- يحدد عدد المرات (بالثواني) التي يتحقق فيها bash من البريد. القيمة المبدئية هي 60 ثانية. عندما يحين وقت التحقق من البريد، تقوم الـ صدفة بذلك قبل عرض المحث الرئيس. إذا أُلغي تعيين هذا المتغير، أو عُين لقيمة ليست رقمًا أكبر من أو يساوي الصفر، فإن الـ صدفة تعطّل التحقق من البريد.
- MAILPATH
- قائمة مفصولة بنقطتين لأسماء الملفات التي سيتم التحقق منها بحثًا عن بريد. يمكن تحديد الرسالة التي ستُطبع عند وصول بريد في ملف معين عن طريق فصل اسم الملف عن الرسالة بـ “?”. عند استخدامه في نص الرسالة، يتوسع $_ إلى اسم ملف البريد الحالي. على سبيل المثال:
MAILPATH='/var/mail/bfox?"لديك بريد":~/shell-mail?"$_ لديه بريد!"'
يمكن ضبط Bash لتوفير قيمة مبدئية لهذا المتغير (لا توجد قيمة افتراضيًا)، لكن موقع ملفات بريد المستخدم التي يستخدمها يعتمد على النظام (مثلًا، /var/mail/$USER).
- OPTERR
- إذا عُين للقيمة 1، يعرض bash رسائل الخطأ الناتجة عن أمر getopts المدمج (انظر أوامر الصدفة المدمجة أدناه). يُهيأ OPTERR إلى 1 في كل مرة تُستدعى فيها الـ صدفة أو يُنفذ فيها سكربت صدفة.
- PATH
- مسار البحث عن الأوامر. وهو قائمة مفصولة بنقطتين للأدلة التي تبحث فيها الـ صدفة عن الأوامر (انظر تنفيذ الأوامر أدناه). اسم الدليل بطول صفر (null) في قيمة PATH يشير إلى الدليل الحالي. قد يظهر اسم دليل فارغ كنقطتين متجاورتين، أو كنقطة في البداية أو النهاية. المسار المبدئي يعتمد على النظام، ويضبطه المسؤول الذي يثبت bash. القيمة الشائعة هي
/usr/local/bin:/usr/local/sbin:.if 0<78n .br /usr/bin:/usr/sbin:/bin:/sbin
- POSIXLY_CORRECT
- إذا كان هذا المتغير في البيئة عند بدء تشغيل bash، تدخل الـ صدفة في وضع posix قبل قراءة ملفات بدء التشغيل، كما لو كان خيار الاستدعاء --posix قد تم توفيره. إذا عُين أثناء تشغيل الـ صدفة، يُمكّن bash وضع posix، كما لو كان الأمر “set -o posix” قد نُفذ. عندما تدخل الـ صدفة في وضع posix، فإنها تضبط هذا المتغير إذا لم يكن قد عُين بالفعل.
- PROMPT_COMMAND
- إذا عُين هذا المتغير، وكان مصفوفة، تُنفذ قيمة كل عنصر معين كأمر قبل إصدار كل محث رئيس. إذا عُين هذا المتغير ولكن لم يكن مصفوفة، تُستخدم قيمته كأمر ليُنقذ بدلاً من ذلك.
- PROMPT_DIRTRIM
- إذا ضُبطت على رقم أكبر من الصفر، تُستخدم القيمة كعدد لمكونات المسار اللاحقة التي يُحتفظ بها عند توسيع هروب سلاسل المحث \w و \W (انظر PROMPTING أدناه). تُستبدل المحارف المحذوفة بنقاط حذف.
- PS0
- تُوسع قيمة هذا المعامل (انظر PROMPTING أدناه) وتعرضها الصدف التفاعلية بعد قراءة الأمر وقبل تنفيذه.
- PS1
- تُوسع قيمة هذا المعامل (انظر PROMPTING أدناه) وتُستخدم كسلسلة المحث الرئيسة. القيمة المبدئية هي “\s-\v\$ ”.
- PS2
- تُوسع قيمة هذا المعامل كما هو الحال مع PS1 وتُستخدم كسلسلة المحث الثانوية. المبدئي هو “> ”.
- PS3
- تُستخدم قيمة هذا المعامل كمحث لأمر select (انظر SHELL GRAMMAR أعلاه).
- PS4
- تُوسع قيمة هذا المعامل كما هو الحال مع PS1 وتُطبع القيمة قبل كل أمر يعرضه bash أثناء تتبع التنفيذ. يُكرر المحرف الأول من القيمة الموسعة لـ PS4 عدة مرات، حسب الضرورة، للإشارة إلى مستويات متعددة من الاستدلال. المبدئي هو “+ ”.
- SHELL
- يتوسع هذا المتغير إلى مسار الاسم الكامل للصدفة. إذا لم يُضبط عند بدء تشغيل الصدفة، يخصص bash له مسار الاسم الكامل لصدفة ولوج المستخدم الحالي.
- TIMEFORMAT
- تُستخدم قيمة هذا المعامل كسلسلة تنسيق تحدد كيفية عرض معلومات التوقيت للأنابيب المسبوقة بالكلمة المحجوزة time. يقدم محرف % تسلسل هروب يُوسع إلى قيمة زمنية أو معلومات أخرى. تسلسلات الهروب ومعانيها هي كما يلي؛ وتشير الأقواس المربعة إلى الأجزاء الاختيارية.
- %%
- حرف % حرفي.
- %[p][l]R
- الوقت المنقضي بالثواني.
- %[p][l]U
- عدد ثواني وحدة المعالجة المركزية المستغرقة في وضع المستخدم.
- %[p][l]S
- عدد ثواني وحدة المعالجة المركزية المستغرقة في وضع النظام.
- %P
- نسبة وحدة المعالجة المركزية، تُحسب كـ (%U + %S) / %R.
- الخيار p هو رقم يحدد الدقة، أي عدد الأرقام الكسرية بعد الفاصلة العشرية. تؤدي القيمة 0 إلى عدم إخراج فاصلة عشرية أو كسر. يطبع time ستة أرقام كحد أقصى بعد الفاصلة العشرية؛ تُغير قيم p الأكبر من 6 إلى 6. إذا لم يُحدد p، يطبع time ثلاثة أرقام بعد الفاصلة العشرية.
- يحدد الخيار l تنسيقاً أطول، يتضمن الدقائق، على شكل MMmSS.FFs. تحدد قيمة p ما إذا كان الكسر سيُضمّن أم لا.
- إذا لم يُضبط هذا المتغير، يتصرف bash كما لو كانت قيمته $'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'. إذا كانت القيمة فارغة، لا يعرض bash أي معلومات توقيت. يُضاف سطر جديد لاحق عند عرض سلسلة التنسيق.
- TMOUT
- إذا ضُبط على قيمة أكبر من الصفر، يستخدم الأمر المدمج read القيمة كمهلة مبدئية له. ينتهي أمر select إذا لم يصل دخل بعد TMOUT ثانية عندما يكون الدخل آتياً من طرفية. في الصدفة التفاعلية، تُفسر القيمة على أنها عدد الثواني لانتظار سطر من الدخل بعد إصدار المحث الرئيس. ينتهي Bash بعد الانتظار لهذا العدد من الثواني إذا لم يصل سطر كامل من الدخل.
- TMPDIR
- إذا ضُبط، يستخدم bash قيمته كاسم لدليل ينشئ فيه bash ملفات مؤقتة لاستخدام الصدفة.
- auto_resume
- يتحكم هذا المتغير في كيفية تفاعل الصدفة مع المستخدم والتحكم في المهام. إذا ضُبط هذا المتغير، تُعامل الأوامر البسيطة المكونة من كلمة واحدة فقط، بدون إعادة توجيه، كمرشحات لاستئناف مهمة متوقفة موجودة. لا يُسمح بأي غموض؛ إذا كان هناك أكثر من مهمة تبدأ بالكلمة أو تحتوي عليها، يختار هذا المتغير المهمة التي تم الوصول إليها مؤخراً. اسم المهمة المتوقفة، في هذا السياق، هو سطر الأوامر المستخدم لبدئها، كما يعرضه jobs. إذا ضُبط على القيمة exact، يجب أن تطابق الكلمة اسم المهمة المتوقفة تماماً؛ وإذا ضُبط على substring، يجب أن تطابق الكلمة سلسلة فرعية من اسم المهمة المتوقفة. توفر القيمة substring وظيفة مماثلة لمعرف المهمة %? (انظر JOB CONTROL أدناه). إذا ضُبط على أي قيمة أخرى (مثلاً prefix)، يجب أن تكون الكلمة سابقة لاسم المهمة المتوقفة؛ وهذا يوفر وظيفة مماثلة لمعرف المهمة %string.
- histchars
- المحرفان أو الثلاثة محارف التي تتحكم في توسيع التاريخ، والاستبدال السريع، والتقطيع (انظر HISTORY EXPANSION أدناه). المحرف الأول هو محرف توسيع التاريخ، وهو المحرف الذي يبدأ توسيع التاريخ، وعادة ما يكون “!”. المحرف الثاني هو محرف الاستبدال السريع، وعادة ما يكون “^”. عندما يظهر كأول محرف في السطر، يكرر استبدال التاريخ الأمر السابق، مستبدلاً سلسلة بأخرى. المحرف الثالث الاختياري هو محرف تعليق التاريخ، وعادة ما يكون “#”, والذي يشير إلى أن بقية السطر عبارة عن تعليق عندما يظهر كأول محرف في كلمة. يعطل محرف تعليق التاريخ استبدال التاريخ للكلمات المتبقية في السطر. ولا يؤدي بالضرورة إلى جعل محلل الصدفة يعامل بقية السطر كتعليق.
المصفوفات¶
يوفر Bash متغيرات مصفوفة مفهرسة وترابطية أحادية البعد. يمكن استخدام أي متغير كمصفوفة مفهرسة؛ ويصرح الأمر المدمج declare صراحةً عن مصفوفة. لا يوجد حد أقصى لحجم المصفوفة، ولا أي اشتراط بأن تُفهرس الأعضاء أو تُخصص بشكل متجاوز. يُشار إلى المصفوفات المفهرسة باستخدام تعابير حسابية يجب أن تتوسع إلى عدد صحيح (انظر ARITHMETIC EVALUATION أدناه) وتكون مبنية على الصفر؛ ويُشار إلى المصفوفات الترابطية باستخدام سلاسل عشوائية. ما لم يُذكر خلاف ذلك، يجب أن تكون فهارس المصفوفة المفهرسة أعداداً صحيحة غير سالبة.
تجري الصدفة توسيع المعاملات والمتغيرات، والتوسيع الحسابي، واستبدال الأوامر، وإزالة الاقتباس على أدلة المصفوفة المفهرسة. ونظراً لأن هذا قد يؤدي بالضرورة إلى سلاسل فارغة، فإن فهرسة الأدلة تعاملها كتعبيرات تُقيم إلى 0.
تجري الصدفة توسيع المد، وتوسيع المعاملات والمتغيرات، والتوسيع الحسابي، واستبدال الأوامر، وإزالة الاقتباس على أدلة المصفوفة الترابطية. لا يمكن استخدام السلاسل الفارغة كمفاتيح للمصفوفة الترابطية.
ينشئ Bash مصفوفة مفهرسة آلياً إذا خُصص أي متغير باستخدام الصيغة
تُنشأ المصفوفات الترابطية باستخدام
يمكن تحديد السمات لمتغير مصفوفة باستخدام الأوامر المدمجة declare و readonly. تنطبق كل سمة على جميع أعضاء المصفوفة.
تُخصص المصفوفات باستخدام تخصيصات مركبة على شكل name=(value1 ... valuen)، حيث يمكن أن تكون كل value على شكل [subscript]=string. لا تتطلب تخصيصات المصفوفة المفهرسة أي شيء سوى string. تُوسع كل value في القائمة باستخدام توسيعات الصدفة الموضحة أدناه في EXPANSION، لكن الـ values التي تعتبر تخصيصات متغيرات صالحة بما في ذلك الأقواس والدليل لا تخضع لتوسيع الأقواس وتقسيم الكلمات، كما هو الحال مع تخصيصات المتغيرات الفردية.
عند التخصيص للمصفوفات المفهرسة، إذا وُفرت الأقواس والدليل الاختياريين، يُخصص ذلك الفهرس؛ وإلا فإن فهرس العنصر المخصص هو آخر فهرس خُصص بواسطة الجملة زائد واحد. تبدأ الفهرسة من الصفر.
عند التخصيص لمصفوفة ترابطية، قد تكون الكلمات في التخصيص المركب إما جمل تخصيص، والتي تتطلب دليلاً، أو قائمة من الكلمات التي تُفسر كتسلسل من المفاتيح والقيم المتبادلة: name=( key1 value1 key2 value2 ...). تُعامل هذه بشكل مطابق لـ name=( [key1]=value1 [key2]=value2 ...). تحدد الكلمة الأولى في القائمة كيفية تفسير الكلمات المتبقية؛ ويجب أن تكون جميع التخصيصات في القائمة من نفس النوع. عند استخدام أزواج المفاتيح/القيم، لا يمكن أن تكون المفاتيح مفقودة أو فارغة؛ وتُعامل القيمة النهائية المفقودة كسلسلة فارغة.
هذه الصيغة مقبولة أيضاً من قبل الأمر المدمج declare. يمكن تخصيص عناصر المصفوفة الفردية باستخدام صيغة name[subscript]=value المقدمة أعلاه.
عند التخصيص لمصفوفة مفهرسة، إذا كان name متبوعاً بدليل رقمي سالب، يُفسر هذا الرقم كقيمة نسبية لواحد أكبر من أقصى فهرس لـ name، لذا فإن الفهارس السالبة تعد تنازلياً من نهاية المصفوفة، ويشير الفهرس -1 إلى العنصر الأخير.
العامل “+=” يُلحق بمتغير المصفوفة عند التخصيص باستخدام صيغة التخصيص المركبة؛ انظر PARAMETERS أعلاه.
يُشار إلى عنصر المصفوفة باستخدام ${name[subscript]}. الأقواس مطلوبة لتجنب التعارض مع توسيع مسار الاسم. إذا كان subscript هو @ أو *، تتوسع الكلمة إلى جميع أعضاء name، ما لم يُذكر خلاف ذلك في وصف أمر مدمج أو توسيع كلمة. تختلف هذه الأدلة فقط عندما تظهر الكلمة داخل علامتي اقتباس مزدوجتين. إذا كانت الكلمة داخل اقتباس مزدوج، تتوسع ${name[*]} إلى كلمة واحدة بقيمة كل عضو في المصفوفة مفصولة بالمحرف الأول من متغير IFS الخاص، وتتوسع ${name[@]} لكل عنصر من name إلى كلمة منفصلة. عندما لا يكون هناك أعضاء في المصفوفة، تتوسع ${name[@]} إلى لا شيء. إذا حدث التوسيع داخل اقتباس مزدوج ضمن كلمة، يُضم توسيع المعامل الأول مع الجزء الأولي من توسيع الكلمة الأصلية، ويُضم توسيع المعامل الأخير مع الجزء الأخير من توسيع الكلمة الأصلية. وهذا يماثل توسيع المعاملات الخاصة * و @ (انظر Special Parameters أعلاه).
${#name[subscript]} تتوسع إلى طول ${name[subscript]}. إذا كان subscript هو * أو @، يكون التوسع هو عدد العناصر في المصفوفة.
إذا كان subscript المستخدم للإشارة إلى عنصر في مصفوفة مفهرسة يُقيم إلى رقم أقل من الصفر، فإنه يُفسر كقيمة نسبية لواحد أكبر من الفهرس الأقصى للمصفوفة، لذا فإن الفهارس السالبة تعد تنازلياً من نهاية المصفوفة، ويشير الفهرس -1 إلى العنصر الأخير.
الإشارة إلى متغير مصفوفة بدون دليل تعادل الإشارة إلى المصفوفة بالدليل 0. أي إشارة إلى متغير باستخدام دليل صالح تعتبر صالحة؛ وينشئ bash مصفوفة إذا لزم الأمر.
يعتبر متغير المصفوفة معيناً إذا خُصصت قيمة لدليل ما. وتعتبر السلسلة الفارغة قيمة صالحة.
من الممكن الحصول على مفاتيح (فهارس) مصفوفة بالإضافة إلى القيم. تتوسع ${!name[@]} و ${!name[*]} إلى الفهارس المخصصة في متغير المصفوفة name. المعاملة عند وجودها داخل اقتباس مزدوج تشبه توسيع المعاملات الخاصة @ و * داخل الاقتباس المزدوج.
يُستخدم الأمر المدمج unset لتدمير المصفوفات. unset name[subscript] يلغي تعيين عنصر المصفوفة عند الفهرس subscript، لكل من المصفوفات المفهرسة والترابطية. تُفسر الأدلة السالبة للمصفوفات المفهرسة كما هو موضح أعلاه. لا يؤدي إلغاء تعيين العنصر الأخير في متغير مصفوفة إلى إلغاء تعيين المتغير نفسه. unset name، حيث name مصفوفة، يزيل المصفوفة بأكملها. يتصرف unset name[subscript] بشكل مختلف اعتماداً على ما إذا كان name مصفوفة مفهرسة أو ترابطية عندما يكون subscript هو * أو @. إذا كان name مصفوفة ترابطية، فإن هذا يلغي تعيين العنصر ذي الدليل * أو @. إذا كان name مصفوفة مفهرسة، فإن unset يزيل جميع العناصر ولكنه لا يزيل المصفوفة نفسها.
عند استخدام اسم متغير مع دليل كمعامل لأمر ما، كما هو الحال مع unset، بدون استخدام صيغة توسيع الكلمة الموضحة أعلاه (مثلاً unset a[4])، يخضع المعامل لتوسيع مسار الاسم. اقتبس المعامل إذا كان توسيع مسار الاسم غير مرغوب فيه (مثلاً unset 'a[4]').
تقبل الأوامر المدمجة declare و local و readonly خيار -a لتحديد مصفوفة مفهرسة وخيار -A لتحديد مصفوفة ترابطية. إذا وُفر كلا الخيارين، تكون الأولوية لـ -A. يقبل الأمر المدمج read خيار -a لتخصيص قائمة كلمات مقروءة من الدخل القياسي لمصفوفة. يعرض الأممران المدمجان set و declare قيم المصفوفة بطريقة تسمح بإعادة استخدامها كتخصيصات. تقبل أوامر مدمجة أخرى معاملات أسماء مصفوفات أيضاً (مثلاً mapfile)؛ انظر أوصاف الأوامر المدمجة الفردية أدناه للحصول على التفاصيل. توفر الصدفة عدداً من متغيرات المصفوفة المدمجة.
توسيع¶
يُجرى التوسيع على سطر الأوامر بعد تقسيمه إلى كلمات. تجري الصدفة هذه التوسيعات: توسيع الأقواس، وتوسيع المد، وتوسيع المعاملات والمتغيرات، واستبدال الأوامر، والتوسيع الحسابي، وتقسيم الكلمات، وتوسيع مسار الاسم، وإزالة الاقتباس.
ترتيب التوسيعات هو: توسيع الأقواس؛ ثم توسيع المد، وتوسيع المعاملات والمتغيرات، والتوسيع الحسابي، واستبدال الأوامر (تُجرى من اليسار إلى اليمين)؛ ثم تقسيم الكلمات؛ ثم توسيع مسار الاسم؛ وأخيراً إزالة الاقتباس.
في الأنظمة التي تدعم ذلك، يتوفر توسيع إضافي: استبدال العمليات. يُجرى هذا في نفس وقت توسيع المد والمعاملات والمتغيرات والحساب واستبدال الأوامر.
تُجرى إزالة الاقتباس دائماً في النهاية. وهي تزيل محارف الاقتباس الموجودة في الكلمة الأصلية، وليس تلك الناتجة عن أحد التوسيعات الأخرى، ما لم تكن هي نفسها مقتبسة.
فقط توسيع الأقواس، وتقسيم الكلمات، وتوسيع مسار الاسم يمكن أن تزيد من عدد كلمات التوسيع؛ التوسيعات الأخرى توسع كلمة واحدة إلى كلمة واحدة. الاستثناءات الوحيدة لهذا هي توسيعات "$@" و "${name[@]}"، وفي معظم الحالات $* و ${name[*]} كما هو موضح أعلاه (انظر PARAMETERS).
توسيع الأقواس¶
توسيع الأقواس هو آلية لتوليد سلاسل عشوائية تشترك في سابقة ولاحقة مشتركة، ويمكن أن تكون أي منهما فارغة. هذه الآلية تشبه توسيع مسار الاسم، ولكن أسماء الملفات المولدة لا يلزم أن تكون موجودة. تُشكل الأنماط المراد توسيع أقواسها من توطئة اختيارية، تليها إما سلسلة من السلاسل المفصولة بفواصل أو تعبير تسلسلي بين زوج من الأقواس، تليها خاتمة اختيارية. تُسبق التوطئة لكل سلسلة موجودة داخل الأقواس، ثم تُلحق الخاتمة بكل سلسلة ناتجة، مع التوسيع من اليسار إلى اليمين.
قد يكون توسيع الأقواس متداخلاً. لا تُفرز نتائج كل سلسلة موسعة؛ يحافظ توسيع الأقواس على الترتيب من اليسار إلى اليمين. على سبيل المثال، يتوسع a{d,c,b}e إلى “ade ace abe”.
يأخذ تعبير التسلسل الشكل x..y[..incr]، حيث x و y إما أعداد صحيحة أو أحرف مفردة، و incr، وهي زيادة اختيارية، عبارة عن عدد صحيح. عند توفير أعداد صحيحة، يتوسع التعبير لكل رقم بين x و y، بما في ذلك الطرفان. إذا بدأ أي من x أو y بصفر، فسيحتوي كل مصطلح مولد على نفس عدد الأرقام، مع حشو أصفار عند الضرورة. عند توفير أحرف، يتوسع التعبير لكل محرف معجمياً بين x و y، بما في ذلك الطرفان، باستخدام محلي C. لاحظ أنه يجب أن يكون كل من x و y من نفس النوع (عدد صحيح أو حرف). عند توفير الزيادة، تُستخدم كفرق بين كل مصطلح. الزيادة المبدئية هي 1 أو -1 حسب الاقتضاء.
يُجرى توسيع الأقواس قبل أي توسيعات أخرى، وتُحفظ أي محارف خاصة بالتوسيعات الأخرى في النتيجة. إنه نصي بحت. لا يطبق Bash أي تفسير نحوي على سياق التوسيع أو النص الموجود بين الأقواس.
يجب أن يحتوي توسيع الأقواس المكون بشكل صحيح على أقواس فتح وإغلاق غير مقتبسة، وفاصلة واحدة على الأقل غير مقتبسة أو تعبير تسلسلي صالح. يُترك أي توسيع أقواس مكون بشكل خاطئ دون تغيير.
يمكن “{” أو Q , اقتباسهما بشرطة مائلة خلفية لمنع اعتبارهما جزءاً من تعبير القوس. لتجنب التعارض مع توسيع المعاملات، السلسلة “${” لا تعتبر مؤهلة لتوسيع الأقواس، وتمنع توسيع الأقواس حتى إغلاق “}”.
يُستخدم هذا التركيب عادة كاختصار عندما تكون السابقة المشتركة للسلاسل المراد توليدها أطول مما في المثال أعلاه:
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}” تظهر بشكل متطابق في المخرجات. يخرج Bash تلك الكلمة كـ “file1 file2” بعد توسيع الأقواس. ابدأ bash بخيار +B أو عطل توسيع الأقواس باستخدام خيار +B لأمر set (انظر SHELL BUILTIN COMMANDS أدناه) للتوافق الصارم مع sh.
توسيع المد¶
إذا بدأت كلمة بمحرف مد غير مقتبس ( “~”), تُعتبر جميع المحارف التي تسبق أول شرطة مائلة غير مقتبسة (أو جميع المحارف، إذا لم يكن هناك شرطة مائلة غير مقتبسة) بادئة مد. إذا لم يكن أي من المحارف في بادئة المد مقتبساً، تُعامل المحارف في بادئة المد التي تلي المد كـ اسم ولوج محتمل. إذا كان اسم الولوج هذا هو السلسلة الفارغة، يُستبدل المد بقيمة معامل الصدفة HOME. إذا كان HOME غير معين، يتوسع المد إلى الدليل المنزلي للمستخدم الذي ينفذ الصدفة بدلاً من ذلك. وإلا، تُستبدل بادئة المد بالدليل المنزلي المرتبط باسم الولوج المحدد.
إذا كانت بادئة المد “~+”, تحل قيمة متغير الصدفة PWD محل بادئة المد. إذا كانت بادئة المد “~-”, تستبدل الصدفة قيمة متغير الصدفة OLDPWD، إذا كان معيناً. إذا كانت المحارف التي تلي المد في بادئة المد تتكون من رقم N، مسبوقاً اختيارياً بـ “+” أو “-”, تُستبدل بادئة المد بالعنصر المقابل من مكدس الدليل، كما يعرضه الأمر المدمج dirs المستدعى مع المحارف التي تلي المد في بادئة المد كمعامل. إذا كانت المحارف التي تلي المد في بادئة المد تتكون من رقم بدون بادئة “+” أو “-”, يفترض توسيع المد “+”.
تُعامل نتائج توسيع المد كما لو كانت مقتبسة، لذا لا يخضع الاستبدال لتقسيم الكلمات وتوسيع مسار الاسم.
إذا كان اسم الولوج غير صالح، أو فشل توسيع المد، تظل بادئة المد دون تغيير.
يفحص Bash كل تخصيص متغير لبادئات المد غير المقتبسة التي تلي مباشرة : أو أول =، ويجري توسيع المد في هذه الحالات. وبالتالي، يمكن للمرء استخدام أسماء الملفات مع المد في التخصيصات لـ PATH و MAILPATH و CDPATH، وتخصص الصدفة القيمة الموسعة.
يجري Bash أيضاً توسيع المد على الكلمات التي تستوفي شروط تخصيصات المتغيرات (كما هو موضح أعلاه في PARAMETERS) عندما تظهر كمعاملات لأوامر بسيطة. لا يفعل Bash ذلك، باستثناء أوامر التصريح المذكورة أعلاه، عندما يكون في وضع posix.
توسيع المعاملات¶
العامل “$” يقدم المحرف توسيع المعاملات، أو استبدال الأوامر، أو التوسيع الحسابي. قد يُحاط اسم المعامل أو الرمز المراد توسيعه بأقواس، وهي اختيارية ولكنها تعمل على حماية المتغير المراد توسيعه من المحارف التي تليه مباشرة والتي يمكن تفسيرها كجزء من الاسم.
عند استخدام الأقواس، يكون قوس الإغلاق المطابق هو أول “}” غير مهرب بشرطة مائلة خلفية أو داخل سلسلة مقتبسة، وليس داخل توسيع حسابي مضمن، أو استبدال أمر، أو توسيع معامل.
الشكل الأساسي لتوسيع المعامل هو
${parameter}
والذي يستبدل قيمة parameter. الأقواس مطلوبة عندما يكون parameter معاملاً موضعياً مكوناً من أكثر من رقم واحد، أو عندما يتبع parameter محرف لا يجب تفسيره كجزء من اسمه. parameter هو معامل صدفة كما هو موضح أعلاه (PARAMETERS) أو مرجع مصفوفة (Arrays).
إذا كان المحرف الأول من parameter هو علامة تعجب (!)، ولم يكن parameter مرجع اسم nameref، فإنه يقدم مستوى من الاستدلال. يستخدم Bash القيمة المتكونة من توسيع بقية parameter كـ parameter جديد؛ ثم يُوسع هذا المعامل الجديد وتُستخدم تلك القيمة في بقية التوسيع، بدلاً من توسيع parameter الأصلي. يُعرف هذا باسم التوسيع غير المباشر. تخضع القيمة لتوسيع المد، وتوسيع المعاملات، واستبدال الأوامر، والتوسيع الحسابي. إذا كان parameter مرجع اسم، فإن هذا يتوسع إلى اسم المعامل المشار إليه بواسطة parameter بدلاً من إجراء التوسيع غير المباشر الكامل، وذلك للتوافق. الاستثناءات من ذلك هي توسيعات ${!prefix*} و ${!name[@]} الموضحة أدناه. يجب أن تتبع علامة التعجب مباشرة قوس الفتح لتقديم الاستدلال.
في كل حالة من الحالات أدناه، تخضع word لتوسيع المد، وتوسيع المعاملات، واستبدال الأوامر، والتوسيع الحسابي.
عند عدم إجراء توسيع للسلسلة الفرعية، باستخدام الأشكال الموثقة أدناه (مثلاً :-)، يختبر bash ما إذا كان المعامل غير معين أو فارغاً. يؤدي حذف النقطتين الرأسيتين إلى اختبار ما إذا كان المعامل غير معين فقط.
- ${parameter:-word}
- استخدام القيم المبدئية. إذا كان parameter غير معين أو فارغاً، يُستبدل بتوسيع word. وإلا، تُستبدل قيمة parameter.
- ${parameter:=word}
- تخصيص القيم المبدئية. إذا كان parameter غير معين أو فارغاً، يُخصص توسيع word لـ parameter، ويكون التوسيع هو القيمة النهائية لـ parameter. لا يجوز تخصيص المعاملات الموضعية والمعاملات الخاصة بهذه الطريقة.
- ${parameter:?word}
- عرض خطأ إذا كان فارغاً أو غير معين. إذا كان parameter فارغاً أو غير معين، تكتب الصدفة توسيع word (أو رسالة بهذا المعنى إذا لم تكن word موجودة) إلى الخطأ القياسي، وإذا لم تكن تفاعلية، تخرج بحالة غير صفرية. لا تخرج الصدفة التفاعلية، ولكنها لا تنفذ الأمر المرتبط بالتوسيع. وإلا، تُستبدل قيمة parameter.
- ${parameter:+word}
- استخدام قيمة بديلة. إذا كان parameter فارغاً أو غير معين، لا يُستبدل بشيء، وإلا يُستبدل بتوسيع word. لا تُستخدم قيمة parameter.
- ${parameter:offset}
- ${parameter:offset:length}
- توسيع السلسلة الفرعية. يتوسع إلى ما يصل إلى length من محارف قيمة parameter بدءاً من المحرف المحدد بـ offset. إذا كان parameter هو @ أو *، أو مصفوفة مفهرسة بدليل @ أو *، أو اسم مصفوفة ترابطية، تختلف النتائج كما هو موضح أدناه. إذا حُذف :length (الشكل الأول أعلاه)، فإن هذا يتوسع إلى السلسلة الفرعية لقيمة parameter بدءاً من المحرف المحدد بـ offset ويمتد إلى نهاية القيمة. إذا حُذف offset، يُعامل كـ 0. إذا حُذف length، ولكن النقطتين بعد offset موجودتان، يُعامل كـ 0. length و offset هما تعبيران حسابيان (انظر ARITHMETIC EVALUATION أدناه).
- إذا أدى تقييم offset إلى رقم أقل من الصفر، تُستخدم القيمة كإزاحة بالمحارف من نهاية قيمة parameter. إذا أدى تقييم length إلى رقم أقل من الصفر، فإنه يُفسر كإزاحة بالمحارف من نهاية قيمة parameter بدلاً من عدد من المحارف، ويكون التوسيع هو المحارف بين offset وتلك النتيجة. لاحظ أنه يجب فصل الإزاحة السالبة عن النقطتين بمسافة واحدة على الأقل لتجنب الالتباس مع توسيع :-.
- إذا كان parameter هو @ أو *، تكون النتيجة هي length من المعاملات الموضعية بدءاً من offset. تؤخذ الإزاحة السالبة offset نسبةً لواحد أكبر من أكبر معامل موضعي، لذا فإن إزاحة -1 تُقيم إلى آخر معامل موضعي (أو 0 إذا لم تكن هناك معاملات موضعية). يعتبر خطأ توسيع إذا أدى تقييم length إلى رقم أقل من الصفر.
- إذا كان parameter اسم مصفوفة مفهرسة بدليل @ أو *، تكون النتيجة هي length من أعضاء المصفوفة بدءاً من ${parameter[offset]}. تؤخذ الإزاحة السالبة offset نسبةً لواحد أكبر من الفهرس الأقصى للمصفوفة المحددة. يعتبر خطأ توسيع إذا أدى تقييم length إلى رقم أقل من الصفر.
- يؤدي توسيع السلسلة الفرعية المطبق على مصفوفة ترابطية إلى نتائج غير محددة.
- تعتمد فهرسة السلسلة الفرعية على الصفر ما لم تُستخدم المعاملات الموضعية، وفي هذه الحالة تبدأ الفهرسة من 1 مبدئياً. إذا كان offset هو 0، واستُخدمت المعاملات الموضعية، تُسبق القائمة بـ $0.
- ${!prefix*}
- ${!prefix@}
- الأسماء المطابقة للسابقة. يتوسع إلى أسماء المتغيرات التي تبدأ أسماؤها بـ prefix، مفصولة بالمحرف الأول من متغير IFS الخاص. عند استخدام @ وظهور التوسيع داخل اقتباس مزدوج، يتوسع كل اسم متغير إلى كلمة منفصلة.
- ${!name[@]}
- ${!name[*]}
- قائمة مفاتيح المصفوفة. إذا كان name متغير مصفوفة، يتوسع إلى قائمة فهارس (مفاتيح) المصفوفة المخصصة في name. إذا لم يكن name مصفوفة، يتوسع إلى 0 إذا كان name معيناً وإلى فارغ خلاف ذلك. عند استخدام @ وظهور التوسيع داخل اقتباس مزدوج، يتوسع كل مفتاح إلى كلمة منفصلة.
- ${#parameter}
- طول المعامل. يستبدل الطول بالمحارف للقيمة الموسعة لـ parameter. إذا كان parameter هو * أو @، تكون القيمة المستبدلة هي عدد المعاملات الموضعية. إذا كان parameter اسم مصفوفة بدليل * أو @، تكون القيمة المستبدلة هي عدد العناصر في المصفوفة. إذا كان parameter اسم مصفوفة مفهرسة متبوعاً بدليل سالب، يُفسر هذا الرقم كقيمة نسبية لواحد أكبر من الفهرس الأقصى لـ parameter، لذا فإن الفهارس السالبة تعد تنازلياً من نهاية المصفوفة، ويشير الفهرس -1 إلى العنصر الأخير.
- ${parameter#word}
- ${parameter##word}
- إزالة نمط السابقة المطابق. تُوسع word لإنتاج نمط كما هو الحال في توسيع مسار الاسم، وتُطابق مع القيمة الموسعة لـ parameter باستخدام القواعد الموضحة تحت Pattern Matching أدناه. إذا طابق النمط بداية قيمة parameter، فإن نتيجة التوسيع هي القيمة الموسعة لـ parameter مع حذف أقصر نمط مطابق (حالة “#” ) أو أطول نمط مطابق (حالة “##” ). إذا كان parameter هو @ أو *، تُطبق عملية إزالة النمط على كل معامل موضعي بالدور، ويكون التوسيع هو القائمة الناتجة. إذا كان parameter متغير مصفوفة بدليل @ أو *، تُطبق عملية إزالة النمط على كل عضو في المصفوفة بالدور، ويكون التوسيع هو القائمة الناتجة.
- ${parameter%word}
- ${parameter%%word}
- إزالة نمط اللاحقة المطابق. تُوسع word لإنتاج نمط كما هو الحال في توسيع مسار الاسم، وتُطابق مع القيمة الموسعة لـ parameter باستخدام القواعد الموضحة تحت Pattern Matching أدناه. إذا طابق النمط جزءاً لاحقاً من القيمة الموسعة لـ parameter، فإن نتيجة التوسيع هي القيمة الموسعة لـ parameter مع حذف أقصر نمط مطابق (حالة “%” ) أو أطول نمط مطابق (حالة “%%” ). إذا كان parameter هو @ أو *، تُطبق عملية إزالة النمط على كل معامل موضعي بالدور، ويكون التوسيع هو القائمة الناتجة. إذا كان parameter متغير مصفوفة بدليل @ أو *، تُطبق عملية إزالة النمط على كل عضو في المصفوفة بالدور، ويكون التوسيع هو القائمة الناتجة.
- ${parameter/pattern/string}
- ${parameter//pattern/string}
- ${parameter/#pattern/string}
- ${parameter/%pattern/string}
- استبدال النمط. يُوسع pattern لإنتاج نمط ويُطابق مع القيمة الموسعة لـ parameter كما هو موضح تحت Pattern Matching أدناه. يُستبدل أطول تطابق لـ pattern في القيمة الموسعة بـ string. تخضع string لتوسيع المد، وتوسيع المعاملات والمتغيرات، والتوسيع الحسابي، واستبدال الأوامر والعمليات، وإزالة الاقتباس.
- في الشكل الأول أعلاه، يُستبدل التطابق الأول فقط. إذا كان هناك شرطتان مائلتان تفصلان parameter و pattern (الشكل الثاني أعلاه)، تُستبدل جميع تطابقات pattern بـ string. إذا كان pattern مسبوقاً بـ # (الشكل الثالث أعلاه)، يجب أن يطابق بداية القيمة الموسعة لـ parameter. إذا كان pattern مسبوقاً بـ % (الشكل الرابع أعلاه)، يجب أن يطابق نهاية القيمة الموسعة لـ parameter.
- إذا كان توسيع string فارغاً، تُحذف تطابقات pattern ويمكن حذف / التي تلي pattern.
- إذا فُعّل خيار الصدفة patsub_replacement باستخدام shopt، تُستبدل أي مثيلات غير مقتبسة من & في string بالجزء المطابق من pattern.
- يمنع اقتباس أي جزء من string الاستبدال في توسيع الجزء المقتبس، بما في ذلك سلاسل الاستبدال المخزنة في متغيرات الصدفة. تهرب الشرطة المائلة الخلفية & في string؛ وتُزال الشرطة المائلة الخلفية للسماح بوجود & حرفي في سلسلة الاستبدال. يمكن أيضاً استخدام الشرطة المائلة الخلفية لهروب شرطة مائلة خلفية؛ تؤدي \\ إلى شرطة مائلة خلفية حرفية في الاستبدال. يجب على المستخدمين توخي الحذر إذا كانت string داخل اقتباس مزدوج لتجنب التفاعلات غير المرغوب فيها بين الشرطة المائلة الخلفية والاقتباس المزدوج، حيث أن للشرطة المائلة الخلفية معنى خاصاً داخل الاقتباس المزدوج. يجري استبدال النمط فحصاً لـ & غير المقتبسة بعد توسيع string؛ يجب على مبرمجي الصدفة اقتباس أي ظهور لـ & يريدون أخذه حرفياً في الاستبدال والتأكد من أن أي مثيلات لـ & يريدون استبدالها غير مقتبسة.
- مثل مشغلات إزالة النمط، تقتبس علامتا الاقتباس المزدوجتان اللتان تحيطان بسلسلة الاستبدال المحارف الموسعة، في حين أن علامتي الاقتباس المزدوجتين اللتين تحيطان بتوسيع المعامل بالكامل لا تفعلان ذلك، لأن التوسيع يُجرى في سياق لا يأخذ أي علامتي اقتباس مزدوجتين محيطتين في الاعتبار.
- إذا فُعّل خيار الصدفة nocasematch، تُجرى المطابقة دون مراعاة حالة الأحرف الأبجدية.
- إذا كان parameter هو @ أو *، فستُطبَّق عملية الاستبدال على كل معامل موضعي بالترتيب، ويكون التوسع هو القائمة الناتجة. وإذا كان parameter متغير مصفوفة مفهرسًا بـ @ أو *، فستُطبَّق عملية الاستبدال على كل عنصر في المصفوفة بالترتيب، ويكون التوسع هو القائمة الناتجة.
- ${parameter^pattern}
- ${parameter^^pattern}
- ${parameter,pattern}
- ${parameter,,pattern}
- تعديل حالة الأحرف. يُعدل هذا التوسع حالة الأحرف الأبجدية في parameter. أولاً، يُوسع pattern لإنتاج نمط كما هو موضح أدناه في قسم مطابقة الأنماط. ثم تفحص صدفة Bash الأحرف في القيمة الموسعة لـ parameter مقابل pattern كما هو موضح أدناه. فإذا طابق حرف ما النمط، تُحوَّل حالته. يجب ألا يحاول النمط مطابقة أكثر من حرف واحد.
- استخدام “^” يُحوِّل الأحرف الصغيرة التي تطابق pattern إلى أحرف كبيرة؛ “,” يُحوِّل الأحرف الكبيرة المطابقة إلى أحرف صغيرة. تفحص المتغيرات ^ و , الحرف الأول في القيمة الموسعة وتُحوِّل حالته إذا طابق pattern؛ بينما تفحص المتغيرات ^^ و ,, جميع الأحرف في القيمة الموسعة وتُحوِّل كل حرف يطابق pattern. إذا حُذف pattern، فإنه يُعامل مثل ?، الذي يطابق كل حرف.
- إذا كان parameter هو @ أو *، فستُطبَّق عملية تعديل الحالة على كل معامل موضعي بالترتيب، ويكون التوسع هو القائمة الناتجة. وإذا كان parameter متغير مصفوفة مفهرسًا بـ @ أو *، فستُطبَّق عملية تعديل الحالة على كل عنصر في المصفوفة بالترتيب، ويكون التوسع هو القائمة الناتجة.
- ${parameter@operator}
- تحويل المعاملات. يكون التوسع إما تحويلًا لقيمة parameter أو معلومات حول parameter نفسه، اعتمادًا على قيمة operator. كل operator هو حرف واحد:
- U
- التوسع عبارة عن سلسلة نصية تمثل قيمة parameter مع تحويل الأحرف الأبجدية الصغيرة إلى كبيرة.
- u
- التوسع عبارة عن سلسلة نصية تمثل قيمة parameter مع تحويل الحرف الأول إلى حرف كبير، إذا كان أبجديًا.
- L
- التوسع عبارة عن سلسلة نصية تمثل قيمة parameter مع تحويل الأحرف الأبجدية الكبيرة إلى صغيرة.
- Q
- التوسع عبارة عن سلسلة نصية تمثل قيمة parameter مقتبسة بتنسيق يمكن إعادة استخدامه كمدخلات.
- E
- التوسع عبارة عن سلسلة نصية تمثل قيمة parameter مع توسيع تسلسلات هروب الشرطة المائلة العكسية كما هو الحال في آلية الاقتباس $'...'.
- P
- التوسع عبارة عن سلسلة نصية ناتجة عن توسيع قيمة parameter كما لو كانت سلسلة محث (انظر قسم المحث أدناه).
- A
- التوسع عبارة عن سلسلة نصية على شكل جملة إسناد أو أمر declare والذي، في حال تقييمه، سيعيد إنشاء parameter بسماته وقيمته.
- K
- يُنتج نسخة مقتبسة (على الأرجح) لقيمة parameter، باستثناء أنه يطبع قيم المصفوفات المفهرسة والمترابطة كتسلسل من أزواج مفتاح-قيمة مقتبسة (انظر المصفوفات أعلاه). تُقتبس المفاتيح والقيم بتنسيق يمكن إعادة استخدامه كمدخلات.
- a
- التوسع عبارة عن سلسلة نصية تتكون من قيم أعلام تمثل سمات parameter.
- k
- مثل التحويل K، ولكنه يوسع مفاتيح وقيم المصفوفات المفهرسة والمترابطة إلى كلمات منفصلة بعد تقسيم الكلمات.
إذا كان parameter هو @ أو *، فستُطبَّق العملية على كل معامل موضعي بالترتيب، ويكون التوسع هو القائمة الناتجة. وإذا كان parameter متغير مصفوفة مفهرسًا بـ @ أو *، فستُطبَّق العملية على كل عنصر في المصفوفة بالترتيب، ويكون التوسع هو القائمة الناتجة.
تخضع نتيجة التوسع لتقسيم الكلمات وتوسع مسار الملف كما هو موضح أدناه.
استبدال الأوامر¶
يسمح استبدال الأوامر لمخرجات أمر ما بأن تحل محل الأمر نفسه. هناك شكلان قياسيان:
$(command)
تجري صدفة Bash التوسع عبر تنفيذ command في بيئة صدفة فرعية واستبدال عملية استبدال الأمر بالمخرجات القياسية للأمر، مع حذف أي أسطر جديدة لاحقة. لا تُحذف الأسطر الجديدة المضمنة، ولكن قد تُزال أثناء تقسيم الكلمات. يمكن استبدال عملية استبدال الأمر $(cat file) بالصيغة المكافئة والأسرع $(< file).
مع شكل الاقتباس الخلفي القديم للاستبدال، تحتفظ الشرطة المائلة العكسية بمعناها الحرفي إلا إذا تبعها $، أو `، أو \. أول اقتباس خلفي غير مسبوق بشرطة مائلة عكسية ينهي عملية استبدال الأمر. عند استخدام الصيغة $(command)، فإن كل الأحرف الموجودة بين القوسين تشكل الأمر؛ ولا يُعامل أي منها معاملة خاصة.
هناك شكل بديل لاستبدال الأوامر:
${c command;}
والذي ينفذ command في بيئة التنفيذ الحالية ويلتقط مخرجاته، مع إزالة الأسطر الجديدة اللاحقة مرة أخرى.
يجب أن يكون الحرف c الذي يلي قوس الفتح مسافة، أو علامة تبويب، أو سطرًا جديدًا، أو |، ويجب أن يكون قوس الإغلاق في موضع يمكن أن تظهر فيه كلمة محجوزة (أي مسبوقًا بمنهي أمر مثل الفاصلة المنقوطة). تسمح صدفة Bash لوصل قوس الإغلاق بالأحرف المتبقية في الكلمة دون الحاجة لتبعه بحرف ميتات صدفة كما تتطلب الكلمة المحجوزة عادةً.
تأخذ أي آثار جانبية لـ command مفعولها فورًا في بيئة التنفيذ الحالية وتستمر في البيئة الحالية بعد اكتمال الأمر (على سبيل المثال، مدمج exit يخرج من الصدفة).
يشبه هذا النوع من استبدال الأوامر سطحيًا تنفيذ وظيفة صدفة غير مسماة: تُنشأ المتغيرات المحلية كما يحدث عند تنفيذ وظيفة صدفة، ويجبر مدمج return الأمر command على الاكتمال؛ ومع ذلك، تتم مشاركة بقية بيئة التنفيذ، بما في ذلك المعاملات الموضعية، مع المستدعِي.
إذا كان الحرف الأول بعد قوس الفتح هو |، فإن البنية تتوسع إلى قيمة متغير الصدفة REPLY بعد تنفيذ command، دون إزالة أي أسطر جديدة لاحقة، وتظل المخرجات القياسية لـ command كما هي في الصدفة المستدعِية. تنشئ Bash REPLY كمتغير محلي غير مضبوط في البداية عند تنفيذ command، وتستعيد قيمة REPLY التي كانت لديه قبل استبدال الأمر بعد اكتمال command، كما هو الحال مع أي متغير محلي.
يمكن أن تكون عمليات استبدال الأوامر متداخلة. للقيام بالتداخل عند استخدام شكل الاقتباس الخلفي، يجب الهروب من الاقتباسات الخلفية الداخلية باستخدام شرطات مائلة عكسية.
إذا ظهر الاستبدال داخل علامتي اقتباس مزدوجتين، فلن تقوم صدفة bash بتقسيم الكلمات وتوسيع مسار الملف على النتائج.
التوسع الحسابي¶
يقيّم التوسع الحسابي تعبيرًا حسابيًا ويستبدله بالنتيجة. صيغة التوسع الحسابي هي:
$((expression))
التنسيق القديم $[تعبير] مهجور وسيُزال في الإصدارات القادمة من bash.
يخضع expression لنفس التوسعات كما لو كان داخل علامتي اقتباس مزدوجتين، لكن أحرف الاقتباس المزدوجة غير المهربة في expression لا تُعامل معاملة خاصة وتُزال. تخضع جميع الرموز في التعبير لتوسع المعاملات والمتغيرات، واستبدال الأوامر، وإزالة الاقتباس. تُعامل النتيجة كتعبير حسابي يجب تقييمه. وبما أن الطريقة التي تتعامل بها صدفة Bash مع الاقتباسات المزدوجة يمكن أن تؤدي إلى سلاسل فارغة، فإن التوسع الحسابي يعاملها كتعبيرات تُقيّم بـ 0. يمكن أن تكون التوسعات الحسابية متداخلة.
يُجرى التقييم وفقًا للقواعد المدرجة أدناه في قسم التقييم الحسابي. إذا كان expression غير صالح، تطبع bash رسالة إلى الخطأ القياسي تشير إلى الفشل، ولا تقوم بالاستبدال، ولا تنفذ الأمر المرتبط بالتوسع.
استبدال العمليات¶
يسمح استبدال العمليات بالإشارة إلى مدخلات أو مخرجات عملية ما باستخدام اسم ملف. يأخذ شكل <(list) أو >(list). تُشغّل قائمة العمليات list بشكل غير متزامن، وتظهر مدخلاتها أو مخرجاتها كاسم ملف. يُمرر اسم الملف هذا كوسيط للأمر الحالي كنتيجة للتوسع.
إذا استُخدمت صيغة >(list)، فإن الكتابة إلى الملف توفر مدخلات لـ list. وإذا استُخدمت صيغة <(list)، فإن قراءة الملف تجلب مخرجات list. يجب ألا تظهر أي مسافة بين < أو > والقوس الأيسر، وإلا فسيُفسر البناء على أنه إعادة توجيه.
يُدعم استبدال العمليات في الأنظمة التي تدعم الأنابيب المسماة (FIFOs) أو طريقة /dev/fd لتسمية الملفات المفتوحة.
عند توفره، يُجرى استبدال العمليات بالتزامن مع توسع المعاملات والمتغيرات، واستبدال الأوامر، والتوسع الحسابي.
تقسيم الكلمات¶
تمسح الصدفة نتائج توسع المعاملات، واستبدال الأوامر، والتوسع الحسابي التي لم تحدث داخل علامتي اقتباس مزدوجتين لغرض تقسيم الكلمات. لا تُقسم الكلمات التي لم تُوسع.
تعامل الصدفة كل حرف في IFS كمحدد، وتقسم نتائج التوسعات الأخرى إلى كلمات باستخدام هذه الأحرف كمنهيات للحقول.
حرف مسافة IFS البيضاء هو مسافة بيضاء كما هي محددة أعلاه (انظر التعاريف) والتي تظهر في قيمة IFS. تُعتبر المسافة، وعلامة التبويب، والسطر الجديد دائمًا مسافات IFS بيضاء، حتى لو لم تظهر في فئة space الخاصة بالمحلية.
إذا كان IFS غير مضبوط، فإن تقسيم الحقول يعمل كما لو كانت قيمته هي <مسافة><تبويب><سطر_جديد>، ويعامل هذه الأحرف كمسافات IFS بيضاء. إذا كانت قيمة IFS فارغة (null)، فلا يحدث تقسيم للكلمات، ولكن لا تزال وسائط null الضمنية (انظر أدناه) تُزال.
يبدأ تقسيم الكلمات بإزالة تسلسلات أحرف مسافة IFS البيضاء من بداية ونهاية نتائج التوسعات السابقة، ثم يُقسم الكلمات المتبقية.
إذا كانت قيمة IFS تتكون فقط من مسافات IFS بيضاء، فإن أي تسلسل من أحرف مسافة IFS البيضاء يحدد حقلًا، لذا يتكون الحقل من أحرف ليست مسافات IFS بيضاء غير مقتبسة، وتنتج الحقول الفارغة فقط من الاقتباس.
إذا احتوى IFS على حرف ليس مسافة بيضاء، فإن أي حرف في قيمة IFS ليس مسافة IFS بيضاء، مع أي أحرف مسافة IFS بيضاء مجاورة، يحدد حقلًا. وهذا يعني أن المحددات المتجاورة التي ليست مسافات IFS بيضاء تنتج حقلًا فارغًا. كما يحدد تسلسل أحرف مسافة IFS البيضاء حقلًا أيضًا.
يُحتفظ بالوسائط الفارغة (null) الصريحة ("" أو '') وتُمرر إلى الأوامر كسلاسل نصية فارغة. أما الوسائط الفارغة الضمنية غير المقتبسة، الناتجة عن توسع المعاملات التي لا تملك قيمًا، فتُزال. إن توسيع معامل ليس له قيمة داخل علامتي اقتباس مزدوجتين ينتج حقلًا فارغًا، والذي يُحتفظ به ويُمرر إلى الأمر كسلسلة نصية فارغة.
عندما يظهر وسيط فارغ مقتبس كجزء من كلمة يكون توسعها غير فارغ، فإن تقسيم الكلمات يزيل جزء الوسيط الفارغ، تاركًا التوسع غير الفارغ. أي أن الكلمة “-d''” يصبح “-d” بعد تقسيم الكلمات وإزالة الوسائط الفارغة.
توسع مسار الملف¶
بعد تقسيم الكلمات، وما لم يُضبط الخيار -f، تمسح صدفة bash كل كلمة بحثًا عن الأحرف * و ? و [. إذا ظهر أحد هذه الأحرف، ولم يكن مقتبسًا، تُعتبر الكلمة حينئذٍ نمطًا، وتُستبدل بقائمة مرتبة من أسماء الملفات التي تطابق النمط (انظر مطابقة الأنماط أدناه) مع مراعاة قيمة متغير الصدفة GLOBSORT.
إذا لم يُعثر على أسماء ملفات مطابقة، ولم يكن خيار الصدفة nullglob مُمكناً، تُترك الكلمة دون تغيير. إذا ضُبط خيار nullglob، ولم يُعثر على تطابقات، تُزال الكلمة. إذا ضُبط خيار الصدفة failglob، ولم يُعثر على تطابقات، يطبع bash رسالة خطأ ولا ينفذ الأمر. إذا مُكّن خيار الصدفة nocaseglob، تُجرى المطابقة دون مراعاة حالة الأحرف الأبجدية. لاحظ أنه عند استخدام تعبيرات النطاق مثل [a-z] (انظر أدناه)، قد تُدرج أحرف من الحالة الأخرى، اعتماداً على إعداد LC_COLLATE.
عند استخدام نمط لتوسيع مسار الملف، فإن الحرف “.” في بداية الاسم أو بعد شرطة مائلة مباشرة يجب مطابقته صراحة، ما لم يكن خيار الصدفة dotglob مضبوطًا. لمطابقة أسماء الملفات . و .., يجب أن يبدأ النمط بـ “.” (على سبيل المثال، “.?”), حتى لو كان dotglob مضبوطًا. إذا كان خيار الصدفة globskipdots مفعلاً، فإن أسماء الملفات . و .. لا تطابق أبدًا، حتى لو بدأ النمط بـ “.”. عند عدم مطابقة مسارات الملفات، فإن الحرف “.” لا يُعامل معاملة خاصة.
عند مطابقة مسار ملف، يجب دائمًا مطابقة حرف الشرطة المائلة صراحة بشرطة مائلة في النمط، ولكن في سياقات المطابقة الأخرى يمكن مطابقته بحرف نمط خاص كما هو موضح أدناه في قسم مطابقة الأنماط.
انظر وصف shopt أدناه في قسم أوامر الصدفة المدمجة للاطلاع على وصف لخيارات الصدفة nocaseglob و nullglob و globskipdots و failglob و dotglob.
يمكن استخدام متغير الصدفة GLOBIGNORE لتقييد مجموعة أسماء الملفات التي تطابق نمطًا ما. إذا ضُبط GLOBIGNORE، فسيُزال كل اسم ملف مطابق يطابق أيضًا أحد الأنماط في GLOBIGNORE من قائمة المطابقات. وإذا ضُبط خيار nocaseglob، تُجرى المطابقة ضد الأنماط في GLOBIGNORE دون مراعاة حالة الأحرف. أسماء الملفات . و .. يتم تجاهلها دائمًا عندما يكون GLOBIGNORE مضبوطًا وغير فارغ. ومع ذلك، فإن ضبط GLOBIGNORE لقيمة غير فارغة يؤدي إلى تفعيل خيار الصدفة dotglob، لذا فإن جميع أسماء الملفات الأخرى التي تبدأ بـ “.” تطابق. وللحصول على السلوك القديم بتجاهل أسماء الملفات التي تبدأ بـ “.”, اجعل “.*” أحد الأنماط في GLOBIGNORE. يُعطل الخيار dotglob عندما يكون GLOBIGNORE غير مضبوط. تراعي مطابقة أنماط GLOBIGNORE إعداد خيار الصدفة extglob.
تتحكم قيمة متغير الصدفة GLOBSORT في كيفية فرز نتائج توسيع مسار الملف، كما هو موضح أعلاه في قسم متغيرات الصدفة.
مطابقة الأنماط
أي حرف يظهر في النمط، بخلاف أحرف الأنماط الخاصة الموضحة أدناه، يطابق نفسه. لا يجوز أن يظهر حرف NUL في النمط. تهرب الشرطة المائلة العكسية الحرف التالي لها؛ وتُهمل الشرطة المائلة المهربة عند المطابقة. يجب اقتباس أحرف الأنماط الخاصة إذا أريد مطابقتها حرفيًا.
لأحرف الأنماط الخاصة المعاني التالية:
- *
- يطابق أي سلسلة نصية، بما في ذلك السلسلة الفارغة. عندما يكون خيار الصدفة globstar مفعلاً، ويُستخدم * في سياق توسيع مسار الملف، فإن نجمتين * متجاورتين تُستخدمان كنمط واحد تطابقان جميع الملفات وصفرًا أو أكثر من الأدلة والأدلة الفرعية. وإذا تبعتهما /، فإن النجمتين المتجاورتين * تطابقان الأدلة والأدلة الفرعية فقط.
- ?
- يطابق أي محرف مفرد.
- [...]
- يطابق أي حرف من الأحرف المحصورة بين القوسين. يُعرف هذا باسم تعبير بين قوسين ويطابق حرفًا واحدًا. يشير زوج من الأحرف يفصل بينهما واصلة إلى تعبير نطاق؛ ويطابق أي حرف يقع بين هذين الحرفين، بما في ذلك الحرفان نفساهما، باستخدام تسلسل الترتيب ومجموعة الأحرف للمحلية الحالية. إذا كان الحرف الأول بعد [ هو ! أو ^، فسيُطابق أي حرف ليس ضمن النطاق. لمطابقة -، ضمنها كأول أو آخر حرف في المجموعة. لمطابقة ]، ضمنها كأول حرف في المجموعة.
- يُحدد ترتيب فرز الأحرف في تعبيرات النطاق، والأحرف المضمنة في النطاق، بواسطة المحلية الحالية وقيم متغيرات الصدفة LC_COLLATE أو LC_ALL، إن وجدت. وللحصول على التفسير التقليدي لتعبيرات النطاق، حيث [a-d] تكافئ [abcd]، اضبط قيمة متغيرات الصدفة LC_COLLATE أو LC_ALL إلى C، أو فعّل خيار الصدفة globasciiranges.
- ضمن التعبير بين قوسين، يمكن تحديد أصناف الأحرف باستخدام الصيغة [:class:]، حيث class هو أحد الأصناف التالية المحددة في معيار POSIX :
- يطابق صنف الأحرف أي حرف ينتمي إلى ذلك الصنف. يطابق صنف الأحرف word الحروف، والأرقام، والحرف _.
- ضمن التعبير بين قوسين، يمكن تحديد صنف مكافئ باستخدام الصيغة [=c=]، والذي يطابق جميع الأحرف التي لها نفس وزن الترتيب (كما هو محدد في المحلية الحالية) كالحرف c.
- ضمن التعبير بين قوسين، الصيغة [.symbol.] تطابق رمز الترتيب symbol.
إذا فُعّل خيار الصدفة extglob باستخدام المدمج shopt، ستتعرف الصدفة على عدة معاملات موسعة لمطابقة الأنماط. في الوصف التالي، pattern-list هي قائمة من نمط واحد أو أكثر مفصولة بـ |. يمكن تكوين أنماط مركبة باستخدام واحد أو أكثر من الأنماط الفرعية التالية:
- ?(pattern-list)
- يطابق صفرًا أو تكرارًا واحدًا للأنماط المعطاة.
- *(pattern-list)
- يطابق صفرًا أو أكثر من تكرارات الأنماط المعطاة.
- +(pattern-list)
- يطابق تكرارًا واحدًا أو أكثر للأنماط المعطاة.
- @(pattern-list)
- يطابق واحدًا من الأنماط المعطاة.
- !(pattern-list)
- يطابق أي شيء باستثناء واحد من الأنماط المعطاة.
يغير خيار extglob سلوك المحلل، لأن الأقواس تُعامل عادةً كمعاملات ذات معنى نحوي. لضمان تحليل أنماط المطابقة الموسعة بشكل صحيح، تأكد من تفعيل extglob قبل تحليل الأبنية التي تحتوي على الأنماط، بما في ذلك وظائف الصدفة واستبدالات الأوامر.
عند مطابقة أسماء الملفات، يحدد خيار الصدفة dotglob مجموعة أسماء الملفات التي تُختبر: فعند تفعيل dotglob، تتضمن مجموعة أسماء الملفات جميع الملفات التي تبدأ بـ “.”, ولكن . و .. يجب مطابقتها بنمط أو نمط فرعي يبدأ بنقطة؛ وعند تعطيله، لا تتضمن المجموعة أي أسماء ملفات تبدأ بـ “.” ما لم يبدأ النمط أو النمط الفرعي بـ “.”. إذا كان خيار الصدفة globskipdots مفعلاً، فإن أسماء الملفات . و .. لا تظهر أبدًا في المجموعة. وكما ذكر أعلاه، فإن “.” لها معنى خاص فقط عند مطابقة أسماء الملفات.
تكون مطابقة الأنماط الموسعة المعقدة مقابل السلاسل الطويلة بطيئة، خاصةً عندما تحتوي الأنماط على تبادلات والسلاسل على مطابقات متعددة. قد يكون استخدام مطابقات منفصلة مقابل سلاسل أقصر، أو استخدام مصفوفات من السلاسل بدلاً من سلسلة طويلة واحدة، أسرع.
إزالة الاقتباس¶
بعد التوسعات السابقة، تُزال جميع حالات الظهور غير المقتبسة للأحرف \ و ' و " التي لم تنتج عن إحدى التوسعات المذكورة أعلاه.
إعادة التوجيه¶
قبل تنفيذ الأمر، قد تُوجَّه مدخلاته ومخرجاته عبر إعادة التوجيه باستخدام ترميز خاص تفسره الصدفة. تسمح إعادة التوجيه بمضاعفة واصفات ملفات الأوامر، أو فتحها، أو إغلاقها، أو جعلها تشير إلى ملفات مختلفة، ويمكنها تغيير الملفات التي يقرأ منها الأمر ويكتب إليها. عند استخدامها مع المدمج exec، تُعدل إعادات التوجيه واصفات الملفات في بيئة تنفيذ الصدفة الحالية. قد تسبق معاملات إعادة التوجيه التالية أمرًا بسيطًا أو تظهر في أي مكان فيه، أو قد تتبع أمرًا. تُعالَج إعادات التوجيه بالترتيب الذي تظهر به، من اليسار إلى اليمين.
كل إعادة توجيه يمكن أن يسبقها رقم واصف ملف، يمكن بدلاً من ذلك أن تسبقها كلمة بصيغة {varname}. في هذه الحالة، لكل معامل إعادة توجيه باستثناء >&- و <&-، تخصص الصدفة واصف ملف أكبر من أو يساوي 10 وتسنده إلى varname. وإذا سبقت {varname} المعاملين >&- أو <&-، فإن قيمة varname تحدد واصف الملف المراد إغلاقه. وإذا زُودت {varname}، فإن إعادة التوجيه تستمر خارج نطاق الأمر، مما يسمح لمبرمج الصدفة بإدارة عمر واصف الملف يدويًا دون استخدام المدمج exec. يدير خيار الصدفة varredir_close هذا السلوك.
في الأوصاف التالية، إذا حُذف رقم واصف الملف، وكان الحرف الأول من معامل إعادة التوجيه هو “<”, فإن إعادة التوجيه تشير إلى المدخلات القياسية (واصف الملف 0). وإذا كان الحرف الأول من معامل إعادة التوجيه هو “>”, فإن إعادة التوجيه تشير إلى المخرجات القياسية (واصف الملف 1).
يخضع word الذي يلي معامل إعادة التوجيه في الأوصاف التالية، ما لم يُنص على خلاف ذلك، لتوسع الأقواس، وتوسع التيلدا، وتوسع المعاملات والمتغيرات، واستبدال الأوامر، والتوسع الحسابي، وإزالة الاقتباس، وتوسيع مسار الملف، وتقسيم الكلمات. وإذا توسع إلى أكثر من كلمة واحدة، تُبلغ 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 يمكنه جعل عمليات إعادة التوجيه تسري في الصدفة الحالية.
إعادة توجيه المدخلات¶
إعادة توجيه المدخلات تفتح الملف الذي ينتج اسمه عن توسع word للقراءة على واصف الملف n، أو المدخلات القياسية (واصف الملف 0) إذا لم يُحدد n.
الصيغة العامة لإعادة توجيه المدخلات هي:
[n]<word
إعادة توجيه المخرجات¶
إعادة توجيه المخرجات تفتح الملف الذي ينتج اسمه عن توسع word للكتابة على واصف الملف n، أو المخرجات القياسية (واصف الملف 1) إذا لم يُحدد n. إذا لم يكن الملف موجودًا فسيُنشأ؛ وإذا كان موجودًا فسيُقص إلى حجم صفر.
الصيغة العامة لإعادة توجيه المخرجات هي:
[n]>word
إذا كان معامل إعادة التوجيه هو >، وفُعّل الخيار noclobber للأمر المدمج set، فستفشل إعادة التوجيه إذا كان الملف الذي ينتج اسمه عن توسع word موجودًا وكان ملفًا عاديًا. أما إذا كان معامل إعادة التوجيه هو >|، أو كان المعامل هو > وكان الخيار noclobber للأمر المدمج set غير مفعل، فستحاول bash إجراء إعادة التوجيه حتى لو كان الملف المسمى بـ word موجودًا.
إلحاق المخرجات الموجهة¶
إعادة توجيه المخرجات بهذه الطريقة تفتح الملف الذي ينتج اسمه عن توسع word للإلحاق على واصف الملف n، أو المخرجات القياسية (واصف الملف 1) إذا لم يُحدد n. وإذا لم يكن الملف موجودًا فسيُنشأ.
الصيغة العامة لإلحاق المخرجات هي:
[n]>>word
إعادة توجيه المخرجات القياسية والخطأ القياسي¶
تُعيد هذه البنية توجيه كل من المخرج القياسي (واصف الملف 1) ومخرج الخطأ القياسي (واصف الملف 2) إلى الملف الذي يكون اسمه هو توسيع word.
هناك تنسيقان لإعادة توجيه المخرج القياسي والخطأ القياسي:
&>word
يُفضل الشكل الأول من بين الشكلين. وهذا يعادل دلاليًا
>word 2>&1
عند استخدام الشكل الثاني، قد لا يتوسع word إلى رقم أو -. إذا حدث ذلك، تُطبق معاملات إعادة توجيه أخرى (انظر Duplicating File Descriptors أدناه) لأسباب تتعلق بالتوافق.
إلحاق المخرج القياسي والخطأ القياسي¶
تُلحق هذه البنية كل من المخرج القياسي (واصف الملف 1) ومخرج الخطأ القياسي (واصف الملف 2) بالملف الذي يكون اسمه هو توسيع word.
تنسيق إلحاق المخرج القياسي والخطأ القياسي هو:
&>>word
وهذا يعادل دلاليًا
>>word 2>&1
(انظر Duplicating File Descriptors أدناه).
مستندات "هنا" (Here Documents)¶
يوجه هذا النوع من إعادة التوجيه الـ صدفة لقراءة المدخلات من المصدر الحالي حتى تقرأ سطرًا يحتوي فقط على delimiter (بدون فراغات لاحقة). تصبح جميع الأسطر المقروءة حتى تلك النقطة هي المدخل القياسي (أو واصف الملف n إذا حُدد n) لأمر ما.
تنسيق مستندات "هنا" هو:
[n]<<[-]word
here-document delimiter
لا تقوم الـ صدفة بإجراء توسيع للمعاملات والمتغيرات، أو استبدال للأوامر، أو توسيع حسابي، أو توسيع لمسار الملف على word.
إذا كان أي جزء من word مقتبسًا، فإن الـ delimiter يكون نتيجة إزالة الاقتباس من word، ولا يتم توسيع الأسطر في مستند "هنا". أما إذا كان word غير مقتبس، فإن الـ delimiter يكون هو word نفسها، ويُعامل نص مستند "هنا" بشكل مشابه لسلسلة مقتبسة اقتباسًا مزدوجًا: تخضع جميع أسطر مستند "هنا" لتوسيع المعاملات، واستبدال الأوامر، والتوسيع الحسابي، وتُعامل متوالية المحارف \<newline> حرفيًا، ويجب استخدام \ لاقتباس المحارف \ و $ و `؛ ومع ذلك، لا يكون لمحارف الاقتباس المزدوج أي معنى خاص.
إذا كان معامل إعادة التوجيه هو <<-، فإن الـ صدفة تجرد جميع محارف علامة التبويب البادئة من أسطر الإدخال ومن السطر الذي يحتوي على delimiter. يتيح هذا لمحارف مستندات "هنا" داخل سكريبتات الـ صدفة أن تُزاح بمسافة بادئة بشكل طبيعي.
إذا لم يكن المحدد مقتبسًا، تُعامل متوالية \<newline> كاتصال للسطر: يُضم السطران ويُزال الخط المائل العكسي والسطر الجديد. يحدث هذا أثناء قراءة مستند "هنا"، قبل التحقق من محدد النهاية، لذا يمكن للأسطر المضمومة أن تشكل محدد النهاية.
سلاسل "هنا" (Here Strings)¶
متغير من مستندات "هنا"، وتنسيقه هو:
[n]<<<word
يخضع word لتوسيع التلدة (~)، وتوسيع المعاملات والمتغيرات، واستبدال الأوامر، والتوسيع الحسابي، وإزالة الاقتباس. لا يتم إجراء توسيع لمسار الملف أو تقسيم الكلمات. تُقدم النتيجة كسلسلة نصية واحدة، مع إلحاق سطر جديد، إلى الأمر في مدخله القياسي (أو واصف الملف n إذا حُدد n).
مضاعفة واصفات الملفات¶
معامل إعادة التوجيه
[n]<&word
يُستخدم لمضاعفة واصفات ملفات الإدخال. إذا توسع word إلى رقم واحد أو أكثر، يُجعل واصف الملف n نسخة من واصف الملف ذاك. يكون هناك خطأ في إعادة التوجيه إذا لم تحدد الأرقام في word واصف ملف مفتوح للإدخال. إذا كانت قيمة word هي -، يُغلق واصف الملف n. إذا لم يُحدد n، فسيستخدم هذا المدخل القياسي (واصف الملف 0).
المعامل
[n]>&word
يُستخدم بشكل مشابه لمضاعفة واصفات ملفات الإخراج. إذا لم يُحدد n، فسيستخدم هذا المخرج القياسي (واصف الملف 1). يكون هناك خطأ في إعادة التوجيه إذا لم تحدد الأرقام في word واصف ملف مفتوح للإخراج. إذا كانت قيمة word هي -، يُغلق واصف الملف n. كحالة خاصة، إذا حُذف n، ولم يتوسع word إلى رقم واحد أو أكثر أو -، فإن هذا يعيد توجيه المخرج القياسي والخطأ القياسي كما وُصف سابقًا.
نقل واصفات الملفات¶
معامل إعادة التوجيه
[n]<&digit-
ينقل واصف الملف digit إلى واصف الملف n، أو المدخل القياسي (واصف الملف 0) إذا لم يُحدد n. يُغلق digit بعد مضاعفته إلى n.
وبالمثل، معامل إعادة التوجيه
[n]>&digit-
ينقل واصف الملف digit إلى واصف الملف n، أو المخرج القياسي (واصف الملف 1) إذا لم يُحدد n.
فتح واصفات الملفات للقراءة والكتابة¶
معامل إعادة التوجيه
[n]<>word
يفتح الملف الذي يكون اسمه هو توسيع word لكل من القراءة والكتابة على واصف الملف n، أو على واصف الملف 0 إذا لم يُحدد n. إذا لم يكن الملف موجودًا، فإنه يُنشأ.
الأسماء المستعارة¶
تسمح الأسماء المستعارة باستبدال سلسلة نصية بكلمة موجودة في موضع في المدخلات حيث يمكن أن تكون الكلمة الأولى في أمر بسيط. الأسماء المستعارة لها أسماء وقيم مقابلة تُضبط وتُلغى باستخدام أوامر alias و unalias المدمجة (انظر SHELL BUILTIN COMMANDS أدناه).
إذا قرأت الـ صدفة كلمة غير مقتبسة في الموضع الصحيح، فإنها تتحقق من الكلمة لمعرفة ما إذا كانت تطابق اسمًا مستعارًا. إذا تطابقت، تستبدل الـ صدفة الكلمة بقيمة الاسم المستعار، وتقرأ تلك القيمة كما لو كانت قد قُرئت بدلاً من الكلمة. لا تنظر الـ صدفة إلى أي محارف تلي الكلمة قبل محاولة استبدال الاسم المستعار.
المحارف / و $ و ` و = وأي من المحارف التحويلية (metacharacters) الخاصة بالـ صدفة أو محارف الاقتباس المذكورة أعلاه لا يجوز أن تظهر في اسم مستعار. قد يحتوي نص الاستبدال على أي مدخلات صدفة صالحة، بما في ذلك المحارف التحويلية. تُختبر الكلمة الأولى من نص الاستبدال بحثًا عن أسماء مستعارة، ولكن الكلمة المتطابقة مع اسم مستعار يجري توسيعه لا تُوسع مرة ثانية. هذا يعني أنه يمكن تعيين اسم مستعار لـ 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 (local variables). عادةً ما تُشارك المتغيرات وقيمها بين الدالة والـ المستدعِي. إذا أُعلن عن متغير كـ local، فإن نطاق رؤية المتغير يقتصر على تلك الدالة وأطفالها (بما في ذلك الدوال التي تستدعيها).
في الوصف التالي، النطاق الحالي هو دالة قيد التنفيذ حاليًا. تتكون النطاقات السابقة من المستدعِي لتلك الدالة وهكذا، وصولاً إلى “global” النطاق، حيث لا تنفذ الـ صدفة أي دالة صدفة. المتغير المحلي في النطاق الحالي هو متغير يُعلن عنه باستخدام local أو declare المدمجين في الدالة التي تُنفذ حاليًا.
المتغيرات المحلية “shadow” المتغيرات التي تحمل نفس الاسم والمعلن عنها في نطاقات سابقة. على سبيل المثال، يخفي متغير محلي معلن عنه في دالة المتغيرات التي تحمل نفس الاسم والمعلن عنها في نطاقات سابقة، بما في ذلك المتغيرات العامة: تشير المراجع والتعيينات إلى المتغير المحلي، تاركة المتغيرات في النطاقات السابقة دون تعديل. عندما تعود الدالة، يصبح المتغير العام مرئيًا مرة أخرى.
تستخدم الـ صدفة نطاقًا ديناميكيًا للتحكم في رؤية المتغير داخل الدوال. باستخدام النطاق الديناميكي، تكون المتغيرات المرئية وقيمها نتيجة تسلسل استدعاءات الدوال التي أدت بالوصول إلى الدالة الحالية. تعتمد قيمة المتغير الذي تراه الدالة على قيمته داخل الـ المستدعِي، إن وجد، سواء كان ذلك الـ المستدعِي هو النطاق العام أو دالة صدفة أخرى. هذه هي أيضًا القيمة التي يظللها إعلان المتغير المحلي، والقيمة التي تُستعاد عند عودة الدالة.
على سبيل المثال، إذا أُعلن عن متغير var كمحلي في الدالة func1، واستدعت func1 دالة أخرى func2، فإن المراجع إلى var التي تتم من داخل func2 تؤول إلى المتغير المحلي var من func1، مما يظلل أي متغير عام يسمى var.
يعمل الأمر المدمج unset أيضًا باستخدام نفس النطاق الديناميكي: إذا كان المتغير محليًا للنطاق الحالي، فإن unset يلغي ضبطه؛ وإلا فإن إلغاء الضبط سيشير إلى المتغير الموجود في أي نطاق استدعاء كما هو موضح أعلاه. إذا أُلغي ضبط متغير في النطاق المحلي الحالي، فإنه يظل كذلك (يظهر كملغى الضبط) حتى يُعاد ضبطه في ذلك النطاق أو حتى تعود الدالة. بمجرد عودة الدالة، يصبح أي مثيل للمتغير في نطاق سابق مرئيًا. إذا عمل unset على متغير في نطاق سابق، فإن أي مثيل لمتغير بهذا الاسم كان مظللاً يصبح مرئيًا (انظر أدناه كيف يغير خيار الـ صدفة localvar_unset هذا السلوك).
متغير FUNCNEST، إذا ضُبط على قيمة عددية أكبر من 0، يحدد الحد الأقصى لمستوى تداخل الدوال. استدعاءات الدوال التي تتجاوز الحد تؤدي إلى إحباط الأمر بالكامل.
إذا نُفذ الأمر المدمج return في دالة، تكتمل الدالة ويُستأنف التنفيذ مع الأمر التالي بعد استدعاء الدالة. إذا زُود return بمعامل عددي، فسيكون ذلك هو حالة إرجاع الدالة؛ وإلا فإن حالة إرجاع الدالة هي حالة الخروج لآخر أمر نُفذ قبل return. يُنفذ أي أمر مرتبط بمصيدة RETURN قبل استئناف التنفيذ. عندما تكتمل الدالة، تُستعاد قيم المعاملات الموضعية والمعامل الخاص # إلى القيم التي كانت عليها قبل تنفيذ الدالة.
خيار -f للأوامر المدمجة declare أو typeset يسرد أسماء الدوال وتعريفاتها. خيار -F لـ declare أو typeset يسرد أسماء الدوال فقط (واختياريًا ملف المصدر ورقم السطر، إذا كان خيار الـ صدفة extdebug مفعلاً). قد تُصدر الدوال بحيث يكون لعمليات الـ صدفة التابعة (تلك التي تُنشأ عند تنفيذ استدعاء صدفة منفصل) تعريفاتها آليًا باستخدام الخيار -f للأمر المدمج export. خيار -f للأمر المدمج unset يحذف تعريف الدالة.
قد تكون الدوال عودية (recursive). يمكن استخدام متغير FUNCNEST للحد من عمق مكدس استدعاء الدوال وتقييد عدد استدعاءات الدوال. مبدئيًا، لا يفرض bash أي حد على عدد الاستدعاءات العودية.
التقييم الحسابي¶
تسمح الـ صدفة بتقييم التعبيرات الحسابية في ظروف معينة (انظر الأوامر المدمجة let و declare، والأمر المركب ((، وأمر for الحسابي، والأمر الشرطي [[، و Arithmetic Expansion).
يتم التقييم في أكبر أعداد صحيحة ثابتة العرض متاحة، دون التحقق من تجاوز السعة، على الرغم من أن القسمة على 0 يتم اصطيادها ووضع علامة عليها كخطأ. المعاملات وأولويتها وارتباطها وقيمها هي نفسها كما في لغة C. قائمة المعاملات التالية مجمعة في مستويات من المعاملات المتساوية الأولوية. تُدرج المستويات بترتيب تنازلي للأولوية.
- id++ id--
- الزيادة اللاحقة والنقصان اللاحق للمتغير
- ++id --id
- الزيادة السابقة والنقصان السابق للمتغير
- - +
- الناقص والزائد الأحادي
- ! ~
- النفي المنطقي ونفي البتات
- **
- الرفع إلى أس
- * / %
- الضرب، القسمة، باقي القسمة
- + -
- الجمع، الطرح
- << >>
- إزاحة البتات لليسار ولليمين
- <= >= < >
- المقارنة
- == !=
- المساواة وعدم المساواة
- &
- AND للبتات
- ^
- OR الحصرية للبتات (XOR)
- |
- OR للبتات
- &&
- AND منطقية
- ||
- OR منطقية
- expr?expr:expr
- معامل شرطي
- = *= /= %= += -= <<= >>= &= ^= |=
- تعيين
- expr1 , expr2
- فاصلة
يُسمح بمتغيرات الـ صدفة كمعاملات؛ ويتم توسيع المعاملات قبل تقييم التعبير. داخل التعبير، يمكن أيضًا الإشارة إلى متغيرات الـ صدفة بالاسم دون استخدام صيغة توسيع المعاملات. هذا يعني أنه يمكنك استخدام "x"، حيث x هو اسم متغير صدفة، في تعبير حسابي، وستقوم الـ صدفة بتقييم قيمته كتعبير واستخدام النتيجة. متغير الـ صدفة الذي يكون فارغًا أو غير مضبوط يتم تقييمه إلى 0 عند الإشارة إليه بالاسم في تعبير.
تُقيم قيمة المتغير كتعبير حسابي عند الإشارة إليه، أو عند تعيين قيمة لمتغير أُعطي سمة العدد الصحيح (integer) باستخدام declare -i. تُقيم القيمة الفارغة إلى 0. لا يشترط أن يكون لمتغير الـ صدفة سمة العدد الصحيح مفعلة لاستخدامه في تعبير.
تتبع الثوابت الصحيحة تعريف لغة C، بدون لاحقات أو ثوابت محارف. تُفسر الثوابت التي تبدأ بـ 0 كأرقام ثمانية. يشير البدء بـ 0x أو 0X إلى نظام سداسي عشر. بخلاف ذلك، تأخذ الأرقام الشكل [base#]n، حيث يكون base الاختياري عددًا عشريًا بين 2 و 64 يمثل القاعدة الحسابية، و n هو رقم في تلك القاعدة. إذا حُذف base#، تُستخدم القاعدة 10. عند تحديد n، إذا لزم محرف غير رقمي، تُمثل الأرقام الأكبر من 9 بالأحرف الصغيرة، والأحرف الكبيرة، و @، و _، بهذا الترتيب. إذا كان base أقل من أو يساوي 36، يمكن استخدام الأحرف الصغيرة والكبيرة بالتبادل لتمثيل الأرقام بين 10 و 35.
تُقيم المعاملات بترتيب الأولوية. تُقيم التعبيرات الفرعية داخل الأقواس أولاً وقد تتجاوز قواعد الأولوية أعلاه.
التعبيرات الشرطية¶
تُستخدم التعبيرات الشرطية بواسطة الأمر المركب [[ والأوامر المدمجة test و [ لاختبار سمات الملفات وإجراء مقارنات السلاسل النصية والحسابية. تحدد أوامر test و [ سلوكها بناءً على عدد المعاملات؛ انظر أوصاف تلك الأوامر لأي إجراءات أخرى خاصة بالأوامر.
تتشكل التعبيرات من الأساسيات الأحادية أو الثنائية المدرجة أدناه. غالبًا ما تُستخدم التعبيرات الأحادية لفحص حالة ملف أو متغير صدفة. تُستخدم المعاملات الثنائية لمقارنات السلاسل النصية والأرقام وسمات الملفات.
يتعامل Bash مع عدة أسماء ملفات بشكل خاص عند استخدامها في التعبيرات. إذا كان نظام التشغيل الذي يعمل عليه bash يوفر هذه الملفات الخاصة، فسيستخدمها bash؛ وإلا فإنه سيحاكيها داخليًا بهذا السلوك: إذا كان أي معامل file لأحد الأساسيات على الشكل /dev/fd/n, فإن bash يتحقق من واصف الملف n. إذا كان معامل file لأحد الأساسيات هو واحد من /dev/stdin, /dev/stdout, أو /dev/stderr, يتحقق bash من واصف الملف 0 أو 1 أو 2، على التوالي.
ما لم ينص على خلاف ذلك، فإن الأساسيات التي تعمل على الملفات تتبع الروابط الرمزية وتعمل على هدف الرابط، بدلاً من الرابط نفسه.
عند استخدامه مع [[، أو عندما تكون الـ صدفة في وضع posix، فإن المعاملين < و > يقومان بالفرز معجميًا باستخدام الإعدادات المحلية الحالية. عندما لا تكون الـ صدفة في وضع posix، يقوم أمر test بالفرز بناءً على ترتيب ASCII.
- -a file
- صحيح إذا كان file موجودًا.
- -b file
- صحيح إذا كان file موجودًا وكان ملف جهاز كتلي خاص.
- -c file
- صحيح إذا كان file موجودًا وكان ملف محارف خاص.
- -d file
- صحيح إذا كان file موجودًا وكان دليلاً.
- -e file
- صحيح إذا كان file موجودًا.
- -f file
- صحيح إذا كان file موجودًا وكان ملفًا عاديًا.
- -g file
- صحيح إذا كان file موجودًا وكانت سمة set-group-id مضبوطة له.
- -h file
- صحيح إذا كان file موجودًا وكان رابطًا رمزيًا.
- -k file
- صحيح إذا كان file موجودًا وبت “sticky” مضبوط.
- -p file
- صحيح إذا كان file موجودًا وكان أنبوبًا مسمى (FIFO).
- -r file
- صحيح إذا كان file موجودًا وكان قابلاً للقراءة.
- -s file
- صحيح إذا كان file موجودًا وكان حجمه أكبر من صفر.
- -t fd
- صحيح إذا كان واصف الملف fd مفتوحًا ويشير إلى طرفية.
- -u file
- صحيح إذا كان file موجودًا وكان بت set-user-id مضبوطًا له.
- -w file
- صحيح إذا كان file موجودًا وكان قابلاً للكتابة.
- -x file
- صحيح إذا كان file موجودًا وكان قابلاً للتنفيذ.
- -G file
- صحيح إذا كان file موجودًا وكان مملوكًا لمعرف المجموعة الفعلي (effective group id).
- -L file
- صحيح إذا كان file موجودًا وكان رابطًا رمزيًا.
- -N file
- صحيح إذا كان file موجودًا وجرى تعديله منذ آخر وصول إليه.
- -O file
- صحيح إذا كان file موجودًا وكان مملوكًا لمعرف المستخدم الفعلي (effective user id).
- -S ملف
- صحيح إذا كان ملف موجودًا وكان مقبسًا.
- -o اسم_الخيار
- صحيح إذا كان خيار الصدفة اسم_الخيار مُفعلًا. انظر قائمة الخيارات تحت وصف الخيار -o للأمر المدمج set أدناه.
- -v اسم_المتغير
- صحيح إذا كان متغير الصدفة اسم_المتغير مُعينًا (أُسندت إليه قيمة). إذا كان اسم_المتغير اسم متغير مصفوفة مفهرسة متبوعًا بـ @ أو *، فإن هذا يعيد قيمة صحيحة إذا كانت المصفوفة تحتوي على أي عناصر مُعينة. إذا كان اسم_المتغير اسم متغير مصفوفة ترابطية متبوعًا بـ @ أو *، فإن هذا يعيد قيمة صحيحة إذا كان العنصر صاحب ذلك المفتاح مُعينًا.
- -R اسم_المتغير
- صحيح إذا كان متغير الصدفة اسم_المتغير مُعينًا وكان مرجع اسم.
- -z سلسلة
- صحيح إذا كان طول سلسلة صفرًا.
- سلسلة
- -n سلسلة
- صحيح إذا كان طول سلسلة غير صفري.
- سلسلة1 = سلسلة2
- string1 = string2
- صحيح إذا كانت السلسلتان متساويتين. يجب استخدام = مع الأمر test للتوافق مع معايير POSIX الأنماط كما هو موصوف أعلاه (الأوامر المركبة).
- سلسلة1 != سلسلة2
- صحيح إذا لم تكن السلسلتان متساويتين.
- سلسلة1 < سلسلة2
- صحيح إذا كانت سلسلة1 تسبق سلسلة2 في الترتيب المعجمي.
- سلسلة1 > سلسلة2
- صحيح إذا كانت سلسلة1 تأتي بعد سلسلة2 في الترتيب المعجمي.
- ملف1 -ef ملف2
- صحيح إذا كان ملف1 و ملف2 يشيران إلى نفس الجهاز وأرقام الفهرسة (inode).
- ملف1 -nt ملف2
- صحيح إذا كان ملف1 أحدث (وفقًا لتاريخ التعديل) من ملف2، أو إذا كان ملف1 موجودًا و ملف2 غير موجود.
- ملف1 -ot ملف2
- صحيح إذا كان ملف1 أقدم من ملف2، أو إذا كان ملف2 موجودًا و ملف1 غير موجود.
- معطى1 OP معطى2
- OP هو أحد الرموز -eq أو -ne أو -lt أو -le أو -gt أو -ge. هذه المعاملات الحسابية الثنائية تعيد قيمة صحيحة إذا كان معطى1 مساويًا لـ، أو غير مساوٍ لـ، أو أقل من، أو أقل من أو يساوي، أو أكبر من، أو أكبر من أو يساوي معطى2، على التوالي. يمكن أن يكون معطى1 و معطى2 أعدادًا صحيحة موجبة أو سالبة. عند استخدامهما مع الأمر [[، يُقيم معطى1 و معطى2 كتعبيرات حسابية (انظر التقييم الحسابي أعلاه). وبما أن التوسيعات التي يجريها الأمر [[ على معطى1 و معطى2 قد تؤدي إلى سلاسل فارغة، فإن تقييم التعبير الحسابي يعاملها كتعبيرات قيمتها 0.
توسيع الأوامر البسيطة¶
عندما تنفذ الصدفة أمرًا بسيطًا، فإنها تجري التوسيعات والتعيينات وإعادة التوجيهات التالية، من اليسار إلى اليمين، بالترتيب التالي.
- 1.
- تُحفظ الكلمات التي وضع المحلل عليها علامة تعيينات متغيرات (تلك التي تسبق اسم الأمر) وإعادة التوجيهات لمعالجتها لاحقًا.
- 2.
- تُوسع الكلمات التي ليست تعيينات متغيرات أو إعادة توجيهات. إذا بقيت أي كلمات بعد التوسيع، تُتخذ الكلمة الأولى كاسم للأمر والكلمات المتبقية كمعطيات.
- 3.
- تُنفذ إعادة التوجيهات كما هو موصوف أعلاه تحت REDIRECTION.
- 4.
- يخضع النص الموجود بعد = في كل تعيين متغير لتوسيع التيلدا (tilde)، وتوسيع المعلمات، واستبدال الأوامر، والتوسيع الحسابي، وإزالة الاقتباسات قبل إسناده إلى المتغير.
إذا لم ينتج اسم أمر، فإن تعيينات المتغيرات تؤثر على بيئة الصدفة الحالية. في حالة وجود مثل هذا الأمر (الذي يتكون فقط من جمل تعيين وإعادة توجيه)، تُنفذ جمل التعيين قبل إعادة التوجيه. خلاف ذلك، تُضاف المتغيرات إلى بيئة الأمر المُنفذ ولا تؤثر على بيئة الصدفة الحالية. إذا حاولت أي من التعيينات إسناد قيمة لمتغير للقراءة فقط، يحدث خطأ، ويخرج الأمر بحالة غير صفرية.
إذا لم ينتج اسم أمر، تُنفذ إعادة التوجيهات، لكنها لا تؤثر على بيئة الصدفة الحالية. يؤدي خطأ إعادة التوجيه إلى خروج الأمر بحالة غير صفرية.
إذا تبقى اسم أمر بعد التوسيع، يستمر التنفيذ كما هو موصوف أدناه. خلاف ذلك، يخرج الأمر. إذا احتوى أحد التوسيعات على استبدال أمر، فإن حالة خروج الأمر هي حالة خروج آخر استبدال أمر نُفذ. إذا لم توجد أي استبدالات أوامر، يخرج الأمر بحالة صفرية.
تنفيذ الأوامر¶
بعد تقسيم الأمر إلى كلمات، إذا نتج عنه أمر بسيط وقائمة اختيارية من المعطيات، تجري الصدفة الإجراءات التالية.
إذا لم يحتوي اسم الأمر على شرطات مائلة، تحاول الصدفة تحديد مكانه. إذا وجدت دالة صدفة بهذا الاسم، تُستدعى تلك الدالة كما هو موصوف أعلاه في FUNCTIONS. إذا لم يطابق الاسم أي دالة، تبحث الصدفة عنه في قائمة أوامر الصدفة المدمجة. إذا وُجد تطابق، يُستدعى ذلك الأمر المدمج.
إذا لم يكن الاسم دالة صدفة ولا أمرًا مدمجًا، ولم يحتوِ على شرطات مائلة، تبحث bash في كل عنصر من عناصر PATH عن دليل يحتوي على ملف قابل للتنفيذ بهذا الاسم. تستخدم bash جدول تجزئة (hash table) لتذكر المسارات الكاملة للملفات القابلة للتنفيذ (انظر hash تحت SHELL BUILTIN COMMANDS أدناه). تجري Bash بحثًا كاملاً في أدلة PATH فقط إذا لم يُعثر على الأمر في جدول التجزئة. إذا لم ينجح البحث، تبحث الصدفة عن دالة صدفة معرفة باسم command_not_found_handle. إذا كانت هذه الدالة موجودة، تُستدعى في بيئة تنفيذ منفصلة مع الأمر الأصلي ومعطياته كمعطيات لها، وتصبح حالة خروج الدالة هي حالة خروج تلك الصدفة الفرعية. إذا لم تكن تلك الدالة معرفة، تطبع الصدفة رسالة خطأ وتعيد حالة خروج 127.
إذا نجح البحث، أو إذا احتوى اسم الأمر على شرطة مائلة واحدة أو أكثر، تنفذ الصدفة البرنامج المسمى في بيئة تنفيذ منفصلة. يُضبط المعطى 0 على الاسم المعطى، وتُضبط المعطيات المتبقية للأمر على المعطيات المعطاة، إن وجدت.
إذا فشل هذا التنفيذ لأن الملف ليس بتنسيق قابل للتنفيذ، ولم يكن الملف دليلاً، فيُفترض أنه سكربت صدفة، وهو ملف يحتوي على أوامر صدفة، وتنشئ الصدفة نسخة جديدة من نفسها لتنفيذه. تحاول Bash تحديد ما إذا كان الملف ملفًا نصيًا أم ملفًا ثنائيًا، ولن تنفذ الملفات التي تحدد أنها ثنائية. تعيد هذه الصدفة الفرعية تهيئة نفسها، بحيث يكون الأثر كما لو استُدعيت صدفة جديدة للتعامل مع السكربت، باستثناء أن مواقع الأوامر التي تذكرها الأب (انظر hash أدناه تحت SHELL BUILTIN COMMANDS) يحتفظ بها الابن.
إذا كان البرنامج ملفًا يبدأ بـ #!، فإن بقية السطر الأول تحدد مفسرًا للبرنامج. تنفذ الصدفة المفسر المحدد في أنظمة التشغيل التي لا تتعامل مع هذا التنسيق القابل للتنفيذ بنفسها. تتكون معطيات المفسر من معطى اختياري واحد يلي اسم المفسر في السطر الأول من البرنامج، يليه اسم البرنامج، ثم معطيات الأمر، إن وجدت.
بيئة تنفيذ الأوامر¶
للصدفة بيئة تنفيذ، تتكون مما يلي:
- الملفات المفتوحة الموروثة عن الصدفة عند الاستدعاء، كما عُدلت بواسطة إعادة التوجيهات المقدمة للأمر المدمج exec.
- دليل العمل الحالي كما هو محدد بواسطة cd أو pushd أو popd، أو موروث عن الصدفة عند الاستدعاء.
- قناع وضع إنشاء الملفات كما هو محدد بواسطة umask أو موروث من أب الصدفة.
- المصائد (traps) الحالية المحددة بواسطة trap.
- معلمات الصدفة التي عُينت عن طريق إسناد المتغيرات أو باستخدام set أو الموروثة من أب الصدفة في البيئة.
- دوال الصدفة المعرفة أثناء التنفيذ أو الموروثة من أب الصدفة في البيئة.
- الخيارات المُفعلة عند الاستدعاء (إما بشكل مبدئي أو بمعطيات سطر الأوامر) أو بواسطة set.
- الخيارات المُفعلة بواسطة shopt.
- الأسماء المستعارة للصدفة المعرفة بـ alias.
- معرفات العمليات المختلفة، بما في ذلك معرفات المهام الخلفية، وقيمة $$، وقيمة PPID.
عندما يراد تنفيذ أمر بسيط بخلاف الأوامر المدمجة أو دوال الصدفة، فإنه يُستدعى في بيئة تنفيذ منفصلة تتكون مما يلي. ما لم يُذكر خلاف ذلك، تُورث القيم من الصدفة.
- ملفات الصدفة المفتوحة، بالإضافة إلى أي تعديلات وإضافات محددة بواسطة إعادة التوجيهات للأمر.
- دليل العمل الحالي.
- قناع وضع إنشاء الملفات.
- متغيرات ودوال الصدفة المميزة للتصدير، إلى جانب المتغيرات المصدرة للأمر، والممررة في البيئة.
- تُعاد المصائد التي التقطتها الصدفة إلى القيم الموروثة من أب الصدفة، والمصائد التي تجاهلتها الصدفة تظل مُتجاهلة.
لا يمكن لأمر استُدعي في هذه البيئة المنفصلة أن يؤثر على بيئة تنفيذ الصدفة.
الصدفة الفرعية subshell هي نسخة من عملية الصدفة.
استبدال الأوامر، والأوامر المجمعة بالأقواس، والأوامر غير المتزامنة تُستدعى في بيئة صدفة فرعية هي نسخة مكررة من بيئة الصدفة، باستثناء أن المصائد التي التقطتها الصدفة تُعاد إلى القيم التي ورثتها الصدفة من أبها عند الاستدعاء. الأوامر المدمجة التي تُستدعى كجزء من أنبوب (pipeline)، باستثناء ربما العنصر الأخير اعتمادًا على قيمة خيار الصدفة lastpipe، تُنفذ أيضًا في بيئة صدفة فرعية. التغييرات التي تجرى على بيئة الصدفة الفرعية لا يمكن أن تؤثر على بيئة تنفيذ الصدفة.
عندما تكون الصدفة في وضع posix، ترث الصدف الفرعية التي أُنشئت لتنفيذ استبدالات الأوامر قيمة الخيار -e من الصدفة الأب. عندما لا تكون في وضع posix، تمسح bash الخيار -e في تلك الصدف الفرعية. انظر وصف خيار الصدفة inherit_errexit أدناه لمعرفة كيفية التحكم في هذا السلوك عندما لا تكون في وضع posix.
إذا تبع الأمر علامة & ولم يكن التحكم في المهام نشطًا، فإن الإدخال القياسي المبدئي للأمر هو الملف الفارغ /dev/null. خلاف ذلك، يرث الأمر المستدعى واصفات ملفات الصدفة المستدعية كما عُدلت بواسطة إعادة التوجيهات.
البيئة¶
عند استدعاء برنامج ما، يُعطى مصفوفة من السلاسل تسمى البيئة. هذه قائمة من أزواج الاسم-القيمة، على شكل الاسم=القيمة.
توفر الصدفة عدة طرق للتلاعب بالبيئة. عند الاستدعاء، تمسح الصدفة بيئتها الخاصة وتنشئ معلمة لكل اسم تجده، وتميزه آليًا لـ التصدير إلى العمليات الأبناء. ترث الأوامر المنفذة البيئة. تعدل الأوامر export و declare -x و unset البيئة عن طريق إضافة وحذف المعلمات والدوال. إذا عُدلت قيمة معلمة في البيئة، تصبح القيمة الجديدة آليًا جزءًا من البيئة، محل القديمة. تتكون البيئة الموروثة عن أي أمر مُنفذ من بيئة الصدفة الأولية، والتي قد تُعدل قيمها في الصدفة، ناقصًا أي أزواج أُزيلت بواسطة الأمرين unset أو export -n، بالإضافة إلى أي إضافات عبر الأمرين 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 الإشارة SIGINT، فإنها تخرج من أي حلقات تنفيذ. وفي جميع الحالات، تتجاهل bash الإشارة SIGQUIT. إذا كان التحكم في المهام ساري المفعول، تتجاهل bash الإشارات SIGTTIN و SIGTTOU و SIGTSTP.
يعدل الأمر المدمج trap معالجة الصدفة للإشارات، كما هو موصوف أدناه.
الأوامر غير المدمجة التي تنفذها bash لديها معالجات إشارات مضبوطة على القيم الموروثة من أب الصدفة، ما لم يضبطها الأمر trap لتكون مُتجاهلة، وفي هذه الحالة ستتجاهلها العملية الابنة أيضًا. عندما لا يكون التحكم في المهام ساري المفعول، تتجاهل الأوامر غير المتزامنة الإشارتين SIGINT و SIGQUIT بالإضافة إلى هذه المعالجات الموروثة. الأوامر التي تعمل نتيجة لاستبدال الأوامر تتجاهل إشارات التحكم في المهام المولدة من لوحة المفاتيح SIGTTIN و SIGTTOU و SIGTSTP.
تخرج الصدفة بشكل مبدئي عند استلام SIGHUP. قبل الخروج، تعيد الصدفة التفاعلية إرسال SIGHUP إلى جميع المهام، الجاري تنفيذها أو المتوقفة. ترسل الصدفة SIGCONT إلى المهام المتوقفة لضمان تلقيها الإشارة SIGHUP (انظر JOB CONTROL أدناه لمزيد من المعلومات حول المهام الجارية والمتوقفة). لمنع الصدفة من إرسال الإشارة إلى مهمة معينة، أزلها من جدول المهام باستخدام الأمر المدمج disown (انظر SHELL BUILTIN COMMANDS أدناه) أو ميزها لعدم تلقي SIGHUP باستخدام disown -h.
إذا ضُبط خيار الصدفة huponexit باستخدام shopt، ترسل bash إشارة SIGHUP إلى جميع المهام عند خروج صدفة ولوج تفاعلية.
إذا كانت bash تنتظر اكتمال أمر ما واستقبلت إشارة قد ضُبطت لها مصيدة، فلن تنفذ المصيدة حتى يكتمل الأمر. إذا كانت bash تنتظر أمرًا غير متزامن عبر الأمر المدمج wait، واستقبلت إشارة قد ضُبطت لها مصيدة، فسيعود الأمر المدمج wait فورًا بحالة خروج أكبر من 128، وتنفذ الصدفة المصيدة مباشرة بعد ذلك.
عندما لا يكون التحكم في المهام مُفعلًا، وتكون bash تنتظر اكتمال أمر في الواجهة، تستقبل الصدفة الإشارات المولدة من لوحة المفاتيح مثل SIGINT (التي تولد عادةً عن طريق ^C) التي ينوي المستخدمون عادةً إرسالها إلى ذلك الأمر. يحدث هذا لأن الصدفة والأمر يقعان في نفس مجموعة العمليات الخاصة بالطرفية، و ^C يرسل SIGINT إلى جميع العمليات في تلك المجموعة. وبما أن bash لا تفعل التحكم في المهام بشكل مبدئي عندما لا تكون الصدفة تفاعلية، فإن هذا السيناريو هو الأكثر شيوعًا في الصدف غير التفاعلية.
عندما يكون التحكم في المهام مُفعلًا، وتكون bash تنتظر اكتمال أمر في الواجهة، لا تستقبل الصدفة الإشارات المولدة من لوحة المفاتيح، لأنها ليست في نفس مجموعة العمليات الخاصة بالطرفية. هذا السيناريو هو الأكثر شيوعًا في الصدف التفاعلية، حيث تحاول bash تفعيل التحكم في المهام بشكل مبدئي. انظر JOB CONTROL أدناه لمزيد من المعلومات حول مجموعات العمليات.
عندما لا يكون التحكم في المهام مُفعلًا، وتستقبل bash إشارة SIGINT أثناء انتظار أمر في الواجهة، فإنها تنتظر حتى ينتهي ذلك الأمر ثم تقرر ما ستفعله بشأن الإشارة SIGINT:
- 1.
- إذا انتهى الأمر بسبب الإشارة SIGINT، تستنتج bash أن المستخدم قصد إرسال SIGINT إلى الصدفة أيضًا، وتتصرف بناءً على SIGINT (على سبيل المثال، بتشغيل مصيدة SIGINT، أو الخروج من صدفة غير تفاعلية، أو العودة إلى المستوى الأعلى لقراءة أمر جديد).
- 2.
- إذا لم ينتهِ الأمر بسبب SIGINT، فهذا يعني أن البرنامج عالج SIGINT بنفسه ولم يعاملها كإشارة قاتلة. في تلك الحالة، لا تعامل bash الإشارة SIGINT كإشارة قاتلة أيضًا، بل تفترض أن SIGINT استُخدمت كجزء من عملية البرنامج العادية (على سبيل المثال، يستخدمها emacs لإحباط أوامر التحرير) أو أنه جرى التخلص منها عمدًا. ومع ذلك، ستشغل bash أي مصيدة ضُبطت على SIGINT، كما تفعل مع أي إشارة أخرى مُصادة تستقبلها أثناء انتظارها اكتمال أمر الواجهة، وذلك من أجل التوافق.
عندما يكون التحكم في المهام مُفعلًا، لا تستقبل bash الإشارات المولدة من لوحة المفاتيح مثل SIGINT أثناء انتظارها لأمر في الواجهة. لا تولي الصدفة التفاعلية اهتمامًا للإشارة SIGINT، حتى لو انتهى أمر الواجهة نتيجة لذلك، بخلاف تدوين حالة خروجه. إذا لم تكن الصدفة تفاعلية، وانتهى أمر الواجهة بسبب SIGINT، تتظاهر bash بأنها استقبلت SIGINT بنفسها (السيناريو 1 أعلاه)، من أجل التوافق.
التحكم في المهام¶
يشير التحكم في المهام إلى القدرة على إيقاف (تعليق) تنفيذ العمليات انتقائيًا ومواصلة (استئناف) تنفيذها في وقت لاحق. عادةً ما يستخدم المستخدم هذه الميزة عبر واجهة تفاعلية يوفرها بشكل مشترك برنامج تشغيل الطرفية في نواة نظام التشغيل و bash.
تربط الصدفة مهمة بكل أنبوب (pipeline). وهي تحتفظ بجدول للمهام التي يجري تنفيذها حاليًا، والذي يعرضه الأمر jobs. لكل مهمة رقم مهمة، يعرضه الأمر jobs بين قوسين. تبدأ أرقام المهام من 1. عندما تبدأ bash مهمة بشكل غير متزامن (في الخلفية)، تطبع سطرًا يشبه ما يلي:
[1] 25647
مما يشير إلى أن هذه المهمة هي المهمة رقم 1 وأن معرف العملية لآخر عملية في الأنبوب المرتبط بهذه المهمة هو 25647. جميع العمليات في أنبوب واحد هي أعضاء في نفس المهمة. تستخدم Bash تجريد المهمة كأساس للتحكم في المهام.
لتسهيل تنفيذ واجهة المستخدم للتحكم في المهام، لكل عملية معرف مجموعة عمليات، ويحافظ نظام التشغيل على مفهوم معرف مجموعة عمليات الطرفية الحالية. يرتبط معرف مجموعة عمليات الطرفية هذا بـ الطرفية المتحكمة.
يُقال إن العمليات التي لها نفس معرف مجموعة العمليات هي جزء من نفس مجموعة العمليات. يتلقى أعضاء مجموعة عمليات الواجهة (العمليات التي يتساوى معرف مجموعة عملياتها مع معرف مجموعة عمليات الطرفية الحالية) الإشارات المولدة من لوحة المفاتيح مثل SIGINT. يُقال إن العمليات في مجموعة عمليات الواجهة هي عمليات واجهة. عمليات الخلفية هي تلك التي يختلف معرف مجموعة عملياتها عن معرف مجموعة عمليات الطرفية المتحكمة؛ مثل هذه العمليات تكون محصنة ضد الإشارات المولدة من لوحة المفاتيح. يُسمح فقط لعمليات الواجهة بالقراءة من الطرفية المتحكمة أو، إذا حدد المستخدم ذلك بـ “stty tostop”, الكتابة إليها. يرسل النظام إشارة SIGTTIN (SIGTTOU) إلى عمليات الخلفية التي تحاول القراءة من الطرفية (أو الكتابة إليها عندما “tostop” يكون قيد المفعول)، والتي تؤدي إلى تعليق العملية ما لم يجرِ التقاطها.
إذا كان نظام التشغيل الذي تعمل عليه bash يدعم التحكم في المهام، فإن bash تحتوي على تسهيلات لاستخدامه. إن كتابة محرف التعليق (عادةً ^Z، Control-Z) أثناء تشغيل العملية يوقف تلك العملية ويعيد التحكم إلى bash. كتابة محرف التعليق المؤجل (عادةً ^Y، Control-Y) تؤدي إلى إيقاف العملية عندما تحاول قراءة مدخلات من الطرفية، وتعيد التحكم إلى bash. يقوم المستخدم بعد ذلك بالتلاعب بحالة هذه المهمة، باستخدام الأمر bg لمواصلتها في الخلفية، أو الأمر fg لمواصلتها في الواجهة، أو الأمر kill لقتلها. يسري مفعول محرف التعليق فورًا، وله أثر جانبي إضافي يتمثل في التخلص من أي مخرجات معلقة أو كتابة مسبقة. لإجبار عملية خلفية على التوقف، أو إيقاف عملية غير مرتبطة بجلسة الطرفية الحالية، أرسل إليها إشارة SIGSTOP باستخدام kill.
هناك عدد من الطرق للإشارة إلى مهمة في الصدفة. يستهل المحرف % مواصفة المهمة (jobspec).
يمكن الإشارة إلى المهمة رقم n بـ %n. يمكن أيضًا الإشارة إلى المهمة باستخدام بادئة الاسم المستخدم لبدئها، أو باستخدام سلسلة فرعية تظهر في سطر أوامرها. على سبيل المثال، %ce تشير إلى مهمة يبدأ اسم أمرها بـ ce. ومن ناحية أخرى، فإن استخدام %?ce يشير إلى أي مهمة تحتوي سطر أوامرها على السلسلة ce. إذا طابقت البادئة أو السلسلة الفرعية أكثر من مهمة واحدة، فستبلغ bash عن خطأ.
يشير الرمزان %% و %+ إلى مفهوم الصدفة عن المهمة الحالية. كما يشير رمز % بمفرده (بدون مواصفة مهمة مرافقة) أيضًا إلى المهمة الحالية. ويشير %- إلى المهمة السابقة. عندما تبدأ مهمة في الخلفية، أو تتوقف مهمة أثناء وجودها في الواجهة، أو تُستأنف مهمة في الخلفية، فإنها تصبح المهمة الحالية. وتصبح المهمة التي كانت هي المهمة الحالية هي المهمة السابقة. وعندما تنتهي المهمة الحالية، تصبح المهمة السابقة هي المهمة الحالية. إذا لم توجد سوى مهمة واحدة، فيمكن استخدام كل من %+ و %- للإشارة إلى تلك المهمة. في المخرجات المتعلقة بالمهام (على سبيل المثال، مخرجات الأمر jobs)، تُميز المهمة الحالية دائمًا بعلامة +، والمهمة السابقة بعلامة -.
مجرد تسمية المهمة يمكن أن يُستخدم لجلبها إلى الواجهة: %1 هو مرادف لـ “fg %1”, جلب المهمة 1 من الخلفية إلى الواجهة. وبالمثل، “%1 &” يستأنف المهمة 1 في الخلفية، وهو ما يعادل “bg %1”.
تتعلم الصدفة فورًا متى تغيرت حالة المهمة. عادةً، تنتظر bash حتى يحين موعد طباعة المحث قبل إخطار المستخدم بالتغييرات في حالة المهمة حتى لا تقاطع أي مخرجات أخرى، رغم أنها ستخطر بالتغييرات في حالة المهمة بعد اكتمال أمر الواجهة في قائمة، قبل تنفيذ الأمر التالي في القائمة. إذا فُعل الخيار -b للأمر المدمج set، تبلغ bash عن تغييرات الحالة فورًا. تنفذ Bash أي مصيدة على SIGCHLD لكل ابن ينتهي.
عندما تنتهي مهمة وتخطر bash المستخدم بذلك، تزيل bash المهمة من الجدول. لن تظهر في مخرجات jobs، لكن wait سيبلغ عن حالة خروجها، طالما أنه زُوّد بمعرف العملية المرتبط بالمهمة كمعطى. عندما يفرغ الجدول، تبدأ أرقام المهام مرة أخرى من 1.
إذا حاول مستخدم الخروج من bash بينما توجد مهام متوقفة (أو جارية، إذا فُعل خيار الصدفة checkjobs باستخدام الأمر المدمج shopt)، تطبع الصدفة رسالة تحذير، وتدرج المهام وحالاتها إذا كان خيار checkjobs مُفعلًا. يمكن حينئذٍ استخدام الأمر jobs لفحص حالتها. إذا حاول المستخدم الخروج مرة أخرى مباشرة، دون أمر فاصل، فلن تطبع bash تحذيرًا آخر، وتنهي أي مهام متوقفة.
عندما تكون الصدفة بانتظار مهمة أو عملية باستخدام الأمر المدمج wait، وكان التحكم في المهام مُفعلًا، فسيعود wait عندما تتغير حالة المهمة. يؤدي الخيار -f إلى جعل wait ينتظر حتى تنتهي المهمة أو العملية قبل العودة.
المحث¶
عند التنفيذ التفاعلي، تعرض bash المحث الرئيس PS1 عندما تكون مستعدة لقراءة أمر، والمحث الثانوي PS2 عندما تحتاج إلى مزيد من المدخلات لإكمال الأمر.
تفحص Bash قيمة متغير المصفوفة PROMPT_COMMAND قبل طباعة كل محث رئيس مباشرة. إذا عُينت أي عناصر في PROMPT_COMMAND وكانت غير فارغة، تنفذ Bash كل قيمة، بالترتيب الرقمي، تمامًا كما لو كُتبت على سطر الأوامر. تعرض Bash القيمة PS0 بعد قراءة الأمر وقبل تنفيذه.
تعرض Bash القيمة PS4 كما هو موصوف أعلاه قبل تتبع كل أمر عندما يكون الخيار -x مُفعلًا.
تسمح Bash بتخصيص سلاسل المحث PS0 و PS1 و PS2 و PS4 عن طريق إدراج عدد من المحارف الخاصة المسبوقة بشرطة مائلة خلفية والتي يُفك ترميزها كما يلي:
- \a
- محرف جرس ASCII (07).
- \d
- التاريخ بتنسيق “Weekday Month Date” (على سبيل المثال، “Tue May 26”).
- \D{تنسيق}
- يُمرر تنسيق إلى strftime(3) وتُدرج النتيجة في سلسلة المحث؛ يؤدي التنسيق الفارغ إلى تمثيل وقت خاص بالإعدادات المحلية. الأقواس مطلوبة.
- \e
- محرف هروب ASCII (033).
- \h
- اسم المضيف حتى الأول “.”.
- \H
- اسم المضيف.
- \j
- عدد المهام التي تديرها الصدفة حاليًا.
- \l
- الاسم الأساسي لاسم جهاز طرفية الصدفة (على سبيل المثال، “ttys0”).
- \n
- سطر جديد.
- \r
- رجوع بدايه السطر.
- \s
- اسم الصدفة: الاسم الأساسي لـ $0 (الجزء الذي يلي الشرطة المائلة الأخيرة).
- \t
- الوقت الحالي بتنسيق 24 ساعة HH:MM:SS.
- \T
- الوقت الحالي بتنسيق 12 ساعة HH:MM:SS.
- \@
- الوقت الحالي بتنسيق 12 ساعة ص/م.
- \A
- الوقت الحالي بتنسيق 24 ساعة HH:MM.
- \u
- اسم المستخدم للمستخدم الحالي.
- \v
- إصدار bash (على سبيل المثال، 2.00).
- \V
- إصدار bash، النسخة + مستوى الترقيع (على سبيل المثال، 2.00.0)
- \w
- قيمة متغير الصدفة PWD (أي $PWD)، مع اختصار $HOME بتيلدا (يستخدم قيمة متغير PROMPT_DIRTRIM).
- \W
- الاسم الأساسي لـ $PWD، مع اختصار $HOME بتيلدا.
- \!
- رقم التأريخ لهذا الأمر.
- \#
- رقم الأمر لهذا الأمر.
- \$
- إذا كان معرف المستخدم (UID) الفعلي هو 0، فستكون العلامة #، وإلا فستكون $.
- \nnn
- المحرف المقابل للرقم الثماني nnn.
- \\
- شرطة مائلة عكسية.
- \[
- يبدأ تسلسلًا من المحارف غير القابلة للطباعة، والتي يمكن استخدامها لدمج تسلسل تحكم للطرفية داخل المحث.
- \]
- ينهي تسلسلًا من المحارف غير القابلة للطباعة.
عادةً ما يختلف رقم الأمر عن رقم التأريخ: رقم تأريخ الأمر هو موضعه في قائمة التأريخ، والتي قد تتضمن أوامر استُرجعت من ملف التأريخ (انظر HISTORY أدناه)، بينما رقم الأمر هو موضعه في تسلسل الأوامر المنفذة خلال جلسة الصدفة الحالية. بعد فك ترميز السلسلة، تُوسّع عبر توسيع المعاملات، واستبدال الأوامر، والتوسيع الحسابي، وإزالة الاقتباس، وذلك وفقًا لقيمة خيار الصدفة promptvars (انظر وصف الأمر shopt تحت SHELL BUILTIN COMMANDS أدناه). قد يؤدي هذا إلى آثار جانبية غير مرغوب فيها إذا ظهرت أجزاء مهربة من السلسلة داخل استبدال الأوامر أو احتوت على محارف خاصة بتوسيع الكلمات.
READLINE¶
هذه هي المكتبة التي تتولى قراءة المدخلات عند استخدام صدفة تفاعلية، ما لم يُزود خيار --noediting عند استدعاء الصدفة. يُستخدم تحرير السطور أيضًا عند استخدام الخيار -e مع أمر read المدمج. الأوامر المبدئية لتحرير السطور تشبه أوامر emacs؛ كما تتوفر واجهة تحرير سطور بأسلوب vi. يمكن تفعيل تحرير السطور في أي وقت باستخدام الخيارين -o emacs أو -o vi للأمر المدمج set (انظر SHELL BUILTIN COMMANDS أدناه). لإيقاف تحرير السطور بعد تشغيل الصدفة، استخدم الخيارين +o emacs أو +o vi للأمر المدمج set.
تمثيل Readline¶
يستخدم هذا القسم مفاهيم التحرير بأسلوب Emacs وتمثيله لضربات المفاتيح. يُرمز لمفاتيح التحكم بـ C-key، فعلى سبيل المثال، C-n تعني Control-N. وبالمثل، يُرمز لمفاتيح meta بـ M-key، لذا M-x تعني Meta-X. غالبًا ما يُسمى مفتاح Meta بـ “Alt” أو “Option”.
في لوحات المفاتيح التي لا تحتوي على مفتاح Meta، تعني M-x الضغط على ESC x، أي اضغط ثم حرر مفتاح Escape، ثم اضغط وحرر مفتاح x، بالتسلسل. هذا يجعل ESC هو بادئة meta. والجمع M-C-x يعني ESC Control-x: اضغط ثم حرر مفتاح Escape، ثم اضغط مع الاستمرار على مفتاح Control أثناء الضغط على مفتاح x، ثم حررهما معًا.
في بعض لوحات المفاتيح، ينتج مغير مفتاح Meta محارف مع تعيين البت الثامن (0200). يمكنك استخدام المتغير enable-meta-key للتحكم في القيام بذلك من عدمه، إذا كانت لوحة المفاتيح تسمح بذلك. وفي كثير من الحالات الأخرى، تقوم الطرفية أو محاكي الطرفية بتحويل المفتاح المغير بـ meta إلى تسلسل مفاتيح يبدأ بـ ESC كما هو موضح في الفقرة السابقة.
إذا كان مفتاح Meta لديك ينتج تسلسل مفاتيح ببادئة ESC meta، يمكنك جعل ارتباطات المفاتيح M-key التي تحددها (انظر Readline Key Bindings أدناه) تقوم بنفس الشيء عن طريق ضبط المتغير force-meta-prefix.
يمكن إعطاء أوامر Readline وسائط رقمية، والتي تعمل عادةً كعداد تكرار. ومع ذلك، تكون إشارة الوسيط أحيانًا هي المؤثرة. تمرير وسيط سالب لأمر يعمل في الاتجاه الأمامي (مثل kill-line) يجعل ذلك الأمر يعمل في الاتجاه الخلفي. الأوامر التي ينحرف سلوكها مع الوسائط عن هذا موضحة أدناه.
تُسمى النقطة بموضع المؤشر الحالي، وتُشير العلامة إلى موضع مؤشر محفوظ. يُشار إلى النص بين النقطة والعلامة باسم المنطقة. لدى Readline مفهوم المنطقة النشطة: عندما تكون المنطقة نشطة، يقوم readline بإعادة العرض مع تمييز المنطقة باستخدام قيمة المتغير active-region-start-color. يقوم المتغير enable-active-region بتشغيل هذا أو إيقافه. تقوم أوامر عدة بضبط المنطقة لتكون نشطة؛ وتلك الأوامر موضحة أدناه.
عندما يوصف أمر بأنه يقوم بـ قتل نص، فإن النص المحذوف يُحفظ لاسترجاعه المحتمل مستقبلاً (النتر). يُحفظ النص المقتول في حلقة قتل. تجمع عمليات القتل المتتالية النص المحذوف في وحدة واحدة، والتي يمكن نترها دفعة واحدة. الأوامر التي لا تقتل النص تفصل بين كتل النص في حلقة القتل.
تهيِئة Readline¶
يُخصص Readline بوضع الأوامر في ملف تهيئة (ملف inputrc). يُؤخذ اسم هذا الملف من قيمة متغير الصدفة INPUTRC. إذا لم يُعين هذا المتغير، فإن القيمة المبدئية هي ~/.inputrc. إذا كان ذلك الملف غير موجود أو لا يمكن قراءته، يبحث readline عن /etc/inputrc. عندما يبدأ برنامج يستخدم مكتبة readline، يقرأ readline ملف التهيئة ويضبط ارتباطات المفاتيح والمتغيرات الموجودة هناك، قبل قراءة أي مدخلات من المستخدم.
لا يُسمح إلا ببضعة تراكيب أساسية في ملف inputrc. تُتجاهل الأسطر الفارغة. الأسطر التي تبدأ بـ # هي تعليقات. الأسطر التي تبدأ بـ $ تشير إلى تراكيب شرطية. الأسطر الأخرى تدل على ارتباطات المفاتيح وإعدادات المتغيرات.
يمكن تغيير ارتباطات المفاتيح المبدئية في هذا القسم باستخدام أوامر ارتباط المفاتيح في ملف inputrc. البرامج التي تستخدم مكتبة readline، بما في ذلك bash، قد تضيف أوامرها وارتباطاتها الخاصة.
على سبيل المثال، وضع
M-Control-u: universal-argument
داخل inputrc سيجعل M-C-u ينفذ أمر readline المسمى universal-argument.
قد تحتوي ارتباطات المفاتيح على أسماء المحارف الرمزية التالية: DEL، وESC، وESCAPE، وLFD، وNEWLINE، وRET، وRETURN، وRUBOUT (مفتاح رجوع حذف)، وSPACE، وSPC، وTAB.
بالإضافة إلى أسماء الأوامر، يسمح readline بربط المفاتيح بسلسلة نصوص تُدرج عند الضغط على المفتاح (macro). الفرق بين الماكرو والأمر هو أن الماكرو يكون محاطًا بعلامات اقتباس فردية أو مزدوجة.
ارتباطات مفاتيح 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 المتاحة عند تحديد تسلسلات المفاتيح هي
بالإضافة إلى تسلسلات الهروب بأسلوب GNU Emacs، تتوفر مجموعة ثانية من مهربات الشرطة المائلة العكسية:
- \a
- تنبيه (جرس)
- \b
- backspace
- \d
- delete
- \f
- تغذية الصفحة
- \n
- newline
- \r
- رجوع العربة
- \t
- جدولة أفقية
- \v
- علامة جدولة عمودية
- \nnn
- المحرف ذو الثماني بتات الذي قيمته هي القيمة الثمانية nnn (من رقم إلى ثلاثة أرقام).
- \xHH
- المحرف المكون من ثمانية بتات والذي قيمته هي القيمة الست عشرية HH (رقم أو رقمان ست عشريان).
عند إدخال نص الماكرو، يجب استخدام علامات اقتباس مفردة أو مزدوجة للإشارة إلى تعريف الماكرو. يُفترض أن النص غير المقتبس هو اسم دالة. تُوسّع مهربات الشرطة المائلة العكسية الموضحة أعلاه في متن الماكرو. تقوم الشرطة المائلة العكسية بإسكار أي محرف آخر في نص الماكرو، بما في ذلك " و '.
ستعرض Bash أو تعدل ارتباطات مفاتيح readline الحالية باستخدام الأمر المدمج bind. الخيارات -o emacs أو -o vi للأمر المدمج set (انظر SHELL BUILTIN COMMANDS أدناه) تغير وضع التحرير أثناء الاستخدام التفاعلي.
متغيرات Readline¶
لدى Readline متغيرات يمكن استخدامها لمزيد من تخصيص سلوكها. يمكن ضبط متغير في ملف inputrc بعبارة على الصيغة
set variable-name value
باستثناء ما هو ملاحظ، يمكن لمتغيرات readline أن تأخذ القيم On أو Off (بغض النظر عن حالة الأحرف). تُتجاهل أسماء المتغيرات غير المعترف بها. عندما يقرأ readline قيمة متغير، فإن القيم الفارغة أو الصفرية، “on” (غير حساسة لحالة الأحرف)، و “1” تكافئ On. جميع القيم الأخرى تكافئ Off.
يسرد الأمر bind -V أسماء وقيم متغيرات readline الحالية (انظر SHELL BUILTIN COMMANDS أدناه).
المتغيرات وقيمها المبدئية هي:
- active-region-start-color
- متغير سلسلة نصية يتحكم في لون النص والخلفية عند عرض النص في المنطقة النشطة (انظر وصف enable-active-region أدناه). يجب ألا تشغل هذه السلسلة أي مواضع محارف فعلية على الشاشة، لذا يجب أن تتكون فقط من تسلسلات هروب الطرفية. تُخرّج إلى الطرفية قبل عرض النص في المنطقة النشطة. يُعاد تعيين هذا المتغير إلى القيمة المبدئية كلما تغير نوع الطرفية. القيمة المبدئية هي السلسلة التي تضع الطرفية في وضع البروز (standout)، كما هو مستمد من وصف terminfo الخاص بالطرفية. قد تكون القيمة النموذجية هي “\e[01;33m”.
- active-region-end-color
- متغير سلسلة نصية “undoes” تأثيرات active-region-start-color ويستعيد “normal” مظهر عرض الطرفية بعد عرض النص في المنطقة النشطة. يجب ألا تشغل هذه السلسلة أي مواضع محارف فعلية على الشاشة، لذا يجب أن تتكون فقط من تسلسلات هروب الطرفية. تُخرّج إلى الطرفية بعد عرض النص في المنطقة النشطة. يُعاد تعيين هذا المتغير إلى القيمة المبدئية كلما تغير نوع الطرفية. القيمة المبدئية هي السلسلة التي تستعيد الطرفية من وضع البروز (standout)، كما هو مستمد من وصف terminfo الخاص بالطرفية. قد تكون القيمة النموذجية هي “\e[0m”.
- bell-style (audible)
- يتحكم فيما يحدث عندما يريد readline رنين جرس الطرفية. إذا ضُبط على none، فلن يرن readline الجرس أبدًا. وإذا ضُبط على visible، سيستخدم readline جرسًا مرئيًا إذا كان متاحًا. وإذا ضُبط على audible، سيحاول readline رنين جرس الطرفية.
- bind-tty-special-chars (On)
- إذا ضُبط على On، سيحاول readline ربط محارف التحكم التي تُعامل بشكل خاص من قبل برنامج تشغيل طرفية النواة بمكافئاتها في readline. هذه الارتباطات تتجاوز ارتباطات readline المبدئية الموصوفة هنا. اكتب “stty -a” عند محث bash لرؤية إعدادات الطرفية الحالية، بما في ذلك محارف التحكم الخاصة (عادةً cchars).
- blink-matching-paren (Off)
- إذا ضُبط على On، سيحاول readline تحريك المؤشر لفترة وجيزة إلى قوس فتح عند إدراج قوس إغلاق.
- colored-completion-prefix (Off)
- إذا ضُبط على On، فعند سرد الإكمال، سيعرض readline البادئة المشتركة لمجموعة الإكمالات الممكنة باستخدام لون مختلف. تُؤخذ تعريفات الألوان من قيمة متغير البيئة LS_COLORS. إذا وجد تعريف لون في $LS_COLORS للاحقة المخصصة “.readline-colored-completion-prefix”, سيستخدم readline هذا اللون للبادئة المشتركة بدلاً من اللون المبدئي.
- colored-stats (Off)
- إذا ضُبط على On، سيعرض readline الإكمالات الممكنة باستخدام ألوان مختلفة للإشارة إلى نوع الملف. تُؤخذ تعريفات الألوان من قيمة متغير البيئة LS_COLORS.
- comment-begin (
- “#”) السلسلة التي يدرجها أمر insert-comment في readline. هذا الأمر مرتبط بـ M-# في وضع emacs وبالرمز # في وضع أوامر vi.
- completion-display-width (-1)
- عدد أعمدة الشاشة المستخدمة لعرض التطابقات الممكنة عند إجراء الإكمال. تُتجاهل القيمة إذا كانت أقل من 0 أو أكبر من عرض شاشة الطرفية. القيمة 0 تؤدي لعرض التطابقات واحداً في كل سطر. القيمة المبدئية هي -1.
- completion-ignore-case (Off)
- إذا ضُبط على On، سيقوم readline بمطابقة وإكمال أسماء الملفات بأسلوب غير حساس لحالة الأحرف.
- completion-map-case (Off)
- إذا ضُبط على On، وكان completion-ignore-case مفعلًا، سيعامل readline الشرطات (-) والشرطات السفلية (_) على أنها متكافئة عند إجراء مطابقة وإكمال أسماء الملفات بشكل غير حساس لحالة الأحرف.
- completion-prefix-display-length (0)
- الحد الأقصى لطول البادئة المشتركة (بالمحارف) لقائمة الإكمالات الممكنة التي تُعرض دون تعديل. عند ضبطها على قيمة أكبر من الصفر، يستبدل readline البادئات المشتركة الأطول من هذه القيمة بعلامة حذف (...) عند عرض الإكمالات الممكنة. إذا كان الإكمال يبدأ بنقطة، وكان readline يكمل أسماء الملفات، فإنه يستخدم ثلاث شرطات سفلية بدلاً من علامة الحذف.
- completion-query-items (100)
- يحدد هذا متى يُسأل المستخدم عن رغبته في عرض عدد الإكمالات الممكنة التي ولدها أمر possible-completions. يمكن ضبطه على أي قيمة صحيحة أكبر من أو تساوي الصفر. إذا كان عدد الإكمالات الممكنة أكبر من أو يساوي قيمة هذا المتغير، يسأل readline عما إذا كان المستخدم يرغب في عرضها أم لا؛ وإلا فإن readline يسردها ببساطة على الطرفية. القيمة صفر تعني ألا يسأل readline أبداً؛ وتُعامل القيم السالبة كصفر.
- convert-meta (On)
- إذا ضُبط على On، سيقوم readline بتحويل المحارف التي يقرؤها ولديها البت الثامن معينًا إلى تسلسل مفاتيح ASCII عن طريق مسح البت الثامن وإضافته كلاحقة لمحرف هروب (تحويل المحرف ليكون له بادئة meta). القيمة المبدئية هي On، ولكن readline يضبطها على Off إذا كانت الإعدادات المحلية تحتوي على محارف قد تتضمن ترميزاتها بايتات مع تعيين البت الثامن. يعتمد هذا المتغير على فئة الإعدادات المحلية LC_CTYPE، وقد يتغير إذا تغيرت الإعدادات المحلية. يؤثر هذا المتغير أيضاً على ارتباطات المفاتيح؛ انظر وصف force-meta-prefix أدناه.
- disable-completion (Off)
- إذا ضُبط على On، سيعطل readline إكمال الكلمات. ستُدرج محارف الإكمال في السطر كما لو كانت قد رُبطت بـ self-insert.
- echo-control-characters (On)
- عند ضبطه على On، في أنظمة التشغيل التي تشير إلى دعمها لذلك، سيقوم readline بترجيع محرف مقابل لإشارة تم توليدها من لوحة المفاتيح.
- editing-mode (emacs)
- يتحكم في ما إذا كان readline يستخدم مجموعة من ارتباطات المفاتيح تشبه Emacs أو vi. يمكن ضبط editing-mode على emacs أو vi.
- emacs-mode-string (@)
- إذا كان المتغير show-mode-in-prompt مفعلاً، فستُعرض هذه السلسلة مباشرةً قبل السطر الأخير من المحث الرئيس عندما يكون وضع تحرير emacs نشطاً. تُوسع القيمة مثل ارتباط مفاتيح، لذا تتوفر المجموعة القياسية من بادئات meta و control وتسلسلات هروب الشرطة المائلة العكسية. المهربات \1 و \2 تبدأ وتنهي تسلسلات من المحارف غير القابلة للطباعة، والتي يمكن استخدامها لدمج تسلسل تحكم للطرفية داخل سلسلة الوضع.
- enable-active-region (On)
- عند ضبط هذا المتغير على On، يسمح readline لأوامر معينة بتعيين المنطقة على أنها نشطة. عندما تكون المنطقة نشطة، يقوم readline بتمييز النص في المنطقة باستخدام قيمة المتغير active-region-start-color، والتي تكون مبدئياً هي السلسلة التي تفعل وضع البروز (standout) للطرفية. تعرض المنطقة النشطة النص المدرج بواسطة الإلصاق بين أقواس (bracketed-paste) وأي نص مطابق عُثر عليه بواسطة عمليات بحث التأريخ التزايدية وغير التزايدية.
- enable-bracketed-paste (On)
- عند ضبطه على On، يقوم readline بضبط الطرفية لإدراج كل عملية إلصاق في مخزن التحرير كسلسلة واحدة من المحارف، بدلاً من معاملة كل محرف وكأنه قُرئ من لوحة المفاتيح. يسمى هذا وضع الإلصاق بين أقواس؛ وهو يمنع readline من تنفيذ أي أوامر تحرير مرتبطة بتسلسلات مفاتيح تظهر في النص الملصق.
- enable-keypad (Off)
- عند ضبطه على On، يحاول readline تفعيل لوحة مفاتيح التطبيق عند استدعائه. تحتاج بعض الأنظمة لهذا لتفعيل مفاتيح الأسهم.
- enable-meta-key (On)
- عند ضبطه على On، يحاول readline تفعيل أي مفتاح مغير meta تدعي الطرفية دعمه. في كثير من الطرفيات، يُستخدم مفتاح Meta لإرسال محارف ذات ثمانية بتات؛ يتحقق هذا المتغير من قدرة الطرفية التي تشير إلى أن الطرفية يمكنها تفعيل وتعطيل وضع يضبط البت الثامن للمحرف (0200) إذا كان مفتاح Meta مضغوطاً عند كتابة المحرف (محرف meta).
- expand-tilde (Off)
- إذا ضُبط على On، سيقوم readline بإجراء توسيع التيلدا (~) عندما يحاول إكمال الكلمات.
- force-meta-prefix (Off)
- إذا ضُبط على On، فسيعدل readline سلوكه عند ربط تسلسلات المفاتيح التي تحتوي على \M- أو Meta- (انظر Key Bindings أعلاه) عن طريق تحويل تسلسل مفاتيح بالصيغة \M-C أو Meta-C إلى تسلسل من محرفين ESC C (إضافة بادئة meta). إذا ضُبط force-meta-prefix على Off (المبدئي)، فسيستخدم readline قيمة المتغير convert-meta لتحديد ما إذا كان سيقوم بهذا التحويل: إذا كان convert-meta هو On، سيقوم readline بالتحويل الموصوف أعلاه؛ وإذا كان Off، سيقوم readline بتحويل C إلى محرف meta عن طريق ضبط البت الثامن (0200).
- history-preserve-point (Off)
- إذا ضُبط على On، فسيحاول كود التأريخ وضع النقطة في نفس الموقع في كل سطر تأريخ يُسترجع باستخدام previous-history أو next-history.
- history-size (unset)
- يضبط الحد الأقصى لعدد مدخلات التأريخ المحفوظة في قائمة التأريخ. إذا ضُبط على الصفر، تُحذف أي مدخلات تأريخ موجودة ولا تُحفظ أي مدخلات جديدة. إذا ضُبط على قيمة أقل من الصفر، فلن يكون عدد مدخلات التأريخ محدوداً. بشكل مبدئي، تضبط bash الحد الأقصى لعدد مدخلات التأريخ وفقاً لقيمة متغير الصدفة HISTSIZE. سيؤدي ضبط history-size إلى قيمة غير رقمية لتعيين الحد الأقصى لعدد مدخلات التأريخ إلى 500.
- horizontal-scroll-mode (Off)
- ضبط هذا المتغير على On يجعل readline يستخدم سطراً واحداً للعرض، حيث يمرر المدخلات أفقياً على سطر شاشة واحد عندما تصبح أطول من عرض الشاشة بدلاً من الالتفاف إلى سطر جديد. يُفعل هذا الإعداد آلياً للطرفيات التي ارتفاعها 1.
- input-meta (Off)
- إذا ضُبط على On، سيقوم readline بتفعيل المدخلات ذات الثمانية بتات (أي أنه لا يمسح البت الثامن في المحارف التي يقرؤها)، بغض النظر عما تدعي الطرفية دعمه. القيمة المبدئية هي Off، ولكن readline يضبطها على On إذا كانت الإعدادات المحلية تحتوي على محارف قد تتضمن ترميزاتها بايتات مع تعيين البت الثامن. يعتمد هذا المتغير على فئة الإعدادات المحلية LC_CTYPE، وقد تتغير قيمته إذا تغيرت الإعدادات المحلية. الاسم meta-flag هو مرادف لـ input-meta.
- isearch-terminators (
- “C-[C-j”) سلسلة المحارف التي يجب أن تنهي البحث التزايدي دون تنفيذ المحرف كأمر لاحقاً. إذا لم تُعطَ قيمة لهذا المتغير، فإن المحرفين ESC و C-j ينهيان البحث التزايدي.
- keymap (emacs)
- يضبط خريطة مفاتيح readline الحالية. مجموعة أسماء خرائط المفاتيح الصالحة هي emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-command، و vi-insert. الخريطة vi تكافئ vi-command؛ و emacs تكافئ emacs-standard. القيمة المبدئية هي emacs؛ كما تؤثر قيمة editing-mode أيضاً على خريطة المفاتيح المبدئية.
- keyseq-timeout (500)
- يحدد المدة التي سينتظرها readline للحصول على محرف عند قراءة تسلسل مفاتيح غامض (تسلسل يمكن أن يشكل تسلسلاً كاملاً بالمدخلات المقروءة حتى الآن، أو يمكن أن يقبل مدخلات إضافية لإكمال تسلسل أطول). إذا لم يتلقَ readline أي مدخلات خلال مهلة الانتظار، فإنه يستخدم تسلسل المفاتيح الأقصر والأكمل. تُحدد القيمة بالمิลلي ثانية، لذا فإن القيمة 1000 تعني أن readline سينتظر ثانية واحدة لمدخلات إضافية. إذا ضُبط هذا المتغير على قيمة أقل من أو تساوي الصفر، أو على قيمة غير رقمية، فسينتظر readline حتى يُضغط على مفتاح آخر ليقرر أي تسلسل مفاتيح سيكمل.
- mark-directories (On)
- إذا ضُبط على On، فستُلحق شرطة مائلة بأسماء الأدلة المكتملة.
- mark-modified-lines (Off)
- إذا ضُبط على On، فسيعرض readline أسطر التأريخ التي عُدلت مسبوقة بعلامة النجمة (*).
- mark-symlinked-directories (Off)
- إذا ضُبط على On، فستُلحق شرطة مائلة بالأسماء المكتملة التي هي وصلات رمزية لأدلة، وذلك وفقاً لقيمة mark-directories.
- match-hidden-files (On)
- هذا المتغير، عند ضبطه على On، يجبر readline على مطابقة الملفات التي تبدأ أسماؤها بـ “.” (الملفات المخفية) عند إجراء إكمال أسماء الملفات. إذا ضُبط على Off، يجب على المستخدم تضمين علامة “.” البادئة في اسم الملف المراد إكماله.
- إذا ضُبط على On، فسيقوم إكمال القائمة بعرض البادئة المشتركة لقائمة الإكمالات الممكنة (والتي قد تكون فارغة) قبل التنقل عبر القائمة.
- output-meta (Off)
- إذا ضُبط على On، سيقوم readline بعرض المحارف التي لديها البت الثامن معينًا بشكل مباشر بدلاً من عرضها كتسلسل هروب ببادئة meta. القيمة المبدئية هي Off، ولكن readline يضبطها على On إذا كانت الإعدادات المحلية تحتوي على محارف قد تتضمن ترميزاتها بايتات مع تعيين البت الثامن. يعتمد هذا المتغير على فئة الإعدادات المحلية LC_CTYPE، وقد تتغير قيمته إذا تغيرت الإعدادات المحلية.
- page-completions (On)
- إذا ضُبط على On، سيستخدم readline مستعرض صفحات داخلي يشبه more(1) لعرض ملء شاشة من الإكمالات الممكنة في كل مرة.
- prefer-visible-bell
- انظر bell-style.
- print-completions-horizontally (Off)
- إذا ضُبط على On، فسيقوم readline بعرض الإكمالات مع فرز التطابقات أفقياً بترتيب أبجدي، بدلاً من عرضها لأسفل الشاشة.
- revert-all-at-newline (Off)
- إذا ضُبط على On، ستتراجع مكتبة readline عن كل التغييرات في أسطر السجل قبل العودة عند تنفيذ accept-line. مبدئيًا، يمكن تعديل أسطر السجل والاحتفاظ بقوائم تراجع منفصلة عبر استدعاءات readline.
- search-ignore-case (Off)
- إذا ضُبط على On، تُجري readline عمليات البحث التزايدي وغير التزايدي في قائمة السجل بطريقة غير حساسة لحالة الأحرف.
- show-all-if-ambiguous (Off)
- يُغير هذا السلوك المبدئي لوظائف الإكمال. إذا ضُبط على On، فإن الكلمات التي لها أكثر من إكمال محتمل ستؤدي إلى إدراج المطابقات فورًا بدلاً من إطلاق صوت التنبيه.
- show-all-if-unmodified (Off)
- يُغير هذا السلوك المبدئي لوظائف الإكمال بطريقة مشابهة لـ show-all-if-ambiguous. إذا ضُبط على On، فإن الكلمات التي لها أكثر من إكمال محتمل دون أي إكمال جزئي ممكن (أي أن الإكمالات المحتملة لا تشترك في بادئة واحدة) ستؤدي إلى إدراج المطابقات فورًا بدلاً من إطلاق صوت التنبيه.
- show-mode-in-prompt (Off)
- إذا ضُبط على On، تُضاف سلسلة نصية إلى بداية المحث تشير إلى وضع التحرير: emacs، أو vi command، أو vi insertion. سلاسل الأوضاع قابلة للضبط من قبل المستخدم (مثل emacs-mode-string).
- skip-completed-text (Off)
- إذا ضُبط على On، فسيُغير هذا سلوك الإكمال المبدئي عند إدراج مطابقة واحدة في السطر. يكون نشطًا فقط عند إجراء الإكمال في منتصف كلمة. إذا فُعّل، فلن تدرج readline محارف من الإكمال تطابق المحارف الموجودة بعد النقطة في الكلمة التي يُجرى إكمالها، حتى لا تتكرر أجزاء الكلمة التي تلي المؤشر.
- vi-cmd-mode-string ((cmd))
- إذا فُعّل متغير show-mode-in-prompt، فستُعرض هذه السلسلة مباشرة قبل السطر الأخير من المحث الرئيس عندما يكون وضع تحرير vi نشطًا وفي وضع الأوامر. تُوسع القيمة مثل ارتباط مفاتيح، لذا تتوفر المجموعة القياسية من سوابق meta وcontrol وتسلسلات الهروب بالشرطة المائلة العكسية. يبدأ الهروبان \e1 و\e2 تسلسلات المحارف غير المطبوعة وينهيانها، والتي يمكن استخدامها لتضمين تسلسل تحكم للطرفية في سلسلة الوضع.
- vi-ins-mode-string ((ins))
- إذا فُعّل متغير show-mode-in-prompt، فستُعرض هذه السلسلة مباشرة قبل السطر الأخير من المحث الرئيس عندما يكون وضع تحرير vi نشطًا وفي وضع الإدراج. تُوسع القيمة مثل ارتباط مفاتيح، لذا تتوفر المجموعة القياسية من سوابق meta وcontrol وتسلسلات الهروب بالشرطة المائلة العكسية. يبدأ الهروبان \e1 و\e2 تسلسلات المحارف غير المطبوعة وينهيانها، والتي يمكن استخدامها لتضمين تسلسل تحكم للطرفية في سلسلة الوضع.
- visible-stats (Off)
- إذا ضُبط على On، سيُلحق محرف يشير إلى نوع الملف كما تُبلغ عنه stat(2) باسم الملف عند سرد الإكمالات المحتملة.
بنى Readline الشرطية¶
تنفذ Readline ميزة مشابهة في الروح لميزات التصريف الشرطي في معالج C المسبق والتي تسمح بإجراء ارتباطات المفاتيح وإعدادات المتغيرات كنتيجة للاختبارات. هناك أربعة توجيهات للمحلل متاحة.
- $if
- تسمح بنية $if بإجراء الارتباطات بناءً على وضع التحرير، أو الطرفية المستخدمة، أو التطبيق الذي يستخدم readline. يمتد نص الاختبار، بعد أي عامل مقارنة، إلى نهاية السطر؛ ما لم يذكر خلاف ذلك، لا توجد حاجة لمحارف لعزله.
- mode
- تُستخدم صيغة mode= لتوجيه $if لاختبار ما إذا كانت readline في وضع emacs أو vi. يمكن استخدام هذا مع أمر set keymap، على سبيل المثال، لضبط الارتباطات في خرائط مفاتيح emacs-standard وemacs-ctlx فقط إذا بدأت readline في وضع emacs.
- term
- يمكن استخدام صيغة term= لتضمين ارتباطات مفاتيح خاصة بالطرفية، ربما لربط تسلسلات المفاتيح التي تخرجها مفاتيح الوظائف بالطرفية. تُختبر الكلمة الموجودة على الجانب الأيمن من = مقابل كل من الاسم الكامل للطرفية وجزء اسم الطرفية قبل أول -. يسمح هذا لـ xterm بمطابقة كل من xterm وxterm-256color، على سبيل المثال.
- version
- يمكن استخدام اختبار version لإجراء مقارنات مقابل إصدارات readline محددة. يتوسع version إلى إصدار readline الحالي. تتضمن مجموعة عوامل المقارنة =، (و ==)، و !=، و <=، و >=، و <، و >. يتكون رقم الإصدار المقدم على الجانب الأيمن من العامل من رقم إصدار رئيس، ونقطة عشرية اختيارية، وإصدار فرعي اختياري (مثل 7.1). إذا حُذف الإصدار الفرعي، فسيُعتبر مبدئيًا 0. يمكن فصل العامل عن سلسلة version وعن معامل رقم الإصدار بمسافة بيضاء.
- application
- تُستخدم بنية application لتضمين إعدادات خاصة بالتطبيق. يضبط كل برنامج يستخدم مكتبة readline اسم التطبيق، ويمكن لملف التهيأة اختبار قيمة معينة. يمكن استخدام هذا لربط تسلسلات المفاتيح بوظائف مفيدة لبرنامج معين. على سبيل المثال، يضيف الأمر التالي تسلسل مفاتيح يضع الكلمة الحالية أو السابقة بين علامتي اقتباس في bash:
$if Bash # اقتباس الكلمة الحالية أو السابقة "\C-xq": "\eb\"\ef\"" $endif
- variable
- توفر بنية variable اختبارات مساواة بسيطة لمتغيرات وقيم readline. عوامل المقارنة المسموح بها هي = و == و !=. يجب فصل اسم المتغير عن عامل المقارنة بمسافة بيضاء؛ ويمكن فصل العامل عن القيمة في الجانب الأيمن بمسافة بيضاء. يمكن اختبار المتغيرات النصية والمنطقية. المتغيرات المنطقية يجب أن تُختبر مقابل القيمتين on و off.
- $else
- تُنفذ الأوامر في هذا الفرع من توجيه $if إذا فشل الاختبار.
- $endif
- ينهي هذا الأمر، كما رأينا في المثال السابق، أمر $if.
- $include
- يأخذ هذا التوجيه اسم ملف واحد كمعامل ويقرأ الأوامر وارتباطات المفاتيح من ذلك الملف. على سبيل المثال، التوجيه التالي سيقرأ /etc/inputrc:
$include /etc/inputrc
البحث¶
توفر Readline أوامر للبحث في سجل الأوامر (انظر HISTORY أدناه) عن أسطر تحتوي على سلسلة نصية محددة. هناك وضعان للبحث: تزايدي وغير تزايدي.
يبدأ البحث التزايدي قبل أن ينتهي المستخدم من كتابة سلسلة البحث. مع كتابة كل محرف من سلسلة البحث، تعرض readline المدخل التالي من السجل الذي يطابق السلسلة المكتوبة حتى الآن. يتطلب البحث التزايدي فقط عدد المحارف اللازم للعثور على مدخل السجل المطلوب. عند استخدام وضع تحرير emacs، اكتب C-r للبحث للخلف في السجل عن سلسلة نصية معينة. تؤدي كتابة C-s إلى البحث للأمام عبر السجل. تُستخدم المحارف الموجودة في قيمة متغير isearch-terminators لإنهاء البحث التزايدي. إذا لم يُعين لهذا المتغير قيمة، فإن مفتاحي ESC و C-j ينهيان البحث التزايدي. يجهض C-g البحث التزايدي ويعيد السطر الأصلي. عند إنهاء البحث، يصبح مدخل السجل الذي يحتوي على سلسلة البحث هو السطر الحالي.
للعثور على مدخلات مطابقة أخرى في قائمة السجل، اكتب C-r أو C-s حسب الاقتضاء. يبحث هذا للخلف أو للأمام في السجل عن المدخل التالي المطابق لسلسلة البحث المكتوبة حتى الآن. أي تسلسل مفاتيح آخر مرتبط بأمر readline ينهي البحث وينفذ ذلك الأمر. على سبيل المثال، ينهي السطر الجديد البحث ويقبل السطر، وبذلك ينفذ الأمر من قائمة السجل. سيؤدي أمر الحركة إلى إنهاء البحث، وجعل آخر سطر وُجد هو السطر الحالي، وبدء التحرير.
تتذكر Readline آخر سلسلة بحث تزايدي. إذا كُتب مفتاحا C-r مرتين دون وجود أي محارف متداخلة تحدد سلسلة بحث جديدة، فستستخدم readline أي سلسلة بحث متذكَّرة.
تقرأ عمليات البحث غير التزايدية سلسلة البحث كاملة قبل البدء في البحث عن مدخلات السجل المطابقة. يمكن أن يكتب المستخدم سلسلة البحث أو تكون جزءًا من محتويات السطر الحالي.
أسماء أوامر Readline¶
فيما يلي قائمة بأسماء الأوامر وتسلسلات المفاتيح المبدئية التي ترتبط بها. أسماء الأوامر التي لا يصاحبها تسلسل مفاتيح تكون غير مرتبطة مبدئيًا.
في الأوصاف التالية، تشير point إلى موضع المؤشر الحالي، وتشير mark إلى موضع مؤشر حُفظ بواسطة أمر set-mark. يُشار إلى النص بين النقطة والعلامة باسم المنطقة. لدى Readline مفهوم المنطقة النشطة: عندما تكون المنطقة نشطة، تُبرز إعادة عرض readline المنطقة باستخدام قيمة متغير active-region-start-color. يتحكم متغير enable-active-region في تشغيل ذلك وإيقافه. تضبط عدة أوامر المنطقة لتكون نشطة؛ ومذكورة أدناه.
أوامر الحركة¶
- beginning-of-line (C-a)
- الانتقال إلى بداية السطر الحالي. قد يرتبط هذا أيضًا بمفتاح Home في بعض لوحات المفاتيح.
- end-of-line (C-e)
- الانتقال إلى نهاية السطر. قد يرتبط هذا أيضًا بمفتاح End في بعض لوحات المفاتيح.
- forward-char (C-f)
- الانتقال محرفًا واحدًا للأمام. قد يرتبط هذا أيضًا بمفتاح السهم الأيمن في بعض لوحات المفاتيح.
- backward-char (C-b)
- الانتقال محرفًا واحدًا للخلف. قد يرتبط هذا أيضًا بمفتاح السهم الأيسر في بعض لوحات المفاتيح.
- forward-word (M-f)
- الانتقال للأمام إلى نهاية الكلمة التالية. تتكون الكلمات من محارف أبجدية رقمية (حروف وأرقام).
- backward-word (M-b)
- الانتقال للخلف إلى بداية الكلمة الحالية أو السابقة. تتكون الكلمات من محارف أبجدية رقمية (حروف وأرقام).
- shell-forward-word (M-C-f)
- الانتقال للأمام إلى نهاية الكلمة التالية. تُفصل الكلمات بواسطة محارف الصدفة الوصفية غير المقتبسة.
- shell-backward-word (M-C-b)
- الانتقال للخلف إلى بداية الكلمة الحالية أو السابقة. تُفصل الكلمات بواسطة محارف الصدفة الوصفية غير المقتبسة.
- previous-screen-line
- محاولة نقل النقطة إلى نفس عمود الشاشة الفعلي في سطر الشاشة الفعلي السابق. لن يحقق هذا التأثير المطلوب إذا كان سطر readline الحالي لا يشغل أكثر من سطر فعلي واحد أو إذا كانت النقطة لا تزيد عن طول المحث زائد عرض الشاشة.
- next-screen-line
- محاولة نقل النقطة إلى نفس عمود الشاشة الفعلي في سطر الشاشة الفعلي التالي. لن يحقق هذا التأثير المطلوب إذا كان سطر readline الحالي لا يشغل أكثر من سطر فعلي واحد أو إذا لم يكن طول سطر readline الحالي أكبر من طول المحث زائد عرض الشاشة.
- clear-display (M-C-l)
- مسح الشاشة، وإن أمكن، خبيئة التمرير الخلفي للطرفية، ثم إعادة رسم السطر الحالي، مع ترك السطر الحالي في أعلى الشاشة.
- clear-screen (C-l)
- مسح الشاشة، ثم إعادة رسم السطر الحالي، مع ترك السطر الحالي في أعلى الشاشة. باستخدام معامل عددي، سيُحدث السطر الحالي دون مسح الشاشة.
- redraw-current-line
- تحديث السطر الحالي.
أوامر التعامل مع السجل¶
- accept-line (Newline, Return)
- قبول السطر بغض النظر عن مكان المؤشر. إذا كان هذا السطر غير فارغ، فسيُضاف إلى قائمة السجل وفقًا لحالة متغيري HISTCONTROL و HISTIGNORE. إذا كان السطر سطر سجل معدلًا، فسيُستعاد سطر السجل إلى حالته الأصلية.
- previous-history (C-p)
- جلب الأمر السابق من قائمة السجل، بالتحرك للخلف في القائمة. قد يرتبط هذا أيضًا بمفتاح السهم العلوي في بعض لوحات المفاتيح.
- next-history (C-n)
- جلب الأمر التالي من قائمة السجل، بالتحرك للأمام في القائمة. قد يرتبط هذا أيضًا بمفتاح السهم السفلي في بعض لوحات المفاتيح.
- beginning-of-history (M-<)
- الانتقال إلى أول سطر في السجل.
- end-of-history (M->)
- الانتقال إلى نهاية سجل المدخلات، أي السطر الذي يجري إدخاله حاليًا.
- operate-and-get-next (C-o)
- قبول السطر الحالي للتنفيذ كما لو أُدخل سطر جديد، وجلب السطر التالي بالنسبة للسطر الحالي من السجل للتحرير. يحدد المعامل العددي، إذا قُدم، مدخل السجل الذي سيُستخدم بدلاً من السطر الحالي.
- fetch-history
- باستخدام معامل عددي، جلب ذلك المدخل من قائمة السجل وجعله السطر الحالي. بدون معامل، سيُنتقل للخلف إلى أول مدخل في قائمة السجل.
- reverse-search-history (C-r)
- البحث للخلف بدءًا من السطر الحالي والتحرك “up” عبر السجل حسب الضرورة. هذا بحث تزايدي. يضبط هذا الأمر المنطقة على النص المطابق ويفعل المنطقة.
- forward-search-history (C-s)
- البحث للأمام بدءًا من السطر الحالي والتحرك “down” عبر السجل حسب الضرورة. هذا بحث تزايدي. يضبط هذا الأمر المنطقة على النص المطابق ويفعل المنطقة.
- non-incremental-reverse-search-history (M-p)
- البحث للخلف عبر السجل بدءًا من السطر الحالي باستخدام بحث غير تزايدي عن سلسلة نصية يقدمها المستخدم. يمكن أن تطابق سلسلة البحث أي مكان في سطر السجل.
- non-incremental-forward-search-history (M-n)
- البحث للأمام عبر السجل باستخدام بحث غير تزايدي عن سلسلة نصية يقدمها المستخدم. يمكن أن تطابق سلسلة البحث أي مكان في سطر السجل.
- history-search-backward
- البحث للخلف عبر السجل عن سلسلة المحارف الموجودة بين بداية السطر الحالي والنقطة. يجب أن تطابق سلسلة البحث بداية سطر السجل. هذا بحث غير تزايدي. قد يرتبط هذا بمفتاح Page Up في بعض لوحات المفاتيح.
- history-search-forward
- البحث للأمام عبر السجل عن سلسلة المحارف الموجودة بين بداية السطر الحالي والنقطة. يجب أن تطابق سلسلة البحث بداية سطر السجل. هذا بحث غير تزايدي. قد يرتبط هذا بمفتاح Page Down في بعض لوحات المفاتيح.
- history-substring-search-backward
- البحث للخلف عبر السجل عن سلسلة المحارف الموجودة بين بداية السطر الحالي والنقطة. يمكن أن تطابق سلسلة البحث أي مكان في سطر السجل. هذا بحث غير تزايدي.
- history-substring-search-forward
- البحث للأمام عبر السجل عن سلسلة المحارف الموجودة بين بداية السطر الحالي والنقطة. يمكن أن تطابق سلسلة البحث أي مكان في سطر السجل. هذا بحث غير تزايدي.
- yank-nth-arg (M-C-y)
- إدراج المعامل الأول للأمر السابق (عادة الكلمة الثانية في السطر السابق) عند النقطة. باستخدام معامل n، سيُدرج الكلمة رقم n من الأمر السابق (تبدأ الكلمات في الأمر السابق بالكلمة 0). يدرج المعامل السالب الكلمة رقم n من نهاية الأمر السابق. بمجرد حساب المعامل n، يستخدم هذا مرافق توسيع السجل لاستخراج الكلمة رقم n، كما لو أن “!n” توسيع السجل قد حُدد.
- yank-last-arg (M-., M-_)
- إدراج المعامل الأخير للأمر السابق (آخر كلمة في مدخل السجل السابق). باستخدام معامل عددي، يسلك نفس سلوك yank-nth-arg تمامًا. تتحرك الاستدعاءات المتتالية لـ yank-last-arg للخلف عبر قائمة السجل، وتدرج الكلمة الأخيرة (أو الكلمة المحددة بالمعامل في الاستدعاء الأول) من كل سطر بدوره. يحدد أي معامل عددي يُقدم لهذه الاستدعاءات المتتالية اتجاه التحرك عبر السجل. يغير المعامل السالب الاتجاه عبر السجل (للخلف أو للأمام). يستخدم هذا مرافق توسيع السجل لاستخراج الكلمة الأخيرة، كما لو أن “!$” توسيع السجل قد حُدد.
- shell-expand-line (M-C-e)
- توسيع السطر بإجراء توسيعات كلمات الصدفة. ينفذ هذا توسيع الأسماء المستعارة والسجل، واقتباس $\*'string\*' و $\*"string\*"، وتوسيع العلامة النونية (tilde)، وتوسيع المعاملات والمتغيرات، والتوسيع الحسابي، وإحلال الأوامر والعمليات، وتقسيم الكلمات، وإزالة علامات الاقتباس. يمنع المعامل الصريح إحلال الأوامر والعمليات. انظر HISTORY EXPANSION أدناه لوصف توسيع السجل.
- history-expand-line (M-^)
- إجراء توسيع السجل في السطر الحالي. انظر HISTORY EXPANSION أدناه لوصف توسيع السجل.
- magic-space
- إجراء توسيع السجل في السطر الحالي وإدراج مسافة. انظر HISTORY EXPANSION أدناه لوصف توسيع السجل.
- alias-expand-line
- إجراء توسيع الأسماء المستعارة في السطر الحالي. انظر ALIASES أعلاه لوصف توسيع الأسماء المستعارة.
- history-and-alias-expand-line
- إجراء توسيع السجل والأسماء المستعارة في السطر الحالي.
- insert-last-argument (M-., M-_)
- مرادف لـ yank-last-arg.
- edit-and-execute-command (C-x C-e)
- استدعاء محرر على سطر الأوامر الحالي، وتنفيذ النتيجة كأوامر صدفة. تحاول Bash استدعاء $VISUAL، ثم $EDITOR، ثم emacs كمحرر، بهذا الترتيب.
أوامر تغيير النص¶
- end-of-file (عادة C-d)
- المحرف الذي يشير إلى نهاية الملف كما هو محدد، على سبيل المثال، بواسطة stty(1). إذا قُرئ هذا المحرف عندما لا توجد محارف في السطر، وكانت النقطة في بداية السطر، فسوف تفسره readline على أنه نهاية المدخلات وتُعيد EOF.
- delete-char (C-d)
- حذف المحرف عند النقطة. إذا كانت هذه الوظيفة مرتبطة بنفس المحرف مثل محرف tty EOF، كما هو الحال عادةً مع C-d، فانظر أعلاه لمعرفة التأثيرات. قد يرتبط هذا أيضًا بمفتاح Delete في بعض لوحات المفاتيح.
- backward-delete-char (Rubout)
- حذف المحرف خلف المؤشر. عند إعطاء معامل عددي، يُحفظ النص المحذوف في حلقة الحذف (kill ring).
- forward-backward-delete-char
- حذف المحرف الموجود تحت المؤشر، ما لم يكن المؤشر في نهاية السطر، وفي هذه الحالة يُحذف المحرف الموجود خلف المؤشر.
- quoted-insert (C-q, C-v)
- إضافة المحرف التالي المكتوب إلى السطر حرفيًا. هذه هي طريقة إدراج محارف مثل C-q، على سبيل المثال.
- tab-insert (C-v TAB)
- إدراج محرف جدولة (tab).
- self-insert (a, b, A, 1, !, ...)
- إدراج المحرف المكتوب.
- bracketed-paste-begin
- هذه الوظيفة مخصصة لتكون مرتبطة بـ “bracketed paste” تسلسل الهروب الذي ترسله بعض الطرفيات، ويُعين هذا الارتباط مبدئيًا. يسمح لـ readline بإدراج النص الملصق كوحدة واحدة دون معاملة كل محرف كما لو كان قد قُرئ من لوحة المفاتيح. تُدرج المحارف الملصقة كما لو كان كل واحد منها مرتبطًا بـ self-insert بدلاً من تنفيذ أي أوامر تحرير.
- يضبط اللصق المجمع المنطقة على النص المدرج ويفعل المنطقة.
- transpose-chars (C-t)
- سحب المحرف الموجود قبل النقطة للأمام فوق المحرف الموجود عند النقطة، مع تحريك النقطة للأمام أيضًا. إذا كانت النقطة في نهاية السطر، فإن هذا يبدل موضع المحرفين اللذين يسبقان النقطة. ليس للمعاملات السالبة أي تأثير.
- transpose-words (M-t)
- سحب الكلمة الموجودة قبل النقطة لتتجاوز الكلمة الموجودة بعد النقطة، مع تحريك النقطة لتتجاوز تلك الكلمة أيضًا. إذا كانت النقطة في نهاية السطر، فإن هذا يبدل موضع آخر كلمتين في السطر.
- shell-transpose-words (M-C-t)
- سحب الكلمة الموجودة قبل النقطة لتتجاوز الكلمة الموجودة بعد النقطة، مع تحريك النقطة لتتجاوز تلك الكلمة أيضًا. إذا كانت نقطة الإدراج في نهاية السطر، فإن هذا يبدل موضع آخر كلمتين في السطر. حدود الكلمات هي نفسها في shell-forward-word و shell-backward-word.
- upcase-word (M-u)
- تحويل الكلمة الحالية (أو التالية) إلى أحرف كبيرة. باستخدام معامل سالب، تُحول الكلمة السابقة إلى أحرف كبيرة، ولكن دون تحريك النقطة.
- downcase-word (M-l)
- حوّل الكلمة الحالية (أو التالية) إلى أحرف صغيرة. عند توفير معطى سالب، تُحوّل الكلمة السابقة إلى أحرف صغيرة، ولكن لا تُنقل النقطة.
- capitalize-word (M-c)
- اجعل الحرف الأول من الكلمة الحالية (أو التالية) كبيراً. عند توفير معطى سالب، يُحوّل الحرف الأول من الكلمة السابقة إلى حرف كبير، ولكن لا تُنقل النقطة.
- overwrite-mode
- بدّل وضع الكتابة الفوقية. عند توفير معطى عددي موجب صريح، يُنتقل إلى وضع الكتابة الفوقية. وعند توفير معطى عددي غير موجب، يُنتقل إلى وضع الإدراج. يؤثر هذا الأمر على وضع emacs فقط؛ حيث يتعامل وضع vi مع الكتابة الفوقية بشكل مختلف. تبدأ كل استدعاء لـ readline() بوضع الإدراج.
- في وضع الكتابة الفوقية، المحارف المرتبطة بـ self-insert تستبدل النص عند النقطة بدلاً من دفع النص إلى اليمين. المحارف المرتبطة بـ backward-delete-char تستبدل المحرف الذي يسبق النقطة بمسافة. افتراضياً، هذا الأمر غير مرتبط بمفتاح، ولكن قد يُربط بمفتاح Insert في بعض لوحات المفاتيح.
القتل والجذب (Killing and Yanking)¶
- kill-line (C-k)
- اقضِ على (Kill) النص من النقطة إلى نهاية السطر الحالي. عند توفير معطى عددي سالب، يُقضى على النص رجوعاً من المؤشر إلى بداية السطر.
- backward-kill-line (C-x Rubout)
- اقضِ على النص رجوعاً إلى بداية السطر الحالي. عند توفير معطى عددي سالب، يُقضى على النص للأمام من المؤشر إلى نهاية السطر.
- unix-line-discard (C-u)
- اقضِ على النص رجوعاً من النقطة إلى بداية السطر، مع حفظ النص المقتول في حلقة القتل (kill-ring).
- kill-whole-line
- اقضِ على جميع المحارف في السطر الحالي، بغض النظر عن موقع النقطة.
- kill-word (M-d)
- اقضِ على النص من النقطة إلى نهاية الكلمة الحالية، أو إلى نهاية الكلمة التالية إذا كنت بين الكلمات. حدود الكلمات هي نفسها المستخدمة في forward-word.
- backward-kill-word (M-Rubout)
- اقضِ على الكلمة التي خلف النقطة. حدود الكلمات هي نفسها المستخدمة في backward-word.
- shell-kill-word (M-C-d)
- اقضِ على النص من النقطة إلى نهاية الكلمة الحالية، أو إلى نهاية الكلمة التالية إذا كنت بين الكلمات. حدود الكلمات هي نفسها المستخدمة في shell-forward-word.
- shell-backward-kill-word
- اقضِ على الكلمة التي خلف النقطة. حدود الكلمات هي نفسها المستخدمة في shell-backward-word.
- unix-word-rubout (C-w)
- اقضِ على الكلمة التي خلف النقطة، باستخدام المسافة الفارغة كحد للكلمة، مع حفظ النص المقتول في حلقة القتل.
- unix-filename-rubout
- اقضِ على الكلمة التي خلف النقطة، باستخدام المسافة الفارغة وحرف المائل (slash) كحدود للكلمة، مع حفظ النص المقتول في حلقة القتل.
- delete-horizontal-space (M-\)
- احذف جميع المسافات وعلامات الجدولة حول النقطة.
- kill-region
- اقضِ على النص الموجود في المنطقة (region) الحالية.
- copy-region-as-kill
- انسخ النص الموجود في المنطقة إلى مخزن القتل (kill buffer)، ليتمكن من جذبه (yanked) فوراً.
- copy-backward-word
- انسخ الكلمة التي تسبق النقطة إلى مخزن القتل. حدود الكلمات هي نفسها المستخدمة في backward-word.
- copy-forward-word
- انسخ الكلمة التي تلي النقطة إلى مخزن القتل. حدود الكلمات هي نفسها المستخدمة في forward-word.
- yank (C-y)
- اجذب رأس حلقة القتل إلى المخزن عند النقطة.
- yank-pop (M-y)
- دوّر حلقة القتل، واجذب الرأس الجديد. لا يعمل إلا بعد yank أو yank-pop.
المعطيات العددية¶
- digit-argument (M-0, M-1, ..., M--)
- أضف هذا الرقم إلى المعطى المتراكم حالياً، أو ابدأ معطى جديداً. M-- تبدأ معطى سالباً.
- universal-argument
- هذه طريقة أخرى لتحديد معطى. إذا تلا هذا الأمر رقم أو أكثر، مسبوقاً اختيارياً بعلامة ناقص، فإن تلك الأرقام تُحدد المعطى. إذا تلا الأمر أرقام، فإن تنفيذ universal-argument مرة أخرى ينهي المعطى العددي، ولكنه يُتجاهل فيما عدا ذلك. كحالة خاصة، إذا تلا هذا الأمر مباشرة محرف ليس رقماً ولا علامة ناقص، يُضرب عدد المعطيات للأمر التالي في أربعة. يكون عدد المعطيات واحداً في البداية، لذا فإن تنفيذ هذه الدالة للمرة الأولى يجعل العدد أربعة، وللمرة الثانية يجعله ستة عشر، وهكذا.
الإكمال¶
- complete (TAB)
- حاول إجراء إكمال للنص الذي يسبق النقطة. تحاول Bash الإكمال بالتحقق أولاً من وجود أي عمليات إكمال قابلة للبرمجة لكلمة الأمر (انظر Programmable Completion أدناه)، وإلا فإنها تعامل النص كمتغير (إذا بدأ بـ $)، أو اسم مستخدم (إذا بدأ بـ ~)، أو اسم مضيف (إذا بدأ بـ @)، أو أمر (بما في ذلك الأسماء المستعارة والدوال والمبنيات الداخلية) على التوالي. إذا لم ينتج عن أي من هذه مطابقة، فإنها تعود إلى إكمال أسماء الملفات.
- possible-completions (M-?)
- اسرد الإكمالات المحتملة للنص الذي يسبق النقطة. عند عرض الإكمالات، تضبط readline عدد الأعمدة المستخدمة للعرض حسب قيمة completion-display-width، أو قيمة متغير الصدفة COLUMNS، أو عرض الشاشة، بهذا الترتيب.
- insert-completions (M-*)
- أدرج جميع إكمالات النص الذي يسبق النقطة التي كان من الممكن إنتاجها بواسطة possible-completions، مفصولة بمسافة.
- مشابه لـ complete، ولكنه يستبدل الكلمة المراد إكمالها بمطابقة واحدة من قائمة الإكمالات المحتملة. يؤدي التنفيذ المتكرر لـ menu-complete إلى التنقل عبر قائمة الإكمالات المحتملة، وإدراج كل مطابقة بدورها. في نهاية قائمة الإكمالات، يقرع menu-complete الجرس (وفقاً لإعداد bell-style) ويستعيد النص الأصلي. ينتقل المعطى n بمقدار n موضعاً للأمام في قائمة المطابقات؛ وينتقل المعطى السالب للخلف عبر القائمة. هذا الأمر مُعد ليُربط بمفتاح TAB، ولكنه غير مرتبط افتراضياً.
- مطابق لـ menu-complete، ولكنه يتحرك للخلف عبر قائمة الإكمالات المحتملة، كما لو كان menu-complete قد أُعطي معطى سالباً. هذا الأمر غير مرتبط افتراضياً.
- export-completions
- أجرِ إكمالاً للكلمة التي تسبق النقطة كما هو موضح أعلاه واكتب قائمة الإكمالات المحتملة إلى دفق مخرجات readline باستخدام التنسيق التالي، مع كتابة المعلومات في أسطر منفصلة:
- عدد المطابقات N؛
- الكلمة التي يجري إكمالها؛
- S:E، حيث S و E هما إزاحتا البداية والنهاية للكلمة في مخزن سطر readline؛ ثم
- كل مطابقة، واحدة في كل سطر
- إذا لم تكن هناك مطابقات، فسيكون السطر الأول “0”, ولا يطبع هذا الأمر أي مخرجات بعد S:E. إذا كانت هناك مطابقة واحدة فقط، فسيطبع سطراً واحداً يحتوي عليها. إذا كان هناك أكثر من مطابقة، فسيطبع البادئة المشتركة للمطابقات (والتي قد تكون فارغة) في السطر الأول بعد S:E، ثم المطابقات في الأسطر اللاحقة. في هذه الحالة، سيشمل N السطر الأول الذي يحتوي على البادئة المشتركة.
- يجب أن يكون المستخدم أو التطبيق قادراً على استيعاب إمكانية وجود سطر فارغ. القصد هو أن يقرأ المستخدم أو التطبيق N سطراً بعد السطر الذي يحتوي على S:E للحصول على قائمة المطابقة. هذا الأمر غير مرتبط افتراضياً.
- delete-char-or-list
- يحذف المحرف الموجود تحت المؤشر إذا لم يكن في بداية أو نهاية السطر (مثل delete-char). وفي نهاية السطر، يتصرف بشكل مطابق لـ possible-completions. هذا الأمر غير مرتبط افتراضياً.
- complete-filename (M-/)
- حاول إكمال اسم الملف للنص الذي يسبق النقطة.
- possible-filename-completions (C-x /)
- اسرد الإكمالات المحتملة للنص الذي يسبق النقطة، مع معاملته كاسم ملف.
- complete-username (M-~)
- حاول الإكمال للنص الذي يسبق النقطة، مع معاملته كاسم مستخدم.
- possible-username-completions (C-x ~)
- اسرد الإكمالات المحتملة للنص الذي يسبق النقطة، مع معاملته كاسم مستخدم.
- complete-variable (M-$)
- حاول الإكمال للنص الذي يسبق النقطة، مع معاملته كمتغير صدفة.
- possible-variable-completions (C-x $)
- اسرد الإكمالات المحتملة للنص الذي يسبق النقطة، مع معاملته كمتغير صدفة.
- complete-hostname (M-@)
- حاول الإكمال للنص الذي يسبق النقطة، مع معاملته كاسم مضيف.
- possible-hostname-completions (C-x @)
- اسرد الإكمالات المحتملة للنص الذي يسبق النقطة، مع معاملته كاسم مضيف.
- complete-command (M-!)
- حاول الإكمال للنص الذي يسبق النقطة، مع معاملته كاسم أمر. يحاول إكمال الأوامر مطابقة النص مقابل الأسماء المستعارة، والكلمات المحجوزة، ودوال الصدفة، ومبنيات الصدفة الداخلية، وأخيراً أسماء الملفات القابلة للتنفيذ، بهذا الترتيب.
- possible-command-completions (C-x !)
- اسرد الإكمالات المحتملة للنص الذي يسبق النقطة، مع معاملته كاسم أمر.
- dynamic-complete-history (M-TAB)
- حاول الإكمال للنص الذي يسبق النقطة، بمقارنة النص مقابل مدخلات قائمة التاريخ بحثاً عن مطابقات إكمال محتملة.
- dabbrev-expand
- حاول إجراء إكمال قائمة للنص الذي يسبق النقطة، بمقارنة النص مقابل أسطر من قائمة التاريخ بحثاً عن مطابقات إكمال محتملة.
- complete-into-braces (M-{)
- أجرِ إكمال اسم الملف وأدرج قائمة الإكمالات المحتملة محصورة بين أقواس متعرجة بحيث تكون القائمة متاحة للصدفة (انظر Brace Expansion أعلاه).
ماكروهات لوحة المفاتيح¶
- start-kbd-macro (C-x ()
- ابدأ حفظ المحارف المكتوبة في ماكرو لوحة المفاتيح الحالي.
- end-kbd-macro (C-x ))
- أوقف حفظ المحارف المكتوبة في ماكرو لوحة المفاتيح الحالي واحفظ التعريف.
- call-last-kbd-macro (C-x e)
- أعد تنفيذ آخر ماكرو لوحة مفاتيح عُرِّف، بجعل المحارف في الماكرو تظهر كما لو كانت مكتوبة من لوحة المفاتيح.
- print-last-kbd-macro ()
- اطبع آخر ماكرو لوحة مفاتيح عُرِّف بتنسيق مناسب لملف inputrc.
متفرقات¶
- re-read-init-file (C-x C-r)
- اقرأ محتويات ملف inputrc، وادمج أي ارتباطات أو تخصيصات متغيرات موجودة هناك.
- abort (C-g)
- أجهض أمر التحرير الحالي واقرع جرس المحطة الطرفية (وفقاً لإعداد bell-style).
- do-lowercase-version (M-A, M-B, M-x, ...)
- إذا كان المحرف x (المقرون بمفتاح Meta) حرفاً كبيراً، فشغل الأمر المرتبط بالمحرف الصغير المقابل له. السلوك غير محدد إذا كان x حرفاً صغيراً بالفعل.
- prefix-meta (ESC)
- اقرن المحرف التالي المكتوب بمفتاح Meta. يُعد ESC f مكافئاً لـ Meta-f.
- undo (C-_, C-x C-u)
- تراجع تزايدي، يُتذكر بشكل منفصل لكل سطر.
- revert-line (M-r)
- تراجع عن جميع التغييرات التي أجريت على هذا السطر. هذا يشبه تنفيذ أمر undo لمرات كافية لإعادة السطر إلى حالته الأولية.
- tilde-expand (M-&)
- أجرِ توسيع علامة المدة (tilde expansion) على الكلمة الحالية.
- set-mark (C-@, M-<space>)
- عيّن العلامة (mark) عند النقطة. إذا وُفر معطى عددي، تُعيّن العلامة عند ذلك الموضع.
- exchange-point-and-mark (C-x C-x)
- بادل النقطة مع العلامة. عيّن موضع المؤشر الحالي إلى الموضع المحفوظ، ثم عيّن العلامة إلى موضع المؤشر القديم.
- character-search (C-])
- اقرأ محرفاً وانقل النقطة إلى التواجد التالي لذلك المحرف. يبحث المعطى السالب عن التواجدات السابقة.
- character-search-backward (M-C-])
- اقرأ محرفاً وانقل النقطة إلى التواجد السابق لذلك المحرف. يبحث المعطى السالب عن التواجدات اللاحقة.
- skip-csi-sequence
- اقرأ ما يكفي من المحارف لاستيعاب تسلسل متعدد المفاتيح مثل تلك المحددة لمفاتيح مثل Home و End. تبدأ تسلسلات CSI بمؤشر تسلسل تحكم (CSI)، وعادة ما يكون ESC [. إذا كان هذا التسلسل مرتبطاً بـ “\e[”, المفاتيح التي تنتج تسلسلات CSI لن يكون لها أي تأثير ما لم تُربط صراحة بأمر readline، بدلاً من إدراج محارف شاردة في مخزن التحرير. هذا غير مرتبط افتراضياً، ولكنه يُربط عادة بـ ESC [.
- insert-comment (M-#)
- بدون معطى عددي، أدرج قيمة متغير comment-begin الخاص بـ readline في بداية السطر الحالي. إذا وُفر معطى عددي، يعمل هذا الأمر كمبدل: إذا كانت المحارف في بداية السطر لا تطابق قيمة comment-begin، فأدرج القيمة؛ وإلا فاحذف المحارف الموجودة في comment-begin من بداية السطر. في كلتا الحالتين، يُقبل السطر كما لو كُتب سطر جديد. القيمة الافتراضية لـ comment-begin تجعل هذا الأمر يحول السطر الحالي إلى تعليق صدفة. إذا أدى المعطى العددي إلى إزالة محرف التعليق، فستنفذ الصدفة السطر.
- spell-correct-word (C-x s)
- أجرِ تصحيحاً إملائياً للكلمة الحالية، مع معاملتها كدليل أو اسم ملف، بنفس طريقة خيار الصدفة cdspell. حدود الكلمات هي نفسها المستخدمة في shell-forward-word.
- glob-complete-word (M-g)
- عامل الكلمة التي تسبق النقطة كنمط لتوسيع مسار الملف، مع إلحاق نجمة ضمنياً، ثم استخدم النمط لإنشاء قائمة بأسماء الملفات المطابقة للإكمالات المحتملة.
- glob-expand-word (C-x *)
- عامل الكلمة التي تسبق النقطة كنمط لتوسيع مسار الملف، وأدرج قائمة بأسماء الملفات المطابقة، مستبدلاً الكلمة. إذا وُفر معطى عددي، فألحق * قبل توسيع المسار.
- glob-list-expansions (C-x g)
- اعرض قائمة التوسيعات التي كان من الممكن إنتاجها بواسطة glob-expand-word وأعد عرض السطر. إذا وُفر معطى عددي، فألحق * قبل توسيع المسار.
- dump-functions
- اطبع جميع الدوال وارتباطات مفاتيحها إلى دفق مخرجات readline. إذا وُفر معطى عددي، فسيُنَسَّق المخرج بطريقة تسمح بجعله جزءاً من ملف inputrc.
- dump-variables
- اطبع جميع متغيرات readline القابلة للضبط وقيمها إلى دفق مخرجات readline. إذا وُفر معطى عددي، فسيُنَسَّق المخرج بطريقة تسمح بجعله جزءاً من ملف inputrc.
- dump-macros
- اطبع جميع تسلسلات مفاتيح readline المرتبطة بماكروهات والسلاسل النصية التي تنتجها إلى دفق مخرجات readline. إذا وُفر معطى عددي، فسيُنَسَّق المخرج بطريقة تسمح بجعله جزءاً من ملف inputrc.
- execute-named-command (M-x)
- اقرأ اسم أمر readline قابل للربط من المدخلات ونفذ الدالة المرتبط بها، كما لو ظهر تسلسل المفاتيح المرتبط به في المدخلات. إذا زُوِّدت هذه الدالة بمعطى عددي، فإنها تمرر ذلك المعطى إلى الدالة التي تنفذها.
- display-shell-version (C-x C-v)
- اعرض معلومات الإصدار عن نسخة bash الحالية.
الإكمال القابل للبرمجة¶
عندما يحاول مستخدم إكمال كلمة لأمر ما أو لمعامل أمر حُدِّدت له مواصفات إكمال (compspec) باستخدام الأمر المدمج complete (انظر أوامر الصدفة المدمجة أدناه)، تستدعي مكتبة readline مرافق الإكمال القابلة للبرمجة.
أولاً، تحدد bash اسم الأمر. إذا كانت مواصفات الإكمال (compspec) قد حُدِّدت لهذا الأمر، تُستخدم هذه المواصفات لإنشاء قائمة من الإكمالات الممكنة للكلمة. إذا كانت كلمة الأمر عبارة عن سلسلة نصية فارغة (محاولة الإكمال في بداية سطر فارغ)، تستخدم bash أي مواصفات إكمال حُدِّدت بالخيار -E للأمر complete. يشير الخيار -I للأمر complete إلى أن كلمة الأمر هي أول كلمة ليست تعييناً على السطر، أو بعد محدد أوامر مثل ; أو |. يشير هذا عادةً إلى إكمال اسم الأمر.
إذا كانت كلمة الأمر مساراً كاملاً، تبحث bash عن مواصفات إكمال للمسار الكامل أولاً. وإذا لم توجد مواصفات للمسار الكامل، تحاول bash العثور على مواصفات للجزء الذي يلي آخر مائلة. وإذا لم تسفر عمليات البحث هذه عن مواصفات إكمال، أو إذا لم تكن هناك مواصفات لكلمة الأمر، تستخدم bash أي مواصفات إكمال حُدِّدت بالخيار -D للأمر complete كإكمال مبدئي. وإذا لم تكن هناك مواصفات مبدئية، تُجري bash توسيع الأسماء المستعارة على كلمة الأمر كملجأ أخير، وتحاول العثور على مواصفات لكلمة الأمر الناتجة عن أي توسيع ناجح.
وإذا لم يُعثر على مواصفات إكمال، تُجري bash إكمالها المبدئي كما هو موضح أعلاه تحت Completing. وخلاف ذلك، بمجرد العثور على مواصفات إكمال، تستخدمها bash لإنشاء قائمة من الكلمات المطابقة.
أولاً، تُنفذ bash الـ actions المحددة في مواصفات الإكمال. هذا لا يعيد سوى المطابقات التي تُعد سوابق للكلمة التي يُجرى إكمالها. عند استخدام الخيار -f أو -d لإكمال أسماء الملفات أو الدلائل، تستخدم bash متغير الصدفة FIGNORE لتنقية المطابقات.
بعد ذلك، ينشئ الإكمال القابل للبرمجة مطابقات محددة بنمط توسيع مسار قُدِّم كمعامل للخيار -G. لا يشترط في الكلمات الناتجة عن النمط أن تطابق الكلمة التي يُجرى إكمالها. تستخدم Bash متغير FIGNORE لتنقية المطابقات، لكنها لا تستخدم متغير الصدفة GLOBIGNORE.
بعد ذلك، ينظر الإكمال في السلسلة المحددة كمعامل للخيار -W. تُقسم السلسلة أولاً باستخدام الأحرف الموجودة في متغير IFS الخاص كفواصل. يحترم هذا اقتباسات الصدفة داخل السلسلة، لتوفير آلية للكلمات كي تحتوي على رموز الصدفة الخاصة (metacharacters) أو أحرف من قيمة IFS. ثم تُوسع كل كلمة باستخدام توسيع الأقواس، وتوسيع المدة (~)، وتوسيع المعاملات والمتغيرات، واستبدال الأوامر، والتوسيع الحسابي، كما هو موضح أعلاه تحت توسيع. تُقسم النتائج باستخدام القواعد الموضحة أعلاه تحت Word Splitting. تُطابق نتائج التوسيع كسوابق مع الكلمة التي يُجرى إكمالها، وتصبح الكلمات المطابقة إكمالات ممكنة.
بعد توليد هذه المطابقات، ينفذ bash أي دالة صدفة أو أمر حُدد بالخيارين -F و -C. عند استدعاء الأمر أو الدالة، يعين bash قيمًا لمتغيرات COMP_LINE، و COMP_POINT، و COMP_KEY، و COMP_TYPE كما هو موضح أعلاه تحت متغيرات الصدفة. إذا استُدعيت دالة صدفة، يضبط bash أيضًا متغيرات COMP_WORDS و COMP_CWORD. عند استدعاء الدالة أو الأمر، يكون المعامل الأول ($1) هو اسم الأمر الذي يُجرى إكمال معاملاته، والمعامل الثاني ($2) هو الكلمة التي يُجرى إكمالها، والمعامل الثالث ($3) هو الكلمة التي تسبق الكلمة الجاري إكمالها في سطر الأوامر الحالي. لا يُجرى ترشيح لعمليات الإكمال المولدة مقابل الكلمة الجاري إكمالها؛ فالدالة أو الأمر يتمتعان بحرية كاملة في توليد المطابقات وليس بالضرورة أن تطابق سابقة الكلمة.
تُستدعى أي دالة محددة بـ -F أولاً. يمكن للدالة استخدام أي من مرافق الصدفة، بما في ذلك الأوامر المدمجة compgen و compopt الموضحة أدناه، لتوليد المطابقات. ويجب أن تضع عمليات الإكمال الممكنة في متغير المصفوفة COMPREPLY، عنصرًا واحدًا لكل عنصر مصفوفة.
بعد ذلك، يُستدعى أي أمر محدد بالخيار -C في بيئة مكافئة لاستبدال الأوامر. يجب أن يطبع قائمة بعمليات الإكمال، واحدة في كل سطر، إلى المخرج القياسي. ستقوم الخط المائل العكسي (Backslash) بهروب سطر جديد إذا لزم الأمر. تُضاف هذه إلى مجموعة عمليات الإكمال الممكنة.
بعد توليد جميع عمليات الإكمال الممكنة، يطبق bash أي مرشح (filter) محدد بالخيار -X على عمليات الإكمال في القائمة. المرشح هو نمط يُستخدم كما في توسيع مسار الملف؛ وتُستبدل علامة & في النمط بنص الكلمة التي يُجرى إكمالها. يمكن هروب علامة & حرفية باستخدام الخط المائل العكسي؛ ويُحذف الخط المائل العكسي قبل محاولة المطابقة. يُحذف أي إكمال يطابق النمط من القائمة. علامة ! في البداية تنفي النمط؛ وفي هذه الحالة يحذف bash أي إكمال لا يطابق النمط. إذا فُعّل خيار الصدفة nocasematch، فسيجري bash المطابقة دون مراعاة لحالة الأحرف.
أخيرًا، يضيف الإكمال القابل للبرمجة أي سابقة ولاحقة محددة بالخيارين -P و -S على التوالي إلى كل إكمال، ويعيد النتيجة إلى readline كقائمة بعمليات الإكمال الممكنة.
إذا لم تُنشئ الإجراءات المطبقة سابقاً أي مطابقات، وكان الخيار -o dirnames قد قُدِّم للأمر complete عند تعريف مواصفات الإكمال، تحاول bash إكمال أسماء الدلائل.
إذا قُدِّم الخيار -o plusdirs للأمر complete عند تعريف مواصفات الإكمال، تحاول bash إكمال أسماء الدلائل وتضيف أي مطابقات إلى مجموعة الإكمالات الممكنة.
مبدئياً، إذا عُثر على مواصفات إكمال، فإن كل ما تنتجه يُعاد إلى كود الإكمال كالمجموعة الكاملة للإكمالات الممكنة. وتُعطل إكمالات bash المبدئية وإكمال أسماء الملفات المبدئي في readline. إذا قُدِّم الخيار -o bashdefault للأمر complete عند تعريف مواصفات الإكمال، ولم تنتج المواصفات أي مطابقات، تحاول bash إجراء إكمالاتها المبدئية. وإذا لم تنتج مواصفات الإكمال، وإكمالات bash المبدئية (في حال محاولتها)، أي مطابقات، وكان الخيار -o default قد قُدِّم للأمر complete عند تعريف المواصفات، يُجري الإكمال القابل للبرمجة إكمال readline المبدئي.
يمكن للخيارات المقدمة للأمرين complete و compopt التحكم في كيفية تعامل readline مع الإكمالات. على سبيل المثال، يخبر الخيار -o fullquote مكتبة readline باقتباس المطابقات كما لو كانت أسماء ملفات. انظر وصف complete أدناه للحصول على التفاصيل.
عندما تشير مواصفات الإكمال إلى أنها تريد إكمال أسماء الدلائل، تجبر وظائف الإكمال القابلة للبرمجة مكتبة readline على إلحاق مائلة بالأسماء المكتملة التي هي روابط رمزية لدلائل، وفقاً لقيمة متغير mark-directories في readline، بغض النظر عن إعداد متغير mark-symlinked-directories في readline.
يوجد بعض الدعم لتعديل الإكمالات ديناميكياً. هذا مفيد للغاية عند استخدامه مع إكمال مبدئي محدد باستخدام complete -D. من الممكن لدوال الصدفة التي تُنفذ كدوال إكمال أن تشير إلى وجوب إعادة محاولة الإكمال عن طريق إعادة حالة خروج 124. إذا أعادت دالة صدفة القيمة 124، وغيرت مواصفات الإكمال المرتبطة بالأمر الذي يُجرى محاولة إكماله (المقدم كمعامل أول عند تنفيذ الدالة)، يبدأ الإكمال القابل للبرمجة من جديد، مع محاولة العثور على مواصفات إكمال جديدة لهذا الأمر. يمكن استخدام هذا لبناء مجموعة من الإكمالات ديناميكياً أثناء محاولة الإكمال، بدلاً من تحميلها جميعاً مرة واحدة.
على سبيل المثال، بفرض وجود مكتبة لمواصفات الإكمال، كل منها محفوظ في ملف يقابل اسم الأمر، فإن دالة الإكمال المبدئية التالية ستحمل الإكمالات ديناميكياً:
_completion_loader() {
. "/etc/bash_completion.d/$1.sh".if 0<80n \
>/dev/null 2>&1 && return 124 } complete -D -F _completion_loader.if 0<80n \
-o bashdefault -o default
التاريخ¶
عند تمكين الخيار -o history للأمر المدمج set، توفر الصدفة إمكانية الوصول إلى تاريخ الأوامر، وهي قائمة بالأوامر التي طُبعت سابقاً. تُستخدم قيمة متغير HISTSIZE كعدد للأوامر المراد حفظها في قائمة التاريخ: تحفظ الصدفة نص آخر HISTSIZE أمراً (المبدئي 500). تخزن الصدفة كل أمر في قائمة التاريخ قبل توسيع المعاملات والمتغيرات (انظر توسيع أعلاه) ولكن بعد إجراء توسيع التاريخ، وفقاً لقيم متغيرات الصدفة HISTIGNORE و HISTCONTROL.
عند بدء التشغيل، تهيئ bash قائمة التاريخ بقراءة مدخلات التاريخ من الملف المسمى بمتغير HISTFILE (المبدئي ~/.bash_history). يُشار إلى ذلك الملف باسم ملف التاريخ. يُقلّم ملف التاريخ، إذا لزم الأمر، ليحتوي على ما لا يزيد عن عدد مدخلات التاريخ المحددة بقيمة متغير HISTFILESIZE. إذا كان HISTFILESIZE غير معين، أو معيناً على قيمة فارغة، أو قيمة غير رقمية، أو قيمة رقمية أقل من الصفر، فلا يُقلّم ملف التاريخ.
عند قراءة ملف التاريخ، تُفسر السطور التي تبدأ بحرف تعليق التاريخ متبوعاً مباشرة برقم كطوابع زمنية لسطر التاريخ التالي. تُعرض هذه الطوابع الزمنية اختيارياً اعتماداً على قيمة متغير HISTTIMEFORMAT. عندما تكون موجودة، تحدد طوابع التاريخ الزمنية مدخلات التاريخ، مما يجعل المدخلات متعددة السطور ممكنة.
عند خروج صدفة مُفعل فيها التاريخ، تنسخ bash آخر مدخلات $HISTSIZE من قائمة التاريخ إلى $HISTFILE. إذا فُعِّل خيار الصدفة histappend (انظر وصف shopt تحت أوامر الصدفة المدمجة أدناه)، تُلحق bash المدخلات بملف التاريخ، وإلا فإنها تكتب فوق ملف التاريخ. إذا كان HISTFILE غير معين أو فارغاً، أو إذا كان ملف التاريخ غير قابل للكتابة، فلا يُحفظ التاريخ. بعد حفظ التاريخ، تُقلّم bash ملف التاريخ ليحتوي على ما لا يزيد عن أسطر HISTFILESIZE كما هو موضح أعلاه.
إذا عُيِّن متغير HISTTIMEFORMAT، تكتب الصدفة معلومات الطابع الزمني المرتبطة بكل مدخل تاريخ في ملف التاريخ، مُميزة بحرف تعليق التاريخ، وبذلك تُحفظ الطوابع الزمنية عبر جلسات الصدفة. يستخدم هذا حرف تعليق التاريخ للتمييز بين الطوابع الزمنية وخطوط التاريخ الأخرى. وكما ذكر أعلاه، عند استخدام HISTTIMEFORMAT، تحدد الطوابع الزمنية مدخلات التاريخ متعددة الأسطر.
سيقوم الأمر المدمج fc (انظر أوامر الصدفة المدمجة أدناه) بسرد أو تحرير وإعادة تنفيذ جزء من قائمة التاريخ. يمكن للأمر المدمج history عرض أو تعديل قائمة التاريخ ومعالجة ملف التاريخ. عند استخدام تحرير سطر الأوامر، تتوفر أوامر بحث في كل وضع تحرير توفر الوصول إلى قائمة التاريخ.
تسمح الصدفة بالتحكم في الأوامر التي تُحفظ في قائمة التاريخ. تُستخدم متغيرات HISTCONTROL و HISTIGNORE لحفظ مجموعة فرعية فقط من الأوامر المدخلة. إذا فُعِّل خيار الصدفة cmdhist، تحاول الصدفة حفظ كل سطر من أمر متعدد الأسطر في نفس مدخل التاريخ، مع إضافة فواصل منقوطة عند الضرورة للحفاظ على الصحة النحوية. يُعدل خيار الصدفة lithist خيار cmdhist بحفظ الأمر مع أسطر جديدة مضمنة بدلاً من الفواصل المنقوطة. انظر وصف الأمر المدمج shopt أدناه تحت أوامر الصدفة المدمجة للحصول على معلومات حول تعيين وإلغاء تعيين خيارات الصدفة.
توسيع التاريخ¶
تدعم الصدفة ميزة توسيع التاريخ المشابهة لتوسيع التاريخ في csh. يصف هذا القسم ميزات النحو المتاحة.
يُفعل توسيع التاريخ مبدئياً للصدفات التفاعلية، ويمكن تعطيله باستخدام الخيار +H للأمر المدمج set (انظر أوامر الصدفة المدمجة أدناه). لا تُجري الصدفات غير التفاعلية توسيع التاريخ مبدئياً، ولكن يمكن تفعيله باستخدام “set -H”.
تُدخل توسيعات التاريخ كلمات من قائمة التاريخ إلى دفق المدخلات، مما يسهل تكرار الأوامر، أو إدراج معاملات أمر سابق في سطر المدخلات الحالي، أو إصلاح الأخطاء في الأوامر السابقة بسرعة.
يُجرى توسيع التاريخ فور قراءة سطر كامل، قبل أن تقوم الصدفة بتقسيمه إلى كلمات، ويُجرى على كل سطر على حدة. تحاول الصدفة إبلاغ دوال توسيع التاريخ بشأن الاقتباس الذي لا يزال سارياً من السطور السابقة.
يتم ذلك على جزأين. الأول هو تحديد أي مدخل من قائمة التاريخ سيُستخدم أثناء الاستبدال. والثاني هو اختيار أجزاء من ذلك المدخل لتضمينها في المدخل الحالي.
المدخل المختار من التاريخ هو الـ حدث (event)، والأجزاء من ذلك المدخل التي يُجرى العمل عليها هي كلمات. تتوفر مغيرات (modifiers) متنوعة لمعالجة الكلمات المختارة. يُقسم المدخل إلى كلمات بنفس الطريقة المتبعة عند قراءة المدخلات، بحيث تُعتبر الكلمات المتعددة المفصولة برموز خاصة (metacharacter) والمحاطة باقتباسات كلمة واحدة. يختار واسم الحدث الحدث، ويختار واسم الكلمة الاختياري كلمات من الحدث، وتتوفر مغيرات اختيارية متنوعة لمعالجة الكلمات المختارة.
تبدأ توسيعات التاريخ بظهور حرف توسيع التاريخ، وهو ! مبدئياً. قد تظهر توسيعات التاريخ في أي مكان في المدخلات، لكنها لا تتداخل.
المائلة الخلفية (\) وعلامات الاقتباس المفردة فقط هي ما يمكنها اقتباس حرف توسيع التاريخ، ولكن يُعامل حرف توسيع التاريخ أيضاً على أنه مقتبس إذا سبقت مباشرة علامة الاقتباس المزدوجة الختامية في سلسلة مقتبسة اقتباساً مزدوجاً.
تمنع عدة أحرف توسيع التاريخ إذا وُجدت مباشرة بعد حرف توسيع التاريخ، حتى لو كان غير مقتبس: المسافة، والتبويب، والسطر الجديد، وعودة العربة، و =، ورموز الصدفة الخاصة الأخرى المعرفة أعلاه.
يوجد اختصار خاص للاستبدال، يكون نشطاً عندما يكون حرف الاستبدال السريع (الموصوف أعلاه تحت histchars) هو الحرف الأول في السطر. يختار هذا المدخل السابق في قائمة التاريخ، باستخدام واسم حدث مكافئ لـ !!، ويستبدل سلسلة نصية بأخرى في ذلك المدخل. وهو موصوف أدناه تحت واسمات الأحداث. هذا هو توسيع التاريخ الوحيد الذي لا يبدأ بحرف توسيع التاريخ.
ستقوم عدة خيارات للصدفة قابلة للضبط باستخدام الأمر المدمج shopt بتعديل سلوك توسيع التاريخ (انظر وصف الأمر المدمج shopt أدناه). وإذا فُعِّل خيار الصدفة histverify، وكانت مكتبة readline مُستخدمة، فلن تُمرر استبدالات التاريخ فوراً إلى محلل الصدفة. وبدلاً من ذلك، يُعاد تحميل السطر الموسع في مخزن تحرير readline لإجراء مزيد من التعديل. وإذا كانت readline مُستخدمة، وفُعِّل خيار الصدفة histreedit، يُعاد تحميل استبدال التاريخ الفاشل في مخزن تحرير readline للتصحيح.
يُظهر الخيار -p للأمر المدمج history ما سيفعله توسيع التاريخ قبل استخدامه. سيقوم الخيار -s للأمر المدمج history بإضافة أوامر إلى نهاية قائمة التاريخ دون تنفيذها فعلياً، بحيث تكون متاحة للاستدعاء لاحقاً.
تسمح الصدفة بالتحكم في الأحرف المتنوعة التي تستخدمها آلية توسيع التاريخ (انظر وصف histchars أعلاه تحت متغيرات الصدفة). تستخدم الصدفة حرف تعليق التاريخ لتمييز طوابع التاريخ الزمنية عند كتابة ملف التاريخ.
واسمات الأحداث¶
واسم الحدث هو مرجع لمدخل في قائمة التاريخ. يتكون واسم الحدث من جزء الكلمة الذي يبدأ بحرف توسيع التاريخ وينتهي بواسم الكلمة إذا وُجد، أو بنهاية الكلمة. وما لم يكن المرجع مطلقاً، تكون الأحداث نسبية للموضع الحالي في قائمة التاريخ.
- !
- بدء استبدال التاريخ، إلا إذا كان متبوعاً بـ فراغ، أو سطر جديد، أو عودة عربة، أو =، أو ( عندما يكون خيار الصدفة extglob مفعلاً باستخدام الأمر المدمج shopt.
- !n
- الرجوع إلى مدخل قائمة التاريخ رقم n.
- !-n
- الرجوع إلى المدخل الحالي ناقص n.
- !!
- الرجوع إلى المدخل السابق. هذا مرادف لـ “!-1”.
- !string
- الرجوع إلى أحدث أمر يسبق الموضع الحالي في قائمة التاريخ ويبدأ بـ string.
- !?string[?]
- الرجوع إلى أحدث أمر يسبق الموضع الحالي في قائمة التاريخ ويحتوي على string. يمكن حذف علامة ? الختامية إذا كان string متبوعاً مباشرة بسطر جديد. إذا كان string مفقوداً، فسيستخدم هذا السلسلة من أحدث بحث؛ ويُعد خطأً إذا لم توجد سلسلة بحث سابقة.
- ^string1^string2^
- استبدال سريع. تكرار الأمر السابق، مع استبدال string1 بـ string2. مكافئ لـ “!!:s^string1^string2^” (انظر المغيرات أدناه).
- !#
- كامل سطر الأوامر المكتوب حتى الآن.
واسمات الكلمات¶
تُستخدم واسمات الكلمات لاختيار كلمات محددة من الحدث. وهي اختيارية؛ إذا لم يُقدم واسم الكلمة، يستخدم توسيع التاريخ الحدث كاملاً. تفصل النقطتان : بين مواصفات الحدث وواسم الكلمة. يمكن حذفها إذا بدأ واسم الكلمة بـ ^، أو $، أو *، أو -، أو %. تُرقم الكلمات من بداية السطر، حيث يرمز للكلمة الأولى بالرقم 0 (صفر). تُدرج الكلمات في السطر الحالي مفصولة بمسافات مفردة.
- 0 (صفر)
- الكلمة رقم صفر. بالنسبة للصدفة، هذه هي كلمة الأمر.
- n
- الكلمة رقم n.
- ^
- المعامل الأول: الكلمة رقم 1.
- $
- الكلمة الأخيرة. وعادة ما تكون هي المعامل الأخير، ولكنها ستتوسع إلى الكلمة رقم صفر إذا كانت هناك كلمة واحدة فقط في السطر.
- %
- الكلمة الأولى المطابقة لأحدث “?string?” بحث، إذا بدأت سلسلة البحث بحرف هو جزء من كلمة. مبدئياً، تبدأ عمليات البحث من نهاية كل سطر وتتجه نحو البداية، لذا فإن أول كلمة مطابقة هي الأقرب لنهاية السطر.
- x-y
- نطاق من الكلمات؛ “-y” تختصر “0-y”.
- *
- جميع الكلمات عدا الكلمة رقم صفر. هذا مرادف لـ “1-$”. ليس من الخطأ استخدام * إذا كانت هناك كلمة واحدة فقط في الحدث؛ إذ تتوسع إلى سلسلة نصية فارغة في تلك الحالة.
- x*
- تختصر x-$.
- x-
- تختصر x-$ مثل x*، ولكنها تحذف الكلمة الأخيرة. إذا كان x مفقوداً، فإن قيمته المبدئية تكون 0.
إذا قُدم واسم كلمة بدون مواصفات حدث، يُستخدم الأمر السابق كحدث، وهذا يكافئ !!.
المعدلات¶
بعد واسم الكلمة الاختياري، قد يتضمن التوسيع تسلسلاً من مغير واحد أو أكثر من المغيرات التالية، كل منها مسبوق بـ “:”. تقوم هذه بتعديل أو تحرير الكلمة أو الكلمات المختارة من حدث التاريخ.
- h
- إزالة مكون مسار لاحق، مع ترك الرأس فقط.
- t
- إزالة جميع مكونات المسار البادئة، مع ترك الذيل.
- r
- إزالة لاحقة من شكل .xxx، مع ترك الاسم الأساسي.
- e
- إزالة كل شيء ما عدا اللاحقة الأخيرة.
- p
- طباعة الأمر الجديد دون تنفيذه.
- q
- اقتباس الكلمات المستبدلة، مع هرب أي استبدالات أخرى.
- x
- اقتباس الكلمات المستبدلة كما هو الحال مع q، ولكن مع تقسيمها إلى كلمات عند الـ فراغات والأسطر الجديدة. المغيران q و x متعارضان؛ ويستخدم التوسيع آخر مغير قُدم.
- s/old/new/
- استبدال new بأول ظهور لـ old في سطر الحدث. يمكن استخدام أي حرف كمحدد بدلاً من /. المحدد النهائي اختياري إذا كان هو الحرف الأخير في سطر الحدث. تقوم المائلة الخلفية الواحدة باقتباس المحدد في old و new. إذا ظهرت علامة & في new، تُستبدل بـ old. وتقوم المائلة الخلفية الواحدة باقتباس &. إذا كان old فارغاً، يُعين على آخر old استُبدل، أو إذا لم تحدث استبدالات تاريخ سابقة، يُعين على آخر string في بحث !?string[?]. إذا كان new فارغاً، يُحذف كل old مطابق.
- &
- تكرار الاستبدال السابق.
- g
- جعل التغييرات تُطبق على سطر الحدث بالكامل. يُستخدم هذا بالاقتران مع “:s” (على سبيل المثال، “:gs/old/new/”) أو “:&”. وإذا استُخدم مع “:s”, فيمكن استخدام أي محدد بدلاً من /، ويكون المحدد النهائي اختيارياً إذا كان هو الحرف الأخير في سطر الحدث. ويمكن استخدام a كمرادف لـ g.
- G
- تطبيق الـ “s” أو “&” مغير التالي مرة واحدة على كل كلمة في سطر الحدث.
أوامر الصدفة المدمجة¶
ما لم يذكر خلاف ذلك، فإن كل أمر داخلي موثق في هذا القسم على أنه يقبل خيارات مسبوقة بـ - يقبل -- للدلالة على نهاية الخيارات. الأوامر الداخلية : و true و false و test/[ لا تقبل خيارات ولا تعامل -- بمعاملة خاصة. الأوامر الداخلية exit و logout و return و break و continue و let و shift تقبل وتعالج المعطيات التي تبدأ بـ - دون الحاجة إلى --. الأوامر الداخلية الأخرى التي تقبل معطيات ولكن لم يحدد قبولها لخيارات، تفسر المعطيات التي تبدأ بـ - كخيارات غير صالحة وتتطلب -- لمنع هذا التفسير.
- : [معطيات]
- لا تأثير؛ لا يفعل الأمر شيئًا سوى توسيع الوسائط arguments وتنفيذ أي عمليات إعادة توجيه محددة. حالة العودة هي صفر.
- . [-p مسار] اسم_الملف [وسطاء]
- source [-p مسار] اسم_الملف [معطيات]
- يقرأ الأمر . (أو source) الأوامر وينفذها من filename في بيئة الصدفة الحالية ويعيد حالة الخروج لآخر أمر نُفذ من filename.
- إذا لم يحتوِ filename على شرطة مائلة، يبحث . عنه. إذا زود الخيار -p، يعامل . المسار path كقائمة أدلة مفصولة بنقطتين للبحث فيها عن filename؛ وإلا يستخدم . الإدخالات في PATH للعثور على الدليل الذي يحتوي على filename. لا يشترط أن يكون filename قابلا للتنفيذ. عندما لا يكون bash في وضع posix، فإنه يبحث في الدليل الحالي إذا لم يُعثر على filename في PATH، ولكنه لا يبحث في الدليل الحالي إذا زود الخيار -p. إذا عُطل خيار sourcepath في أمر الصدفة المدمج shopt، فلن يبحث . في PATH.
- إذا زودت أي arguments، فإنها تصبح المعاملات الموضعية عند تنفيذ filename. وإلا تظل المعاملات الموضعية دون تغيير.
- إذا جرى تفعيل الخيار -T، يرث الأمر . أي فخ (trap) لـ DEBUG؛ وإذا لم يُفعل، يتم حفظ أي سلسلة فخ لـ DEBUG واستعادتها حول استدعاء .، ويقوم . بإلغاء ضبط فخ DEBUG أثناء تنفيذه. إذا لم يُضبط -T، وقام الملف المصدر بتغيير فخ DEBUG، فستستمر القيمة الجديدة بعد اكتمال .. حالة الرجوع هي حالة آخر أمر نُفذ من filename (0 في حال عدم تنفيذ أي أوامر)، وقيمة غير صفرية إذا لم يُعثر على filename أو تعذرت قراءته.
- alias [-p] [الاسم[=القيمة] ...]
- بدون وسائط أو مع خيار -p، يطبع alias قائمة الأسماء المستعارة بصيغة alias name=value على المخرجات القياسية. عند تقديم وسائط، يُعرف اسمًا مستعارًا لكل name مُعطى له value. تؤدي المسافة اللاحقة في value إلى فحص الكلمة التالية لاستبدال الاسم المستعار عند توسيعه أثناء تحليل الأمر. لكل name في قائمة الوسائط لم تُقدم له value، يُطبع اسم وقيمة الاسم المستعار name. يعيد alias قيمة صحيحة ما لم يُعطَ name (بدون =value مقابلة) لم يُعرف له اسم مستعار.
- bg [jobspec ...]
- استئناف كل وظيفة معلقة jobspec في الخلفية، كما لو أنها بدأت بـ &. إذا لم يوجد jobspec، تستخدم الصدفة تصورها لـ الوظيفة الحالية. يعيد bg jobspec القيمة 0 ما لم يشغل عند تعطيل التحكم في الوظائف، أو عند تشغيله مع تمكين التحكم في الوظائف إذا لم يتم العثور على أي jobspec محدد أو بدأ بدون التحكم في الوظائف.
- bind [-m keymap] [-lsvSVX]
- bind [-m keymap] [-q function] [-u function] [-r keyseq]
- bind [-m keymap] -f filename
- bind [-m keymap] -x keyseq[:] shell-command
- bind [-m keymap] keyseq:function-name
- bind [-m keymap] -p|-P [readline-command]
- bind [-m keymap] keyseq:readline-command
- bind سطر-أوامر-readline
- اعرض ارتباطات مفاتيح ودوال readline الحالية، أو اربط تسلسل مفاتيح بدالة أو ماكرو في readline أو بأمر صدفة، أو اضبط متغير readline. كل وسيط ليس خياراً هو ارتباط مفتاح أو أمر كما يظهر في ملف تهيئة readline مثل .inputrc، ولكن يجب تمرير كل ارتباط أو أمر كوسيط منفصل؛ مثلاً، '"\C-x\C-r": re-read-init-file'. في التوصيفات التالية، تُنسق المخرجات المتاحة لإعادة القراءة كأوامر تظهر في ملف تهيئة readline أو تُقدم كوسائط فردية لأمر bind. الخيارات، إذا تم توفيرها، لها المعاني التالية:
- -m خارطة_المفاتيح
- استخدم keymap كخريطة مفاتيح لتتأثر بالارتباطات اللاحقة. أسماء keymap المقبولة هي emacs، emacs-standard، emacs-meta، emacs-ctlx، vi، vi-move، vi-command، و vi-insert. رمز vi يعادل vi-command (vi-move مرادف أيضًا)؛ و emacs يعادل emacs-standard.
- -l
- أدرج أسماء كافة دالات readline.
- -p
- اعرض أسماء دوال readline وارتباطاتها بطريقة تتيح استخدامها كوسيط لأمر bind لاحق أو في ملف تهيئة readline. إذا تبقت وسائط بعد معالجة الخيارات، سيعاملها bind كأسماء أوامر readline ويقصر المخرجات على تلك الأسماء.
- -P
- سرد أسماء دوال وارتباطات readline الحالية. إذا بقيت معاملات بعد معالجة الخيارات، فإن bind يعاملها كأسماء أوامر readline ويقيد المخرجات لتلك الأسماء.
- -s
- اعرض تسلسلات مفاتيح readline المرتبطة بالماكرو والسلاسل النصية التي تخرجها بطريقة تتيح استخدامها كوسيط لأمر bind لاحق أو في ملف تهيئة readline.
- -S
- اعرض تسلسلات مفاتيح readline المرتبطة بالماكرو والسلاسل النصية التي تخرجها.
- -v
- اعرض أسماء متغيرات readline وقيمها بطريقة تتيح استخدامها كوسيط لأمر bind لاحق أو في ملف تهيئة readline.
- -V
- سرد أسماء وقيم متغيرات readline الحالية.
- -f اسم_الملف
- قراءة روابط المفاتيح من filename.
- -q دالة
- يعرض تسلسلات المفاتيح التي تستدعي readline دالة المسمى.
- -u دالة
- فك ربط كافة تسلسلات المفاتيح المربوطة بـ function المسماة في readline.
- -r تسلسل_المفاتيح
- إزالة أي ربط حالي لـ keyseq.
- -x تسلسل_مفاتيح[: ]أمر-صدفة
- يؤدي إلى تنفيذ أمر-الصدفة كلما أُدخل keyseq. الفاصل بين keyseq وأمر-الصدفة هو إما مسافة بيضاء أو نقطتان متبوعتان اختياريًا بمسافة بيضاء. إذا كان الفاصل مسافة بيضاء، فيجب إحاطة أمر-الصدفة بعلامات اقتباس مزدوجة ويقوم readline بتوسيع أي من هروب الشرطة المائلة الخلفية الخاصة به في أمر-الصدفة قبل حفظه. إذا كان الفاصل نقطتين، فإن أي علامات اقتباس مزدوجة محيطة تكون اختيارية، ولا يقوم readline بتوسيع سلسلة الأمر قبل حفظها. بما أن تعبير ربط المفاتيح بالكامل يجب أن يكون معاملًا واحدًا، فينبغي إحاطته بعلامات اقتباس مفردة. عند تنفيذ أمر-الصدفة، تضبط الصدفة متغير READLINE_LINE على محتويات خبيئة سطر readline ومتغيري READLINE_POINT و READLINE_MARK على الموقع الحالي لنقطة الإدراج ونقطة الإدراج المحفوظة (العلامة)، على التوالي. تسند الصدفة أي معامل عددي قدمه المستخدم إلى متغير READLINE_ARGUMENT. إذا لم يكن هناك معامل، فلن يُضبط هذا المتغير. إذا قام الأمر المنفذ بتغيير قيمة أي من READLINE_LINE أو READLINE_POINT أو READLINE_MARK، فستنعكس تلك القيم الجديدة في حالة التحرير.
- -X
- سرد كافة تسلسلات المفاتيح المرتبطة بأوامر الصدفة والأوامر المرتبطة بها بتنسيق يمكن إعادة استخدامه كمعامل لأمر bind لاحق.
القيمة المرجعة هي 0 ما لم يُقدم خيار غير معروف أو حدث خطأ.
- break [n]
- اخرج من داخل حلقة for أو while أو until أو select. إذا تم تحديد n، فإن break يخرج من عدد n من الحلقات المحيطة. يجب أن يكون n ≥ 1. إذا كان n أكبر من عدد الحلقات المحيطة، يتم الخروج من جميع الحلقات المحيطة. قيمة الإرجاع هي 0 ما لم يكن n غير أكبر من أو يساوي 1.
- builtin shell-builtin [arguments]
- نفذ أمر الصدفة المدمج المحدد shell-builtin، ممررًا إليه arguments، وأرجع حالة الخروج الخاصة به. هذا مفيد عند تعريف دالة لها نفس اسم مدمج في الصدفة، مع الاحتفاظ بوظيفية المدمج داخل الدالة. يُعاد تعريف المدمج cd عادةً بهذه الطريقة. تكون حالة الرجوع خطأ (false) إذا لم يكن shell-builtin أمرًا مدمجًا في الصدفة.
- caller [expr]
- يعيد سياق أي استدعاء روتين فرعي نشط (دالة صدفة أو سكربت نُفذ باستخدام الأوامر المدمجة . أو source).
- بدون expr، يعرض caller رقم السطر واسم ملف المصدر لاستدعاء الروتين الفرعي الحالي. إذا قُدم عدد صحيح غير سالب كـ expr، يعرض caller رقم السطر، واسم الروتين الفرعي، وملف المصدر المقابل لذلك الموضع في مكدس نداءات التنفيذ الحالي. يمكن استخدام هذه المعلومات الإضافية، على سبيل المثال، لطباعة تتبع المكدس. الإطار الحالي هو الإطار 0.
- القيمة المرجعة هي 0 ما لم تكن الصدفة لا تنفذ استدعاء روتين فرعي أو كان expr لا يتوافق مع موضع صالح في مكدس الاستدعاءات.
- cd [-L] [-@] [dir]
- cd -P [-e] [-@] [dir]
- غير الدليل الحالي إلى dir. إذا لم يُزود dir، تُستخدم قيمة متغير صدفة HOME كـ dir. يوجد المتغير CDPATH، وإذا لم يبدأ dir بشرطة مائلة (/)، يستخدمه cd كمسار بحث: تبحث الصدفة عن كل اسم دليل في CDPATH عن dir. تُفصل أسماء الأدلة البديلة في CDPATH بنقطتين (:). اسم الدليل الفارغ في CDPATH هو نفس الدليل الحالي، أي: “.”.
- يجعل الخيار -P الأمر cd يستخدم بنية الدليل الفيزيائية من خلال حل الروابط الرمزية أثناء عبور dir وقبل معالجة حالات من .. في dir (انظر أيضًا الخيار -P للأمر المدمج set).
- يجبر الخيار -L الأمر cd على تتبع الروابط الرمزية من خلال حل الرابط بعد معالجة حالات من .. في dir. إذا .. يظهر في dir، يعالجه cd بإزالة مكون مسار الملف السابق مباشرة من dir، عودةً إلى المائلة أو بداية dir، والتحقق من أن الجزء من dir الذي تمت معالجته حتى تلك النقطة لا يزال اسم دليل صالحًا بعد إزالة مكون المسار. إذا لم يكن اسم دليل صالحًا، يعيد cd حالة غير صفرية. إذا لم يتم توفير لا -L ولا -P، يتصرف cd كما لو تم توفير -L.
- إذا تم تزويد الخيار -e مع -P، وتعذر على cd تحديد مجلد العمل الحالي بنجاح بعد تغيير المجلد بنجاح، فإنه يرجع حالة غير صفرية.
- في الأنظمة التي تدعم ذلك، يعرض الخيار -@ السمات الممتدة المرتبطة بملف كدليل.
- يُحوّل معطى - إلى $OLDPWD قبل محاولة تغيير المجلد.
- إذا استخدم cd اسم دليل غير فارغ من CDPATH، أو إذا كان - هو الوسيطة الأولى، وكان تغيير الدليل ناجحا، يكتب cd مسار الدليل المطلق لمجلد العمل الجديد في المخرجات القياسية.
- إذا نجح تغيير المجلد، يقوم cd بضبط قيمة متغير البيئة PWD إلى اسم المجلد الجديد، ويضبط متغير البيئة OLDPWD إلى قيمة مجلد العمل الحالي قبل التغيير.
- القيمة المرجعة هي true إذا غُير الدليل بنجاح؛ و false خلاف ذلك.
- command [-pVv] command [arg ...]
- يشغل الأمر الداخلي command الـ أمر مع الـ معاملات مع تعطيل البحث العادي عن دوال الصدفة للـ أمر. تُنفذ الأوامر الداخلية فقط أو الأوامر الموجودة في PATH والمسمى أمر. إذا وُفر الخيار -p، فسيُجرى البحث عن أمر باستخدام قيمة مبدئية لـ PATH تضمن العثور على جميع الأدوات القياسية.
- إذا زود أي من الخيارين -V أو -v، يطبع command وصفا لـ command. يعرض الخيار -v كلمة واحدة تشير إلى الأمر أو اسم الملف المستخدم لاستدعاء command؛ بينما ينتج الخيار -V وصفا أكثر تفصيلا.
- إذا تم تزويد الخيار -V أو -v، تكون حالة الخروج صفرًا إذا تم العثور على الأمر، وغير صفرية إذا لم يتم العثور عليه. إذا لم يتم تزويد أي من الخيارين وحدث خطأ أو تعذر العثور على الأمر، تكون حالة الخروج 127. بخلاف ذلك، تكون حالة خروج المدمج command هي حالة خروج الأمر.
- compgen [-V varname] [option] [word]
- ولد تطابقات إكمال محتملة لـ word وفقًا لـ الخيارات، والتي قد تكون أي خيار يقبله complete المدمج باستثناء -p، -r، -D، -E، و -I، واكتب التطابقات إلى المخرج القياسي.
- إذا تم تزويد الخيار -V، يقوم compgen بتخزين عمليات الإكمال المولدة في متغير مصفوفة مفهرسة varname بدلاً من كتابتها في المخرجات القياسية.
- عند استخدام خيارات -F أو -C، فإن متغيرات الصدفة المتنوعة التي تضبطها مرافق الإكمال القابلة للبرمجة، رغم توفرها، لن تحتوي على قيم مفيدة.
- ستُولد التطابقات بنفس الطريقة التي يولدها بها كود الإكمال القابل للبرمجة مباشرة من مواصفات إكمال بنفس الأعلام. إذا حُددت word، فستُعرض أو تُخزن فقط عمليات الإكمال التي تطابق word.
- القيمة المرجعة هي true ما لم يُقدم خيار غير صالح، أو لم تُولد أي تطابقات.
- complete [-abcdefgjksuv] [-o comp-option] [-DEI] [-A action]
-
[-G globpat] [-W wordlist] [-F function] [-C command]
[-X filterpat] [-P prefix] [-S suffix] name [name ...] - complete -pr [-DEI] [name ...]
- تحديد كيفية إكمال الوسائط لكل اسم name.
- إذا وُفر الخيار -p، أو إذا لم تُوفر خيارات أو أسماء، فتُطبع مواصفات الإكمال الحالية بطريقة تسمح بإعادة استخدامها كمدخلات. يزيل الخيار -r مواصفة إكمال لكل اسم، أو إذا لم تُوفر أسماء، تُزال كل مواصفات الإكمال.
- يشير الخيار -D إلى أن الخيارات والإجراءات الأخرى المقدمة يجب أن تنطبق على “default” إكمال الأوامر؛ أي الإكمال المحاول على أمر لم يسبق تعريف إكمال له. يشير الخيار -E إلى أن الخيارات والإجراءات الأخرى الموفرة يجب أن تنطبق على “empty” إكمال الأوامر؛ أي الإكمال المحاول في سطر فارغ. يشير الخيار -I إلى أن الخيارات والإجراءات الأخرى الموفرة يجب أن تنطبق على الإكمال في الكلمة الأولى غير المسندة في السطر، أو بعد فاصل أوامر مثل ; أو |، وهو عادةً إكمال اسم الأمر. إذا وُفرت خيارات متعددة، فإن الخيار -D له الأولوية على -E، وكلاهما لهما الأولوية على -I. إذا وُفر أي من -D أو -E أو -I، تُتجاهل أي وسائط name أخرى؛ وتنطبق عمليات الإكمال هذه فقط على الحالة المحددة بالخيار.
- عملية تطبيق مواصفات الإكمال هذه عند محاولة إكمال الكلمات موصوفة above under Programmable Completion.
- الخيارات الأخرى، إذا حُددت، فلها المعاني التالية. يجب وضع وسائط الخيارات -G و -W و -X (وإذا لزم الأمر، الخياران -P و -S) بين علامتي اقتباس لحمايتها من التوسع قبل استدعاء الأمر المدمج complete.
- -o خيار-ضغط
- يتحكم الـ خيار-الإكمال في عدة جوانب من سلوك مواصفة الإكمال (compspec) بعيدًا عن التوليد البسيط للإكمالات. قد يكون خيار-الإكمال واحدًا من:
- bashdefault
- أجرِ بقية عمليات إكمال bash المبدئية إذا لم يولد compspec أي تطابقات.
- default
- استخدم إكمال أسماء الملفات المبدئي لـ readline إذا لم يولد compspec أي تطابقات.
- dirnames
- أجرِ إكمالاً لاسم الدليل إذا لم يولد compspec أي تطابقات.
- أسماء الملفات
- إخبار readline أن compspec يولد أسماء ملفات، حتى يتمكن من إجراء أي معالجة خاصة بأسماء الملفات (مثل إضافة شرطة مائلة لأسماء الأدلة، أو اقتباس المحارف الخاصة، أو منع المسافات اللاحقة). هذا مخصص للاستخدام مع دوال الغلاف.
- fullquote
- إخبار readline باقتباس جميع الكلمات المكملة حتى لو لم تكن أسماء ملفات.
- noquote
- إخبار readline بعدم اقتباس الكلمات المكملة إذا كانت أسماء ملفات (اقتباس أسماء الملفات هو الافتراضي).
- nosort
- إخبار readline بعدم فرز قائمة الإكمالات الممكنة أبجدياً.
- nospace
- إخبار readline بعدم إلحاق مسافة (الافتراضي) بالكلمات التي تم إكمالها في نهاية السطر.
- plusdirs
- بعد توليد أي تطابقات محددة بواسطة compspec، حاول إكمال اسم الدليل وأضف أي تطابقات إلى نتائج الإجراءات الأخرى.
- -A الإجراء
- قد يكون الـ إجراء واحدًا مما يلي لتوليد قائمة بالإكمالات الممكنة:
- alias
- أسماء مستعارة. يمكن تحديدها أيضاً باستخدام -a.
- arrayvar
- أسماء متغيرات المصفوفة.
- binding
- أسماء روابط مفاتيح Readline.
- builtin
- أسماء أوامر الصدفة المدمجة. يمكن تحديدها أيضًا كـ -b.
- command
- أسماء الأوامر. قد تُحدد أيضًا كـ -c.
- directory
- أسماء الأدلة. يمكن تحديدها أيضاً كـ -d.
- disabled
- أسماء أوامر الصدفة المدمجة المعطلة.
- enabled
- أسماء أوامر الصدفة المدمجة الممكنة.
- export
- أسماء متغيرات الصدفة المصدرة. يمكن تحديدها أيضًا كـ -e.
- file
- أسماء الملفات والمجلدات، على غرار إكمال أسماء الملفات في readline. قد يتم تحديده أيضًا كـ -f.
- الدالة
- أسماء دوال الصدفة.
- مجموعة
- أسماء المجموعات. يمكن تحديدها أيضًا بـ -g.
- helptopic
- مواضيع المساعدة كما تقبلها الأداة المضمنة help.
- hostname
- أسماء المضيفين، كما هي مأخوذة من الملف المحدد بواسطة متغير الصدفة HOSTFILE.
- job
- أسماء الوظائف (Job names)، إذا كان التحكم في الوظائف نشطاً. يمكن تحديدها أيضاً كـ -j.
- keyword
- كلمات الصدفة المحجوزة. يمكن تحديدها أيضًا بـ -k.
- running
- أسماء المهام الجارية، إذا كان التحكم بالمهام نشطًا.
- service
- أسماء الخدمة. يمكن تحديدها أيضًا بـ -s.
- setopt
- المعطيات الصالحة للخيار -o للأمر الداخلي set.
- shopt
- أسماء خيارات الصدفة كما يقبلها أمر shopt المدمج.
- signal
- أسماء الإشارات (Signals).
- stopped
- أسماء المهام المتوقفة، إذا كان التحكم بالمهام نشطًا.
- user
- أسماء المستخدمين. يمكن تحديدها أيضاً عبر -u.
- variable
- أسماء جميع متغيرات الصدفة. يمكن تحديدها أيضًا كـ -v.
- -C الأمر
- يُنفذ command في بيئة صدفة فرعية، ويُستخدم خرجه كإكمالات ممكنة. تُمرر الوسائط كما هو الحال مع الخيار -F.
- -F الدالة
- تُنفذ دالة الصدفة function في بيئة الصدفة الحالية. عند تنفيذ الدالة، يكون الوسيط الأول ($1) هو اسم الأمر الذي تُكمل وسائطه، والوسيط الثاني ($2) هو الكلمة التي تُكمل، والوسيط الثالث ($3) هو الكلمة التي تسبق الكلمة التي تُكمل على سطر الأوامر الحالي. عندما تنتهي function، يسترجع الإكمال القابل للبرمجة الإكمالات الممكنة من قيمة متغير مصفوفة COMPREPLY.
- -G نمط_التعميم
- قم بتوسيع نمط توسيع مسار الملف globpat لتوليد الإكمال الممكن.
- -P بادئة
- أضف prefix إلى بداية كل إكمال ممكن بعد تطبيق جميع الخيارات الأخرى.
- -S اللاحقة
- ألحق suffix لكل إكمال ممكن بعد تطبيق كل الخيارات الأخرى.
- -W قائمة_كلمات
- تقسيم wordlist باستخدام المحارف الموجودة في متغير IFS الخاص كفواصل، وتوسيع كل كلمة ناتجة. يتم احترام اقتباس الغلاف (Shell quoting) داخل wordlist لتوفير آلية للكلمات لكي تحتوي على محارف الغلاف الخاصة أو محارف في قيمة IFS. الإكمالات الممكنة هي أعضاء القائمة الناتجة التي تطابق بادئة الكلمة التي يتم إكمالها.
- -X نمط_المرشح
- يُعد filterpat نمطًا يُستخدم لتوسيع أسماء المسارات. يُطبق على قائمة الإكمالات الممكنة التي ولدتها الخيارات والوسائط السابقة، وتُزال كل إكمال يطابق filterpat من القائمة. علامة ! البادئة في filterpat تنفي النمط؛ في هذه الحالة، تُزال أي إكمال لا يطابق filterpat.
القيمة المرجعة هي true ما لم يُقدم خيار غير صالح، أو قُدم خيار غير -p أو -r أو -D أو -E أو -I بدون وسيط name، أو حدثت محاولة لإزالة مواصفات إكمال لـ name لا توجد له مواصفات، أو حدث خطأ أثناء إضافة مواصفات إكمال.
- compopt [-o option] [-DEI] [+o option] [name]
- تعديل خيارات الإكمال لكل name وفقاً لـ options، أو للإكمال الجاري تنفيذه حالياً إذا لم تُزود أسماء. إذا لم تُزود خيارات، تُعرض خيارات الإكمال لكل name أو الإكمال الحالي. القيم الممكنة لـ option هي تلك الصالحة لـ complete المدمج الموصوف أعلاه.
- يشير الخيار -D إلى أن الخيارات الأخرى المقدمة يجب أن تنطبق على “default” إكمال الأوامر؛ يشير الخيار -E إلى أن الخيارات الأخرى الموفرة يجب أن تنطبق على “empty” إكمال الأوامر؛ ويشير الخيار -I إلى أن الخيارات الأخرى الموفرة يجب أن تنطبق على الإكمال في الكلمة الأولى في السطر. تُحدد هذه بنفس طريقة complete المدمجة.
- إذا زودت عدة خيارات، يكون للخيار -D الأولوية على -E، وكلاهما لهما الأولوية على -I.
- القيمة المرجعة هي true ما لم يُقدم خيار غير صالح، أو حدثت محاولة لتعديل الخيارات لـ name لا يوجد له مواصفات إكمال، أو حدث خطأ في المخرج.
- continue [n]
- يستأنف continue التكرار التالي للحلقة for أو while أو until أو select المحيطة. إذا حُدد n، تستأنف bash الحلقة المحيطة رقم n. يجب أن يكون n أكبر من أو يساوي 1. إذا كان n أكبر من عدد الحلقات المحيطة، تستأنف الصدفة آخر حلقة محيطة ( “top-level” حلقة). القيمة الراجعة هي 0 ما لم تكن n ليست أكبر من أو تساوي 1.
- declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]
- typeset [-aAfFgiIlnrtux] [-p] [اسم[=قيمة] ...]
- صرّح عن المتغيرات أو امنحها سمات. إذا لم تُعطَ أي أسماء (names)، فاعرض قيم المتغيرات أو الدوال. سيعرض الخيار -p السمات والقيم لكل اسم. عند استخدام -p مع وسائط الأسماء، تُتجاهل الخيارات الإضافية بخلاف -f و -F.
- عند تقديم -p بدون وسائط name، سيعرض declare السمات والقيم لكافة المتغيرات التي لها السمات المحددة بواسطة الخيارات الإضافية. إذا لم تُقدم خيارات أخرى مع -p، سيعرض declare السمات والقيم لكافة متغيرات الصدفة. يقصر الخيار -f العرض على وظائف الصدفة.
- يمنع الخيار -F عرض تعريفات الدوال؛ حيث يُطبع اسم الدالة وسماتها فقط. إذا فُعّل خيار الصدفة extdebug باستخدام shopt، فسيُعرض اسم ملف المصدر ورقم السطر حيث عُرف كل اسم أيضًا. الخيار -F يتضمن -f.
- يجبر الخيار -g على إنشاء المتغيرات أو تعديلها في النطاق العام، حتى عند تنفيذ declare داخل دالة صدفة. يُتجاهل هذا الخيار عندما لا يُنفذ declare داخل دالة صدفة.
- يجعل الخيار -I المتغيرات المحلية ترث السمات (باستثناء سمة nameref) وقيمة أي متغير موجود بنفس الـ اسم في النطاق المحيط. إذا لم يكن هناك متغير موجود، فإن المتغير المحلي يكون غير معين في البداية.
- يمكن استخدام الخيارات التالية لتقييد المخرج للمتغيرات ذات السمة المحددة أو لإعطاء سمات للمتغيرات:
- -a
- كل اسم هو متغير مصفوفة مفهرسة (راجع المصفوفات above).
- -A
- كل اسم هو متغير مصفوفة ترابطية (راجع المصفوفات above).
- -f
- يشير كل اسم إلى دالة في الصدفة.
- -i
- تُعامل المتغير كعدد صحيح؛ التقييم الحسابي (انظر ARITHMETIC EVALUATION above) يُنفذ عندما يُسند قيمة للمتغير.
- -l
- عند تعيين قيمة للمتغير، تُحول كافة المحارف الكبيرة إلى محارف صغيرة. تُعطل سمة المحارف الكبيرة.
- -n
- اعطِ كل اسم سمة nameref، مما يجعله مرجع اسم لمتغير آخر. يتم تحديد ذلك المتغير الآخر بواسطة قيمة الاسم. جميع المراجع والتخصيصات وتعديلات السمات على الاسم، باستثناء تلك التي تستخدم أو تغير سمة -n نفسها، تُنفذ على المتغير المشار إليه بواسطة قيمة الاسم. لا يمكن تطبيق سمة nameref على متغيرات المصفوفات.
- -r
- يجعل name للقراءة فقط. لا يمكن بعد ذلك تعيين قيم لهذه الأسماء بواسطة بيانات تعيين لاحقة أو إلغاء تعيينها.
- -t
- اعطِ كل اسم سمة trace. ترث الدوال المتتبعة مصائد DEBUG و RETURN من الصدفة المستدعية. ليس لسمة التتبع معنى خاص للمتغيرات.
- -u
- عند تعيين قيمة للمتغير، تُحول كافة المحارف الصغيرة إلى محارف كبيرة. تُعطل سمة المحارف الصغيرة.
- -x
- تعليم كل name للتصدير إلى الأوامر اللاحقة عبر البيئة.
استخدام “+” بدلاً من “-” يعطل السمة المحددة بدلًا من ذلك، مع استثناءات وهي أن +a و +A لا يمكن استخدامهما لتدمير متغيرات المصفوفة، و +r لن يزيل سمة القراءة فقط.
عند الاستخدام داخل وظيفة، يجعل declare و typeset كل name محليًا، كما هو الحال مع أمر local، ما لم يُقدم خيار -g. إذا تبع اسم المتغير =value، فتُضبط قيمة المتغير على value. عند استخدام -a أو -A وصيغة التعيين المركبة لإنشاء متغيرات مصفوفة، لا تسري السمات الإضافية إلا في التعيينات اللاحقة.
القيمة المرجعة هي 0 ما لم يُواجه خيار غير صالح، أو حدثت محاولة لتعريف دالة باستخدام “-f foo=bar”, جرت محاولة لتعيين قيمة لمتغير للقراءة فقط، أو جرت محاولة لتعيين قيمة لمتغير مصفوفة دون استخدام صيغة التعيين المركبة (انظر Arrays above), أحد الأسماء ليس اسم متغير صدفة صالح، أو بُذلت محاولة لإيقاف حالة القراءة فقط لمتغير قراءة فقط، أو بُذلت محاولة لإيقاف حالة المصفوفة لمتغير مصفوفة، أو بُذلت محاولة لعرض دالة غير موجودة باستخدام -f.
- dirs [-clpv] [+n] [-n]
- بدون خيارات، اعرض قائمة المجلدات المتذكرة حاليًا. العرض المبدئي يكون في سطر واحد مع فصل أسماء المجلدات بمسافات. تُضاف المجلدات إلى القائمة باستخدام أمر pushd؛ ويزيل أمر popd المدخلات من القائمة. المجلد الحالي هو دائمًا المجلد الأول في المكدس.
- الخيارات، إذا زُودت، فلها المعاني التالية:
- -c
- يمسح مكدس الأدلة بحذف جميع المدخلات.
- -l
- ينتج قائمة باستخدام أسماء المسارات الكاملة؛ يستخدم تنسيق القائمة المبدئي علامة المدة (~) للإشارة إلى دليل المنزل.
- -p
- اطبع مكدس الأدلة مع مدخل واحد لكل سطر.
- -v
- اطبع مكدس الأدلة مع مدخل واحد لكل سطر، مسبوقاً بفهرسه في المكدس.
- +n
- يعرض المدخلة رقم n بالعد من يسار القائمة التي تظهر بواسطة dirs عند استدعائه بدون خيارات، بدءًا من الصفر.
- -n
- يعرض المدخلة رقم n بالعد من يمين القائمة التي تظهر بواسطة dirs عند استدعائه بدون خيارات، بدءًا من الصفر.
القيمة المرجعة هي 0 ما لم يُقدم خيار غير صالح أو كان n يشير إلى ما بعد نهاية مكدس الدلائل.
- disown [-ar] [-h] [id ...]
- بدون خيارات، أزل كل id من جدول الوظائف النشطة. قد يكون كل id توصيف وظيفة jobspec أو معرف عملية pid؛ إذا كان id هو pid، يستخدم disown الوظيفة التي تحتوي على pid كـ jobspec.
- إذا تم تزويد الخيار -h، لا يقوم disown بإزالة المهام المقابلة لكل معرف من جدول المهام، بل يميزها بحيث لا ترسل الصدفة إشارة SIGHUP إلى المهمة إذا استقبلت الصدفة إشارة SIGHUP.
- إذا لم يزود id، فإن خيار -a يعني إزالة أو وسم جميع المهام؛ وخيار -r بدون وسيطة id يزيل أو يسم المهام الجارية. إذا لم يزود id، ولم يزود أي من الخيارين -a أو -r، يزيل disown أو يسم المهمة الحالية.
- القيمة المرجعة هي 0 ما لم يكن id لا يحدد وظيفة صالحة.
- echo [-neE] [arg ...]
- أخرج args، مفصولة بمسافات، متبوعة بسطر جديد. حالة العودة هي 0 ما لم يحدث خطأ في الكتابة. إذا حُدد -n، فلا يُطبع السطر الجديد اللاحق.
- إذا تم إعطاء الخيار -e، يقوم echo بتفسير محارف الهروب التالية المسبوقة بشرطة مائلة خلفية. يعطل الخيار -E تفسير محارف الهروب هذه، حتى في الأنظمة التي يتم تفسيرها فيها افتراضيًا. يحدد خيار الصدفة xpg_echo ما إذا كان echo سيفسر أي خيارات ويوسع محارف الهروب هذه أم لا. لا يفسر echo العلامة -- على أنها تعني نهاية الخيارات.
- يفسر echo تسلسلات الهروب التالية:
- \a
- تنبيه (جرس)
- \b
- backspace
- \c
- اقمع المزيد من المخرجات
- \e
- \E
- محرف هروب
- \f
- تغذية الصفحة
- \n
- سطر جديد
- \r
- رجوع العربة
- \t
- جدولة أفقية
- \v
- علامة جدولة عمودية
- \\
- backslash
- \0nnn
- المحرف المكون من ثمانية بتات والذي قيمته هي القيمة الثمانية nnn (من صفر إلى ثلاثة أرقام ثمانية).
- \xHH
- المحرف المكون من ثمانية بتات والذي قيمته هي القيمة الست عشرية HH (رقم أو رقمان ست عشريان).
- \uHHHH
- محرف يونيكود (ISO/IEC 10646) الذي قيمته هي القيمة الست عشرية HHHH (من رقم واحد إلى أربعة أرقام ست عشرية).
- \UHHHHHHHH
- محرف يونيكود (ISO/IEC 10646) الذي قيمته هي القيمة الست عشرية HHHHHHHH (من رقم واحد إلى ثمانية أرقام ست عشرية).
يكتب echo أي محارف هروب غير معروفة دون تغيير.
- enable [-a] [-dnps] [-f filename] [name ...]
- تفعيل وتعطيل أوامر الصدفة المدمجة. يسمح تعطيل المدمج بتنفيذ ملف قابل للتنفيذ له نفس اسم مدمج الصدفة دون تحديد مسار كامل، على الرغم من أن الصدفة تبحث عادةً عن المدمجات قبل الملفات.
- إذا زودت الخيار -n، يُعطل كل name؛ وإلا تُمكن الـ names. على سبيل المثال، لاستخدام البرنامج الثنائي test الموجود عبر PATH بدلا من نسخة الصدفة المدمجة، نفذ “enable -n test”.
- إذا لم تزود وسيطات name، أو إذا زود الخيار -p، اطبع قائمة بأوامر الصدفة المدمجة. بدون وسيطات خيارات أخرى، تتكون القائمة من جميع أوامر الصدفة المدمجة الممكنة. إذا زود -n، اطبع فقط الأوامر المعطلة. إذا زود -a، تتضمن القائمة المطبوعة جميع الأوامر، مع إشارة إلى ما إذا كان كل منها ممكنا أم لا. خيار -s يعني قصر المخرجات على أوامر POSIX الخاصة المدمجة.
- يعني الخيار -f تحميل الأمر الداخلي الجديد اسم من الكائن المشترك filename، في الأنظمة التي تدعم التحميل الديناميكي. إذا كان filename لا يحتوي على شرطة مائلة، فستستخدم صدفة Bash قيمة المتغير BASH_LOADABLES_PATH كقائمة أدلة مفصولة بنقطتين للبحث فيها عن filename. القيمة المبدئية لـ BASH_LOADABLES_PATH تعتمد على النظام، وقد تتضمن “.” لإجبار البحث في الدليل الحالي. سيحذف الخيار -d وظيفة مدمجة محملة مسبقًا بـ -f. إذا استُخدم -s مع -f، ستصبح الوظيفة المدمجة الجديدة وظيفة مدمجة خاصة بـ POSIX
- إذا لم تورد خيارات وكان name ليس أمرا مدمجا في الصدفة، سيحاول enable تحميل name من كائن مشترك مسمى name، كما لو كان الأمر “enable -f name name”.
- القيمة المرجعة هي 0 ما لم يكن name ليس وظيفة صدفة مدمجة أو حدث خطأ أثناء تحميل وظيفة مدمجة جديدة من كائن مشترك.
- eval [arg ...]
- اربط المعطيات args معًا في أمر واحد، مع الفصل بينها بمسافات. ثم يقرأ صدفة وينفذ هذا الأمر، ويعيد حالة خروجه كحالة عودة eval. إذا لم تكن هناك معطيات، أو كانت المعطيات خالية فقط، تعيد eval القيمة 0.
- exec [-cl] [-a name] [command [arguments]]
- إذا حُدد command، فإنه يستبدل الصدفة دون إنشاء عملية جديدة. لا يمكن أن يكون command أمرا مدمجا أو دالة في الصدفة. تصبح الـ arguments هي وسيطات command. إذا زود الخيار -l، تضع الصدفة شرطة في بداية الوسيطة الصفرية الممرة لـ command. هذا ما يفعله login(1). يسبب الخيار -c تنفيذ command ببيئة فارغة. إذا زود -a، تمرر الصدفة name كوسيطة صفرية للأمر المنفذ.
- إذا تعذر تنفيذ command لسبب ما، تخرج الصدفة غير التفاعلية، ما لم يُمكن خيار الصدفة execfail. في هذه الحالة، تعيد حالة غير صفرية. تعيد الصدفة التفاعلية حالة غير صفرية إذا تعذر تنفيذ الملف. تخرج الصدفة الفرعية دون قيد أو شرط إذا فشل exec.
- إذا لم يُحدد command، تسري أي عمليات إعادة توجيه في الصدفة الحالية، وتكون حالة العودة 0. إذا حدث خطأ في إعادة التوجيه، تكون حالة العودة 1.
- exit [n]
- يؤدي إلى خروج الصدفة بحالة n. إذا حُذف n، فإن حالة الخروج هي حالة آخر أمر نُفذ. يتم تنفيذ أي مصيدة (trap) على EXIT قبل إنهاء الصدفة.
- export [-fn] [name[=value]] ...
- export -p [-f]
- تُعلّم names الممررة للتصدير الآلي إلى بيئة الأوامر المنفذة لاحقًا. إذا أُعطي الخيار -f، فإن names تشير إلى دوال.
- يزيل الخيار -n تصدير كل اسم، أو يزيل سمة التصدير عنه. إذا لم تُعطَ أي أسماء، أو إذا وُفر الخيار -p فقط، يعرض export قائمة بأسماء جميع المتغيرات المصدرة على المخرجات القياسية. استخدام -p و -f معًا يعرض الدوال المصدرة. يعرض الخيار -p المخرجات بصيغة يمكن إعادة استخدامها كمدخلات.
- يسمح export بتعيين قيمة المتغير عند تصديره أو إلغاء تصديره عن طريق إلحاق اسم المتغير بـ =value. هذا يضبط قيمة المتغير إلى value أثناء تعديل سمة التصدير. يعيد export حالة خروج 0 ما لم يُواجه خيار غير صالح، أو لم يكن أحد الـ names اسم متغير صدفة صالح، أو إذا استُخدم -f مع name لا يمثل دالة.
- false
- لا يفعل شيئاً؛ ويُرجع حالة غير صفرية.
- fc [-e ename] [-lnr] [first] [last]
- fc -s [pat=rep] [cmd]
- يختار النموذج الأول نطاقًا من الأوامر من first إلى last من قائمة السجل ويعرضها أو يحررها ويعيد تنفيذها. يمكن تحديد First و last كسلسلة (لتحديد موقع آخر أمر يبدأ بتلك السلسلة) أو كرقم (فهرس في قائمة السجل، حيث يُستخدم الرقم السالب كإزاحة من رقم الأمر الحالي).
- عند القائمة، فإن قيمة first أو last بـ 0 تعادل -1، وقيمة -0 تعادل الأمر الحالي (عادةً أمر fc)؛ عدا ذلك فإن 0 تعادل -1 و -0 غير صالحة. إذا لم تُحدد last، فإنها تُضبط على الأمر الحالي للقائمة (بحيث “fc -l -10” تطبع آخر 10 أوامر) وإلى first بخلاف ذلك. إذا لم يُحدد first، فيُضبط على الأمر السابق للتحرير وعلى -16 للقائمة.
- إذا تم تزويد الخيار -l، يتم سرد الأوامر على المخرجات القياسية. يعطل الخيار -n أرقام الأوامر عند السرد. ويقوم الخيار -r بعكس ترتيب الأوامر.
- وإلا، يستدعي fc المحرر المسمى بواسطة ename على ملف يحتوي تلك الأوامر. إذا لم يُوفر ename، يستخدم fc قيمة المتغير FCEDIT، وقيمة EDITOR إذا لم يُعين FCEDIT. وإذا لم يُعين كلا المتغيرين، يستخدم fc vi. عند اكتمال التحرير، يقرأ fc الملف المحتوي على الأوامر المحررة ويظهر صداها وينفذها.
- في النموذج الثاني، يقوم fc بإعادة تنفيذ command بعد استبدال كل مثيل لـ pat بـ rep. يتم تفسير Command بنفس الطريقة كما في first أعلاه.
- اسم مستعار مفيد لاستخدامه مع fc هو “r=fc”-s(dq" حتى تجعل الكتابة “r cc” يُشغِّل آخر أمر يبدأ بـ “cc” والكتابة “r” يعيد تنفيذ الأمر الأخير.
- إذا جرى استخدام الصيغة الأولى، تكون قيمة الإرجاع صفرًا ما لم يتم مواجهة خيار غير صالح أو كان first أو last يحددان أسطر تاريخ خارج النطاق. عند تحرير ملف أوامر وإعادة تنفيذه، تكون قيمة الإرجاع هي قيمة آخر أمر تم تنفيذه أو الفشل في حال حدوث خطأ في الملف المؤقت. إذا تم استخدام الصيغة الثانية، تكون حالة الرجوع هي حالة الأمر المعاد تنفيذه، ما لم يكن cmd لا يحدد إدخال تاريخ صالح، وفي هذه الحالة يرجع fc حالة غير صفرية.
- fg [jobspec]
- استئناف jobspec في الواجهة، وجعلها الوظيفة الحالية. إذا لم يوجد jobspec، يستخدم fg تصور الصدفة لـ الوكيل الحالي. قيمة الإرجاع هي قيمة الأمر الموضوع في الواجهة، أو الفشل إذا شُغل عند تعطيل التحكم في الوظائف، أو عند تشغيله مع تمكين التحكم في الوظائف إذا لم يحدد jobspec وظيفة صالحة أو حدد وظيفة بدأت بدون التحكم في الوظائف.
- getopts سلسلة_الخيارات الاسم [معطى ...]
- تستخدم البرمجيات النصية للصدفة ودوالها getopts لتحليل المعاملات الموضعية والحصول على الخيارات ووسائطها. تحتوي سلسلة_الخيارات على محارف الخيارات المراد التعرف عليها؛ وإذا تبع المحرف نقطتان رأسيتان، فمن المتوقع أن يكون للخيار وسيط، ويجب أن يُفصل بينهما بمسافة بيضاء. لا يجوز استخدام محرفي النقطتين وعلامة الاستفهام كمحارف خيارات.
- في كل مرة يُستدعى فيها getopts، يضع الخيار التالي في متغير الصدفة name، مع تهيئة name إذا لم يكن موجودًا، وفهرس الوسيط التالي الذي ستتم معالجته في المتغير OPTIND. تتم تهيئة OPTIND إلى 1 في كل مرة تُستدعى فيها الصدفة أو نص برمجي للصدفة. عندما يتطلب خيار ما وسيطًا، يضع getopts هذا الوسيط في المتغير OPTARG.
- لا تعيد الصدفة ضبط OPTIND آلياً؛ بل يجب إعادة ضبطه يدوياً بين المكالمات المتعددة لـ getopts داخل نفس استدعاء الصدفة لاستخدام مجموعة جديدة من المعاملات.
- عند الوصول إلى نهاية الخيارات، يخرج getopts بقيمة إعادة أكبر من الصفر. يُضبط OPTIND على فهرس أول وسيط ليس خيارًا، ويُضبط name على ?.
- يحلل getopts عادةً المعاملات الموضعية، ولكن إذا وُفرت معطيات إضافية كقيم معطى، يحلل getopts تلك المعطيات بدلًا منها.
- يستطيع getopts الإبلاغ عن الأخطاء بطريقتين. إذا كان المحرف الأول في سلسلة_الخيارات هو نقطتين رأسيتين، يستخدم getopts إبلاغًا صامتًا عن الأخطاء. وفي وضع التشغيل العادي، يطبع getopts رسائل تشخيصية عند مواجهة خيارات غير صالحة أو وسائط خيارات مفقودة. إذا ضُبط المتغير OPTERR على 0، فلن يعرض getopts أي رسائل خطأ، حتى لو لم يبدأ سلسلة_الخيارات بنقطتين.
- إذا اكتشف getopts خيارا غير صالح، فإنه يضع ? في name، وإذا لم يكن صامتا، يطبع رسالة خطأ ويزيل ضبط OPTARG. إذا كان getopts صامتا، فإنه يعين محرف الخيار الموجود لـ OPTARG ولا يطبع رسالة تشخيصية.
- إذا لم يُعثر على وسيطة مطلوبة، ولم يكن getopts صامتا، فإنه يضبط قيمة name إلى علامة استفهام (?)، ويزيل ضبط OPTARG، ويطبع رسالة تشخيصية. إذا كان getopts صامتا، فإنه يضبط قيمة name إلى نقطتين (:) ويضبط OPTARG إلى محرف الخيار الموجود.
- يعيد getopts قيمة صواب (true) إذا عُثر على خيار، سواء كان محددًا أو غير محدد. ويعيد خطأ (false) عند الوصول إلى نهاية الخيارات أو حدوث خطأ.
- hash [-lr] [-p اسم_الملف] [-dt] [الاسم]
- في كل مرة يُستدعى فيها hash، فإنه يتذكر مسار الملف الكامل للأمر name كما حُدد من خلال البحث في المجلدات الموجودة في $PATH. يُهمل أي مسار ملف جرى تذكره سابقًا ومرتبط بالاسم name. إذا تم تزويد الخيار -p، يستخدم hash اسم الملف filename كمسار كامل للأمر.
- يجعل الخيار -r الصدفة تنسى جميع المواقع المحفوظة. يؤدي التعيين إلى متغير PATH أيضًا إلى مسح جميع أسماء الملفات المخزنة بطريقة التجزئة (hashed). يجعل الخيار -d الصدفة تنسى الموقع المحفوظ لكل اسم.
- إذا تم تزويد الخيار -t، يطبع hash مسار الملف الكامل المقابل لكل اسم. إذا تم تزويد وسائط متعددة لـ الاسم مع -t، يطبع hash الاسم قبل مسار الملف المقطع الكامل المقابل. يعرض الخيار -l المخرجات بتنسيق يمكن إعادة استخدامه كمدخلات.
- إذا لم تُعطَ وسيطات، أو إذا زود -l فقط، يطبع hash معلومات حول الأوامر المتذكرة. الخيارات -t و -d و -p (الخيارات التي تعمل على وسيطات name) متنافية. واحد فقط سيكون نشطا. إذا زود أكثر من واحد، يكون لـ -t أولوية أعلى من -p، وكلاهما لهما أولوية أعلى من -d.
- حالة الإرجاع هي صفر ما لم يُعثر على name أو قُدم خيار غير صالح.
- help [-dms] [نمط]
- اعرض معلومات مفيدة حول الأوامر المضمنة. إذا حُدد نمط pattern، فسيعطي أمر help مساعدة مفصلة حول جميع الأوامر التي تطابق النمط كما هو موضح أدناه؛ خلاف ذلك، فإنه يعرض قائمة بجميع الأوامر المضمنة وأوامر الصدفة المركبة.
- الخيارات، إذا زُودت، فلها المعاني التالية:
- إذا احتوى pattern على محارف مطابقة الأنماط (انظر Pattern Matching أعلاه) فسيُعامل كنمط صدفة ويطبع help وصف كل موضوع مساعدة يطابق pattern.
- إذا لم يكن كذلك، وطابق pattern تماما اسم موضوع مساعدة، يطبع help الوصف المرتبط بذلك الموضوع. وإلا، يقوم help بمطابقة البادئة ويطبع أوصاف جميع مواضيع المساعدة المطابقة.
- حالة الإرجاع هي 0 ما لم يطابق أي أمر pattern.
- history [n]
- history -c
- history -d إزاحة
- history -d بداية-نهاية
- history -anrw [اسم_الملف]
- history -p معطى [معطى ...]
- history -s معطى [معطى ...]
- بدون خيارات، اعرض قائمة سجل الأوامر مع الأرقام. المدخلات المسبوقة بـ * هي التي عُدلت. وسيط n يسرد آخر n مدخلاً فقط. إذا كان متغير الصدفة HISTTIMEFORMAT مضبوطًا وليس فارغًا، فسيُستخدم كسلسلة تنسيق لـ strftime(3) لعرض الختم الزمني المرتبط بكل مدخل سجل معروض. إذا استخدم history HISTTIMEFORMAT، فإنه لا يطبع مسافة فاصلة بين الختم الزمني المنسق ومدخل السجل.
- إذا زود filename، يستخدمه history كاسم لملف التاريخ؛ وإلا يستخدم قيمة HISTFILE. إذا لم يزود filename وكان HISTFILE غير مضبوط أو فارغا، فلن يكون لخيارات -a, -n, -r, و -w أي تأثير.
- الخيارات، إذا زُودت، فلها المعاني التالية:
- -c
- امسح قائمة التأريخ بحذف جميع المدخلات. يمكن استخدام هذا مع الخيارات الأخرى لاستبدال قائمة التأريخ.
- -d الإزاحة
- احذف مدخلة التاريخ في الموضع offset. إذا كانت قيمة offset سالبة، فستُفسر بالنسبة إلى موضع يزيد بواحد عن آخر موضع في التاريخ، لذا فإن الفهارس السالبة تعُد تنازلياً من نهاية التاريخ، ويشير الفهرس -1 إلى أمر history -d الحالي.
- -d البداية-النهاية
- احذف نطاق مدخلات التاريخ بين الموضعين start و end، بما في ذلك الموضعين. تُفسر القيم الموجبة والسالبة لـ start و end كما هو موضح أعلاه.
- -a
- ألحق الـ “new” أسطر التاريخ إلى ملف التاريخ. هذه هي أسطر التاريخ المدخلة منذ بداية جلسة bash الحالية، ولكنها لم تُلحق بعد بملف التاريخ.
- -n
- قراءة أسطر التاريخ التي لم تُقرأ بعد من ملف التاريخ وإضافتها إلى قائمة التاريخ الحالية. هذه هي الأسطر الملحقة بملف التاريخ منذ بداية جلسة bash الحالية.
- -r
- قراءة ملف التاريخ وإلحاق محتوياته بقائمة التاريخ الحالية.
- -w
- اكتب قائمة السجل الحالية إلى ملف السجل، مع الكتابة فوق ملف السجل.
- -p
- أجرِ استبدالاً للتاريخ على args التالية واعرض النتيجة على المخرج القياسي، دون تخزين النتائج في قائمة التاريخ. يجب وضع كل arg بين علامات اقتباس لتعطيل توسيع التاريخ العادي.
- -s
- تخزين الوسائط args في قائمة السجل كـ إدخال واحد. يتم إزالة آخر أمر في قائمة السجل قبل إضافة args.
- إذا تم ضبط المتغير HISTTIMEFORMAT، يقوم history بكتابة معلومات الطابع الزمني المرتبطة بكل إدخال في سجل التاريخ إلى ملف التاريخ، مع تمييزها بمحرف تعليق التاريخ كما هو موضح أعلاه. عند قراءة ملف التاريخ، يتم تفسير الأسطر التي تبدأ بمحرف تعليق التاريخ ويتبعها رقم مباشرةً كطوابع زمنية لإدخال التاريخ التالي.
- القيمة المرجعة هي 0 ما لم يُواجه خيار غير صالح، أو حدث خطأ أثناء قراءة أو كتابة ملف التاريخ، أو قُدم offset أو نطاق غير صالح كوسيط لـ -d، أو فشل توسيع التاريخ المقدم كوسيط لـ -p.
- jobs [-lnprs] [ واصف_المهمة ... ]
- jobs -x الأمر [ الوسائط ... ]
- النموذج الأول يسرد الوظائف النشطة. الخيارات لها المعاني التالية:
- إذا زود jobspec، يقصر jobs المخرجات على معلومات تلك المهمة. حالة العودة هي 0 ما لم يُصادف خيار غير صالح أو يزود jobspec غير صالح.
- إذا تم تزويد الخيار -x، يستبدل jobs أي jobspec موجود في الأمر أو الوسائط بمعرف مجموعة العمليات المقابل، وينفذ الأمر ممررًا إليه الوسائط، مع إرجاع حالة الخروج الخاصة به.
- kill [-s sigspec | -n signum | -sigspec] id [ ... ]
- kill -l|-L [sigspec | exit_status]
- أرسل الإشارة المحددة بـ sigspec أو signum إلى العمليات المسماة بكل id. يمكن أن يكون كل id مواصفات وظيفة jobspec أو معرف عملية pid. sigspec هي إما اسم إشارة غير حساس لحالة الأحرف مثل SIGKILL (مع بادئة SIG أو بدونها) أو رقم إشارة؛ signum هو رقم إشارة. إذا لم تُوفر sigspec، فإن kill يرسل SIGTERM.
- يسرد الخيار -l أسماء الإشارات. إذا وُفرت أي معاملات عند إعطاء -l، يسرد kill أسماء الإشارات المقابلة لهذه المعاملات، وتكون حالة العودة 0. معامل exit_status لـ -l هو رقم يحدد إما رقم الإشارة أو حالة خروج العملية التي أنهتها إشارة؛ إذا وُفر، يطبع kill اسم الإشارة التي تسببت في إنهاء العملية. يفترض kill أن حالات خروج العمليات أكبر من 128؛ وأي شيء أقل من ذلك هو رقم إشارة. الخيار -L يكافئ -l.
- يعيد kill القيمة true إذا أُرسلت إشارة واحدة على الأقل بنجاح، أو false في حال حدوث خطأ أو العثور على خيار غير صالح.
- let arg [arg ...]
- يُقيم كل معطى كتعبير حسابي (راجع التقييم الحسابي above). إذا كان تقييم الوسيط الأخير هو 0، يرجع let القيمة 1؛ وبخلاف ذلك يرجع let 0.
- local [خيار] [الاسم[=القيمة] ... | - ]
- لكل وسيط، أنشئ متغيرًا محليًا باسم name واخصص له value. يمكن أن يكون option أيًا من الخيارات التي يقبلها declare. عند استخدام local داخل دالة، فإنه يجعل نطاق المتغير name المرئي مقصورًا على تلك الدالة وأبنائها. من الخطأ استخدام local خارج دالة.
- إذا كان name هو -، فإنه يجعل مجموعة خيارات الصدفة محلية للدالة التي استُدعي فيها local: أي خيارات صدفة تُغير باستخدام أمر set المدمج داخل الدالة بعد استدعاء local تُستعاد لقيمها الأصلية عند عودة الدالة. تتم الاستعادة كما لو نُفذت سلسلة أوامر set لاستعادة القيم التي كانت موجودة قبل الدالة.
- بدون معاملات، يكتب local قائمة بالمتغيرات المحلية إلى المخرجات القياسية.
- حالة الإرجاع هي 0 ما لم يُستخدم local خارج دالة، أو قُدم name غير صالح، أو كان name متغيراً للقراءة فقط.
- logout [n]
- اخرج من صدفة تسجيل الدخول، مع إرجاع الحالة n إلى والد الصدفة.
- mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
- readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [المصفوفة]
- قراءة الأسطر من المدخل القياسي، أو من واصف الملف fd إذا زُوّد الخيار -u، إلى متغير المصفوفة المفهرسة array. المتغير MAPFILE هو المصفوفة array المبدئية. الخيارات، إن وجدت، لها المعاني التالية:
- -d
- استخدم المحرف الأول من delim لإنهاء كل سطر مدخلات، بدلاً من سطر جديد. إذا كان delim سلسلة فارغة، فسينهي mapfile السطر عندما يقرأ محرف NUL.
- -n
- انسخ count من الأسطر كحد أقصى. إذا كان count هو 0، انسخ جميع الأسطر.
- -O
- ابدأ الإسناد إلى المصفوفة عند المؤشر origin. المؤشر المبدئي هو 0.
- -s
- اهمل أول count أسطر تم قراءتها.
- -t
- إزالة المحدد delim اللاحق (المبدئي هو سطر جديد) من كل سطر مقروء.
- -u
- قراءة الأسطر من واصف الملف fd بدلًا من المدخل القياسي.
- -C
- تقييم callback في كل مرة تُقرأ فيها quantum من الأسطر. يحدد الخيار -c مقدار quantum.
- -c
- تحديد عدد الأسطر المقروءة بين كل استدعاء لـ callback.
- إذا حُدد -C بدون -c، فإن الكم المبدئي هو 5000. عند تقييم callback، يزود بفهرس عنصر المصفوفة التالي المراد تعيينه والسطر المراد تعيينه لهذا العنصر كوسيطات إضافية. يتم تقييم callback بعد قراءة السطر ولكن قبل تعيين عنصر المصفوفة.
- إذا لم يزود بأصل صريح، سيقوم mapfile بمسح array قبل التعيين إليها.
- يعيد mapfile صفراً ما لم يُزوّد بخيار أو وسيط خيار غير صالح، أو إذا كانت المصفوفة غير صالحة أو لا يمكن التعيين إليها، أو إذا لم تكن المصفوفة مصفوفة مفهرسة.
- popd [-n] [+n] [-n]
- إزالة المداخل من مكدس الأدلة. العناصر مرقمة من 0 بدءًا من أول دليل مدرج بواسطة dirs، لذا فإن popd يكافئ “popd +0.” بدون وسائط، يزيل popd المجلد العلوي من المكدس، وينتقل إلى المجلد العلوي الجديد. الوسائط، إن وُجدت، لها المعاني التالية:
- -n
- منع التغيير العادي للدليل عند إزالة الأدلة من المكدس (stack)، فقط القيام بالتلاعب بالمكدس.
- +n
- إزالة المدخل رقم n بالعد من يسار القائمة المعروضة بواسطة dirs، بدءًا من الصفر، من المكدس. على سبيل المثال: “popd +0” يزيل الدليل الأول، “popd +1” الثاني.
- -n
- إزالة المدخل رقم n بالعد من يمين القائمة المعروضة بواسطة dirs، بدءًا من الصفر. على سبيل المثال: “popd -0” يزيل الدليل الأخير، “popd -1” قبل الأخير.
- إذا عُدّل العنصر العلوي في مكدس الأدلة، ولم يتم توفير الخيار -n، يستخدم الأمر popd الأمر الداخلي cd للانتقال إلى الدليل الموجود في أعلى المكدس. وإذا فشل cd، يعيد popd قيمة غير صفرية.
- وإلا، يعيد popd قيمة خطأ إذا قُدم خيار غير صالح، أو كان مكدس الأدلة فارغاً، أو حدد n مدخلاً غير موجود في مكدس الأدلة.
- إذا نجح أمر popd، يقوم bash بتشغيل dirs لعرض المحتويات النهائية لكومة المجلدات، وتكون حالة الرجوع 0.
- printf [-v المتغير] التنسيق [المعطيات]
- اكتب الوسائط arguments المنسقة إلى المخرجات القياسية تحت تحكم تنسيق format. يقوم الخيار -v بتعيين الخرج للمتغير var بدلاً من طباعته على المخرجات القياسية.
- الـ تنسيق هو سلسلة نصية تحتوي على ثلاثة أنواع من الكائنات: محارف عادية، تُنسخ ببساطة إلى المخرجات القياسية؛ وتسلسلات هروب محارف، تُحول وتُنسخ إلى المخرجات القياسية؛ ومواصفات تنسيق، كل منها يتسبب في طباعة الـ معامل التالي على التوالي. بالإضافة إلى محارف تنسيق printf(3) القياسية cCsSndiouxXeEfFgGaA، يفسر printf محددات التنسيق الإضافية التالية:
- %b
- يتسبب في قيام printf بتوسيع متواليات الهروب للشرطة المائلة العكسية في argument المقابل بنفس الطريقة التي يقوم بها echo -e.
- %q
- يتسبب في قيام printf بإخراج argument المقابل بتنسيق يمكن إعادة استخدامه كمدخل للصدفة. يستخدم %q و %Q نمط الاقتباس $'' إذا كانت أي أحرف في سلسلة المعامل تتطلب ذلك، واقتباس الشرطة المائلة العكسية خلاف ذلك. إذا كانت سلسلة التنسيق تستخدم النموذج البديل لـ printf، فإن هذين التنسيقين يقتبسان سلسلة المعامل باستخدام علامات اقتباس مفردة.
- %Q
- مثل %q، ولكن يطبق أي دقة معطاة على argument قبل وضعه بين علامتي اقتباس.
- %(datefmt)T
- يتسبب في قيام printf بإخراج سلسلة التاريخ والوقت الناتجة عن استخدام datefmt كسلسلة تنسيق لـ strftime(3). argument المقابل هو عدد صحيح يمثل عدد الثواني منذ بداية العصر (epoch). يتعرف محدد التنسيق هذا على قيمتين خاصتين للمعامل: -1 يمثل الوقت الحالي، و -2 يمثل الوقت الذي تم فيه استدعاء الصدفة. إذا لم يتم تحديد أي معامل، يتصرف التحويل كما لو تم توفير -1. هذا استثناء لسلوك printf المعتاد.
- تستخدم محددات التنسيق %b و %q و %T جميعًا وسائط عرض الحقل والدقة من مواصفات التنسيق وتكتب ذلك العدد من البايتات من (أو تستخدم حقلًا بهذا العرض لـ) الوسيط الموسع، والذي يحتوي عادةً على أحرف أكثر من الأصلي.
- يقبل محدد التنسيق %n وسيطًا مُناظرًا يُعامل كاسم متغير صدفة.
- يقبل محددا التنسيق %s و %c المعدل l (طويل)، مما يجبرهما على تحويل سلسلة الوسيط إلى سلسلة محارف عريضة وتطبيق أي عرض حقل ودقة مُعطاة بدلالة المحارف، لا البايتات. محددا التنسيق %S و %C يكافئان %ls و %lc على التوالي.
- تُعامل معطيات محددات التنسيق غير النصية كثوابت C، باستثناء أنه يُسمح بعلامة زائد أو ناقص بادئة، وإذا كان الحرف البادئ علامة اقتباس مفردة أو مزدوجة، تكون القيمة هي القيمة الرقمية للحرف التالي، باستخدام المنطقة الحالية.
- يُعاد استخدام الـ تنسيق حسب الضرورة لاستهلاك جميع الـ معاملات. إذا تطلب الـ تنسيق معاملات أكثر مما هو مقدم، فإن مواصفات التنسيق الإضافية تتصرف كما لو كانت هناك قيمة صفرية أو سلسلة نصية فارغة قد قُدمت، حسب الاقتضاء. قيمة العودة هي صفر عند النجاح، وغير صفرية إذا قُدم خيار غير صالح أو حدث خطأ في الكتابة أو التعيين.
- pushd [-n] [+n] [-n]
- pushd [-n] [المسار]
- أضف دليلًا إلى قمة مكدس الأدلة، أو دور المكدس، جاعلاً القمة الجديدة للمكدس هي دليل العمل الحالي. بدون معاملات، تبدل pushd العنصرين العلويين في مكدس الأدلة. المعاملات، إذا زُودت، لها المعاني التالية:
- -n
- منع التغيير العادي للدليل عند تدوير أو إضافة الأدلة إلى المكدس، فقط القيام بالتلاعب بالمكدس.
- +n
- تدوير المكدس بحيث يكون الدليل رقم n (بالعد من يسار القائمة المعروضة بواسطة dirs، بدءًا من الصفر) في الأعلى.
- -n
- تدوير المكدس بحيث يكون الدليل رقم n (بالعد من يمين القائمة المعروضة بواسطة dirs، بدءًا من الصفر) في الأعلى.
- dir
- أضف dir إلى مكدس الأدلة في القمة.
- بعد تعديل المكدس، إذا لم يُزود خيار -n، يستخدم pushd أمر cd المضمن للانتقال إلى الدليل الموجود في قمة المكدس. إذا فشل cd، يعيد pushd قيمة غير صفرية.
- وإلا، في حال عدم تقديم أي وسائط، يعيد pushd صفراً ما لم يكن مكدس الأدلة فارغاً. وعند تدوير مكدس الأدلة، يعيد pushd صفراً ما لم يكن مكدس الأدلة فارغاً أو يحدد n عنصراً غير موجود في مكدس الأدلة.
- إذا نجح أمر pushd، يقوم bash بتشغيل dirs لعرض المحتويات النهائية لكومة المجلدات.
- pwd [-LP]
- اطبع مسار الاسم المطلق لدليل العمل الحالي. لا يحتوي مسار الاسم المطبوع على روابط رمزية إذا قُدم الخيار -P أو مُكن الخيار -o physical للأمر المدمج set. إذا استُخدم الخيار -L، فقد يحتوي مسار الاسم المطبوع على روابط رمزية. حالة العودة هي 0 ما لم يحدث خطأ أثناء قراءة اسم الدليل الحالي أو قُدم خيار غير صالح.
- read [-Eers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [الاسم ...]
- قراءة سطر واحد من المدخل القياسي، أو من واصف الملف fd المزود كمعامل للخيار -u، وتقسيمه إلى كلمات كما هو موضح above تحت تقسيم الكلمات، وتعيين الكلمة الأولى إلى name الأول، والكلمة الثانية إلى name الثاني، وهكذا. إذا كان هناك كلمات أكثر من الأسماء، تُعين الكلمات المتبقية وفواصلها إلى name الأخير. إذا قُرئت كلمات من دفق المدخلات أقل من الأسماء، تُعين قيم فارغة للأسماء المتبقية. تُستخدم الحروف الموجودة في قيمة متغير IFS لتقسيم السطر إلى كلمات باستخدام القواعد نفسها التي تستخدمها الصدفة للتوسيع (الموصوفة above تحت تقسيم الكلمات). تزيل علامة الشرطة المائلة الخلفية (\) أي معنى خاص للحرف التالي المقروء وتُستخدم لمتابعة السطر.
- الخيارات، إذا زُودت، فلها المعاني التالية:
- -a اسم_ألفا
- تُسند الكلمات إلى فهارس متسلسلة لمتغير المصفوفة aname، بدءًا من 0. يُلغى تحديد aname قبل إسناد أي قيم جديدة. وتُتجاهل معاملات name الأخرى.
- -d المحدد
- ينهي الحرف الأول من delim سطر الإدخال، بدلاً من السطر الجديد. إذا كانت delim سلسلة فارغة، فسيقوم read بإنهاء السطر عند قراءة محرف NUL.
- -e
- إذا كان الدخل القياسي قادماً من طرفية، يستخدم الأمر read مكتبة readline (راجع READLINE above) للحصول على السطر. يستخدم Readline إعدادات التحرير الحالية (أو المبدئية، إذا لم يكن تحرير السطر نشطًا سابقًا)، ولكنه يستخدم إكمال أسماء الملفات المبدئي لـ readline.
- -E
- إذا كان الدخل القياسي قادماً من طرفية، يستخدم الأمر read مكتبة readline (راجع READLINE above) للحصول على السطر. يستخدم Readline إعدادات التحرير الحالية (أو المبدئية، إذا لم يكن تحرير السطر نشطًا سابقًا)، ولكنه يستخدم إكمال صدفة bash المبدئي، بما في ذلك الإكمال القابل للبرمجة.
- -i النص
- إذا كان readline مستخدما لقراءة السطر، يضع read الـ text في مخزن التحرير قبل بدء التحرير.
- -n عدد_المحارف
- يعود read بعد قراءة nchars حرفًا بدلًا من انتظار سطر إدخال كامل، ما لم يواجه نهاية الملف EOF أو تنتهي مهلة read، ولكنه يحترم المحدد إذا قرأ أقل من nchars حرفًا قبل المحدد.
- -N عدد_المحارف
- يعود read بعد قراءة بالضبط nchars حرفًا بدلًا من انتظار سطر إدخال كامل، ما لم يواجه نهاية الملف EOF أو تنتهي مهلة read. لا تُعامل أي أحرف محددة في الإدخال معاملة خاصة ولا تتسبب في عودة read حتى يقرأ nchars حرفًا. لا تُقسم النتيجة بناءً على الأحرف في IFS؛ القصد هو تعيين الأحرف المقروءة بالضبط للمتغير (باستثناء الشرطة المائلة العكسية؛ راجع الخيار -r أدناه).
- -p محث
- اعرض المطالبة prompt على الخطأ القياسي، بدون سطر جديد ختامي، قبل محاولة قراءة أي مدخلات، ولكن فقط إذا كانت المدخلات آتية من طرفية.
- -r
- لا تعمل الشرطة المائلة الخلفية كحرف هروب. تُعتبر الشرطة المائلة الخلفية جزءًا من السطر. وبوجه خاص، لا يجوز استخدام زوج (شرطة مائلة خلفية-سطر جديد) كتكملة للسطر.
- -s
- الوضع الصامت. إذا كان الإدخال قادمًا من طرفية، فلن يتم ترديد (echo) المحارف.
- -t مهلة_الانتظار
- يتسبب في انتهاء مهلة read وإرجاع فشل إذا لم يقرأ سطر إدخال كاملاً (أو عددًا محددًا من الأحرف) خلال ثوانٍ قدرها المهلة. قد تكون المهلة رقمًا عشريًا بجزء كسري يتبع النقطة العشرية. لا يكون هذا الخيار فعالاً إلا إذا كان read يقرأ الإدخال من طرفية، أو أنبوب، أو ملف خاص آخر؛ وليس له أي تأثير عند القراءة من ملفات عادية. إذا انتهت مهلة read، فإنه يحفظ أي إدخال جزئي قُرئ في المتغير المحدد name، وتكون حالة الخروج أكبر من 128. إذا كانت المهلة 0، فإن read يعود على الفور، دون محاولة قراءة أي بيانات. في هذه الحالة، تكون حالة الخروج 0 إذا كان الإدخال متاحًا على واصف الملف المحدد، أو سيعيد القراءة EOF، وغير ذلك فستكون غير صفرية.
- -u واصف_ملف
- قراءة المدخلات من واصف الملف fd بدلًا من المدخل القياسي.
- باستثناء الحالة التي تكون فيها delim سلسلة فارغة، يتجاهل الأمر read أي محارف NUL في المدخلات.
- إذا لم يزود names، يعين read السطر المقروء، بدون محدد النهاية ولكن دون تعديل بخلاف ذلك، للمتغير REPLY.
- حالة الخروج هي صفر، ما لم تتم مواجهة نهاية الملف، أو انتهاء مهلة read (وفي هذه الحالة تكون الحالة أكبر من 128)، أو حدوث خطأ في تعيين متغير (مثل التعيين لمتغير للقراءة فقط)، أو تقديم واصف ملف غير صالح كمعامل لـ -u.
- readonly [-aAf] [-p] [الاسم[=كلمة] ...]
- يتم وضع علامة "للقراءة فقط" على names المعطاة؛ ولا يجوز تغيير قيم هذه الأسماء عن طريق تعيين لاحق أو إلغاء تعيين. إذا تم توفير الخيار -f، فإن كل name يشير إلى وظيفة شل. يقيد الخيار -a المتغيرات بالمصفوفات المفهرسة؛ ويقيد الخيار -A المتغيرات بالمصفوفات الترابطية. إذا تم توفير كلا الخيارين، فإن -A له الأولوية. إذا لم يتم توفير أي معاملات name، أو إذا تم توفير الخيار -p، يتم طباعة قائمة بجميع الأسماء التي للقراءة فقط. يمكن استخدام الخيارات الأخرى لتقييد المخرج لمجموعة فرعية من مجموعة الأسماء التي للقراءة فقط. يعرض الخيار -p المخرج بتنسيق يمكن إعادة استخدامه كمدخل.
- يسمح readonly بضبط قيمة المتغير في نفس الوقت الذي يتم فيه تغيير سمة القراءة فقط عن طريق إتباع اسم المتغير بـ =القيمة. هذا يضبط قيمة المتغير إلى القيمة أثناء تعديل سمة القراءة فقط.
- حالة الإرجاع هي 0 ما لم يُواجه خيار غير صالح، أو كان أحد names ليس اسم متغير صدفة صالحاً، أو زُود -f بـ name ليس دالة.
- return [n]
- إيقاف تنفيذ دالة غلاف (shell function) أو ملف مصدر (sourced file) وإعادة القيمة المحددة بواسطة n إلى مستدعيها. إذا تم حذف n، تكون حالة الإرجاع هي حالة آخر أمر تم تنفيذه. إذا تم تنفيذ return بواسطة معالج فخ (trap handler)، فإن آخر أمر يُستخدم لتحديد الحالة هو آخر أمر نُفذ قبل معالج الفخ. إذا تم تنفيذ return أثناء فخ DEBUG، فإن آخر أمر يُستخدم لتحديد الحالة هو آخر أمر نفذه معالج الفخ قبل استدعاء return.
- عند استخدام return لإنهاء تنفيذ نص برمج يجري تنفيذه بواسطة أمر . (source)، فإنه يتسبب في توقف الصدفة عن تنفيذ هذا النص وإعادة إما n أو حالة الخروج لآخر أمر نُفذ داخل النص كحالة خروج للنص البرمج. إذا قُدمت n، فإن القيمة المعادة هي أقل 8 بتات أهمية منها.
- يُنفذ أي أمر مرتبط بمصيدة RETURN قبل استئناف التنفيذ بعد الدالة أو البرنامج النصي.
- حالة الإرجاع ليست صفراً إذا زُود return بوسيط غير عددي، أو استُخدم خارج دالة وليس أثناء تنفيذ سكريبت بواسطة . أو source.
- set [-abefhkmnptuvxBCEHPT] [-o اسم-الخيار] [--] [-] [معطى ...]
- set [+abefhkmnptuvxBCEHPT] [+o اسم-الخيار] [--] [-] [معطى ...]
- set -o
- set +o
- بدون خيارات، اعرض اسم وقيمة كل متغير صدفة بتنسيق يمكن إعادة استخدامه كمدخلات لضبط أو تصفير المتغيرات المضبوطة حاليًا. لا يمكن تصفير المتغيرات المخصصة للقراءة فقط. في نمط posix، تُسرد متغيرات الصدفة فقط. يُفرز الخرج وفقًا للمحلية الحالية. عند تحديد خيارات، فإنها تضبط أو تلغي ضبط سمات الصدفة. تُعامل أي وسائط متبقية بعد معالجة الخيارات كقيم للمعاملات الموضعية وتُعين، بالترتيب، لـ $1، $2، ...، $n. الخيارات، إذا حُددت، لها المعاني التالية:
- -a
- يتم إعطاء كل متغير أو دالة تُنشأ أو تُعدل سمة التصدير وتُحدد للتصدير إلى بيئة الأوامر اللاحقة.
- -b
- الإبلاغ عن حالة وظائف الخلفية المنتهية فورًا، بدلًا من الانتظار لما قبل المطالبة الرئيسة التالية أو بعد انتهاء أمر أمامي. هذا فعال فقط عند تمكين التحكم في الوظائف.
- -e
- اخرج فورًا إذا كان هناك pipeline (الذي قد يتكون من أمر بسيط واحد)، أو list، أو compound command (انظر SHELL GRAMMAR) above), يخرج بحالة غير صفرية. لا تخرج الـ صدفة إذا كان الأمر الذي فشل جزءًا من قائمة أوامر تلي مباشرة كلمة while أو until المحجوزة، أو جزءًا من الاختبار الذي يلي كلمات if أو elif المحجوزة، أو جزءًا من أي أمر نُفذ في قائمة && أو || باستثناء الأمر الذي يلي && أو || النهائية، أو أي أمر في خط أنابيب عدا الأخير (يخضع لحالة خيار الصدفة pipefail)، أو إذا كانت قيمة إرجاع الأمر معكوسة بـ !. إذا أرجع أمر مركب بخلاف الصدفة الفرعية حالة غير صفرية بسبب فشل أمر أثناء تجاهل -e، فلا تخرج الصدفة. يُنفذ صائد ERR، إذا ضُبط، قبل خروج الصدفة. ينطبق هذا الخيار على بيئة الصدفة وكل بيئة صدفة فرعية بشكل منفصل (انظر بيئة تنفيذ الأوامر above), وقد يتسبب في خروج الصدفات الفرعية قبل تنفيذ جميع الأوامر فيها.
- إذا نُفذ أمر مركب أو دالة صدفة في سياق يتم فيه تجاهل -e، فلن يتأثر أي من الأوامر المنفذة داخل الأمر المركب أو جسم الدالة بإعداد -e، حتى لو ضُبط -e وأعاد أمر ما حالة فشل. إذا ضبط أمر مركب أو دالة صدفة -e أثناء التنفيذ في سياق يتم فيه تجاهل -e، فلن يكون لهذا الإعداد أي تأثير حتى يكتمل الأمر المركب أو الأمر الذي يحتوي على استدعاء الدالة.
- -f
- عطّل توسيع اسم المسار.
- -h
- تذكر موقع الأوامر أثناء البحث عنها للتنفيذ. هذا مفعل مبدئيًا.
- -k
- يتم وضع جميع الوسائط التي تأتي على شكل عبارات تخصيص في بيئة الأمر، وليس فقط تلك التي تسبق اسم الأمر.
- -m
- وضع المراقبة. تم تمكين التحكم في الوظائف. هذا الخيار مفعل مبدئياً للأصداف التفاعلية على الأنظمة التي تدعمه (انظر JOB CONTROL above). تعمل جميع العمليات في مجموعة عمليات منفصلة. عندما تنتهي مهمة خلفية، يقوم الغلاف (shell) بطباعة سطر يحتوي على حالة الخروج الخاصة بها.
- -n
- قراءة الأوامر دون تنفيذها. قد يُستخدم هذا لفحص أخطاء الصيغة في سكربت صدفة. تتجاهل الصدف التفاعلية هذا.
- -o اسم-الخيار
- يمكن أن يكون اسم-الخيار واحدًا مما يلي:
- allexport
- نفس الخيار -a.
- braceexpand
- نفس -B.
- emacs
- استخدم واجهة تحرير سطر أوامر بأسلوب emacs. يُفعل هذا مبدئيًا عندما تكون الصدفة تفاعلية، ما لم تُبدأ الصدفة بخيار --noediting. يؤثر هذا أيضًا على واجهة التحرير المستخدمة لـ read -e.
- errexit
- نفس -e.
- errtrace
- نفس -E.
- functrace
- نفس -T.
- hashall
- مماثل لـ -h.
- histexpand
- نفس -H.
- history
- تفعيل تاريخ الأوامر، كما هو موضح above تحت HISTORY. هذا الخيار مفعّل مبدئيًا في الصدفات التفاعلية.
- ignoreeof
- التأثير كما لو كان أمر الشل “IGNOREEOF=10” قد نُفذ (انظر متغيرات الصدفة above).
- keyword
- مماثل لـ -k.
- monitor
- مماثل لـ -m.
- noclobber
- نفس -C.
- noexec
- مماثل لـ -n.
- noglob
- مماثل لـ -f.
- nolog
- يُتجاهل حاليًا.
- notify
- نفس -b.
- nounset
- مماثل لـ -u.
- onecmd
- نفس -t.
- physical
- نفس -P.
- pipefail
- إذا ضُبطت، فإن القيمة المعادة من أنبوب هي قيمة آخر أمر (الأكثر يميناً) يخرج بحالة غير صفرية، أو صفر إذا خرجت كل أوامر الأنبوب بنجاح. هذا الخيار مُعطّل مبدئياً.
- posix
- تفعيل وضع posix؛ يغير سلوك bash حيثما تختلف العملية الافتراضية عن معيار POSIX لمطابقة المعيار. انظر SEE ALSO below لمرجع إلى مستند يفصل كيف يؤثر وضع posix على سلوك bash.
- privileged
- نفس الخيار -p.
- verbose
- مماثل لـ -v.
- vi
- استخدم واجهة تحرير سطر أوامر بأسلوب vi. يؤثر هذا أيضًا على واجهة التحرير المستخدمة لـ read -e.
- xtrace
- نفس -x.
إذا زود -o بدون option-name، يطبع set إعدادات خيارات الصدفة الحالية. إذا زود +o بدون option-name، يطبع set سلسلة من أوامر set لإعادة إنشاء إعدادات الخيارات الحالية على المخرجات القياسية.
- -p
- فعل نمط الامتياز. في هذا النمط، لا تقرأ الصدفة ملفات $ENV و $BASH_ENV، ولا تُورث وظائف الصدفة من البيئة، وتُتجاهل متغيرات SHELLOPTS، و BASHOPTS، و CDPATH، و GLOBIGNORE إذا ظهرت في البيئة. إذا بُدئت الصدفة بمعرف مستخدم (أو مجموعة) فعلي لا يساوي معرف المستخدم (أو المجموعة) الحقيقي، ولم يُقدم الخيار -p، تُتخذ هذه الإجراءات ويُضبط معرف المستخدم الفعلي إلى معرف المستخدم الحقيقي. إذا قُدم الخيار -p عند البدء، لا يُعاد ضبط معرف المستخدم الفعلي. يؤدي إيقاف هذا الخيار إلى ضبط معرفات المستخدم والمجموعة الفعلية لتطابق المعرفات الحقيقية.
- -r
- تفعيل وضع الصدفة المقيدة. لا يمكن إلغاء ضبط هذا الخيار بمجرد ضبطه.
- -t
- اخرج بعد قراءة وتنفيذ أمر واحد.
- -u
- عامل المتغيرات والوسائط غير المضبوطة بخلاف الوسائط الخاصة “@” و “*”, أو متغيرات مصفوفة مفهرسة بـ “@” أو “*”, كخطأ عند إجراء توسيع المعاملات. إذا جرت محاولة توسيع لمتغير أو معامل غير مضبوط، تطبع الصدفة رسالة خطأ، وتخرج بحالة غير صفرية إذا لم تكن تفاعلية.
- -v
- اطبع أسطر مدخلات الصدفة فور قراءتها.
- -x
- بعد توسيع كل simple command، أو أمر for، أو أمر case، أو أمر select، أو أمر for الحسابي، اعرض القيمة الموسعة لـ PS4، متبوعة بالأمر ومعطياته الموسعة أو قائمة الكلمات المرتبطة به، إلى الخطأ القياسي.
- -B
- تقوم الصدفة بتوسيع الأقواس (انظر توسيع الأقواس above). هذا الخيار مفعل افتراضياً.
- -C
- إذا ضُبطت، فلن يكتب bash فوق ملف موجود باستخدام معاملات إعادة التوجيه > و >& و <>. استخدام معامل إعادة التوجيه >| بدلاً من > سيتجاوز هذا ويفرض إنشاء ملف مخرجات.
- -E
- إذا ضُبطت، فإن أي اعتراض (trap) على ERR ستورثه دوال الصدفة، وتبديلات الأوامر، والأوامر المنفذة في بيئة صدفة فرعية. عادةً لا يُورث اعتراض ERR في هذه الحالات.
- -H
- تفعيل استبدال التاريخ بأسلوب !. هذا الخيار مفعل افتراضيًا عندما تكون الصدفة تفاعلية.
- -P
- إذا ضُبطت، فلن تحلل الصدفة الروابط الرمزية عند تنفيذ أوامر مثل cd التي تغير دليل العمل الحالي. بل ستستخدم هيكل الأدلة الفيزيائي بدلاً من ذلك. مبدئياً، يتبع bash السلسلة المنطقية للأدلة عند تنفيذ الأوامر التي تغير الدليل الحالي.
- -T
- إذا ضُبطت، فإن أي اعتراضات على DEBUG و RETURN ستورثها دوال الصدفة، وتبديلات الأوامر، والأوامر المنفذة في بيئة صدفة فرعية. عادةً لا تُورث اعتراضات DEBUG و RETURN في هذه الحالات.
- --
- إذا لم تتبع أي وسيطات هذا الخيار، ازل ضبط المعاملات الموضعية. وإلا، اضبط المعاملات الموضعية على الـ args، حتى لو بدأ بعضها بـ -.
- -
- الإشارة إلى نهاية الخيارات، وتعيين جميع الوسائط arg المتبقية للمعاملات الموضعية. يتم إيقاف تشغيل الخيارين -x و -v. إذا لم تكن هناك وسائط arg، تظل المعاملات الموضعية دون تغيير.
تكون الخيارات معطلة مبدئياً ما لم يذكر خلاف ذلك. استخدام + بدلاً من - يؤدي إلى تعطيل هذه الخيارات. يمكن أيضاً تحديد الخيارات كوسائط لاستدعاء الصدفة. يمكن العثور على المجموعة الحالية من الخيارات في $-. حالة الإرجاع هي دائماً صفر ما لم يُواجه خيار غير صالح.
- shift [n]
- إعادة تسمية المعاملات الموضعية من n+1 ... إلى $1 .... المعاملات الممثلة بالأرقام من $# تنازليًا إلى $#-n+1 غير مضبوطة. يجب أن يكون n رقمًا غير سالب أقل من أو يساوي $#. إذا كان n هو 0، فلا تتغير أي معاملات. إذا لم يُعطَ n، فيُفترض أنه 1. إذا كان n أكبر من $#، فلا تتغير المعاملات الموضعية. حالة الإرجاع أكبر من الصفر إذا كان n أكبر من $# أو أقل من الصفر؛ وخلاف ذلك تكون 0.
- shopt [-pqsu] [-o] [اسم-الخيار ...]
- يبدل قيم الإعدادات التي تتحكم في سلوك الصدفة الاختياري. يمكن أن تكون الإعدادات إما تلك المدرجة أدناه، أو، في حال استخدام الخيار -o، تلك المتاحة مع الخيار -o لأمر set المدمج.
- بدون خيارات، أو مع خيار -p، اعرض قائمة بكافة الخيارات القابلة للضبط، مع توضيح ما إذا كان كل منها مضبوطًا أم لا؛ إذا قُدمت أي optnames، فيقتصر الخرج على تلك الخيارات. يعرض الخيار -p المخرجات بصيغة يمكن إعادة استخدامها كمدخلات.
- الخيارات الأخرى لها المعاني التالية:
- -s
- تفعيل (ضبط) كل optname.
- -u
- عطّل (ألغِ ضبط) كل optname.
- -q
- يمنع الإخراج العادي (الوضع الهادئ)؛ تشير حالة الإرجاع إلى ما إذا كان optname معيناً أم لا. إذا تم تقديم وسائط optname متعددة مع -q، تكون حالة الإرجاع صفراً إذا كانت جميع خيارات optnames ممكنة؛ وغير صفرية بخلاف ذلك.
- -o
- قصر قيم optname على تلك المعرفة للخيار -o للأمر المدمج set.
إذا استُخدم إما -s أو -u بدون وسيطات optname، يعرض shopt فقط الخيارات المضبوطة أو غير المضبوطة، على التوالي. ما لم يُذكر خلاف ذلك، تكون خيارات shopt معطلة (غير مضبوطة) مبدئيا.
حالة الإرجاع عند سرد الخيارات هي صفر إذا كانت جميع optnames مفعلة، وغير ذلك تكون غير صفرية. عند ضبط الخيارات أو إلغاء ضبطها، تكون حالة الإرجاع صفراً ما لم يكن optname ليس خيار صدفة صالحاً.
قائمة خيارات shopt هي:
- array_expand_once
- إذا ضُبطت، فستكبح الصدفة التقييم المتعدد لمنخفضات المصفوفات الترابطية والمفهرسة أثناء تقييم التعبيرات الحسابية، وأثناء تنفيذ الأوامر المدمجة التي يمكنها إجراء تعيينات للمتغيرات، وأثناء تنفيذ الأوامر المدمجة التي تجري فك إحالة للمصفوفات.
- assoc_expand_once
- مهجور؛ مرادف لـ array_expand_once.
- autocd
- إذا ضُبطت، فإن اسم الأمر الذي يمثل اسم دليل يُنفّذ كما لو كان معاملًا لأمر cd. هذا الخيار يُستخدم فقط بواسطة الصدف التفاعلية.
- bash_source_fullpath
- إذا ضُبطت، فستُحوّل أسماء الملفات المضافة إلى متغير المصفوفة BASH_SOURCE إلى أسماء مسارات كاملة (انظر Shell Variables أعلاه).
- cdable_vars
- إذا ضُبطت، فإن أي معامل للأمر المدمج cd ليس دليلاً يُفترض أنه اسم لمتغير قيمته هي الدليل المراد الانتقال إليه.
- cdspell
- إذا ضُبطت، فسيحاول أمر cd تصحيح الأخطاء الطفيفة في إملاء مكون الدليل. تشمل الأخطاء الطفيفة تبديل المحارف، أو محرف مفقود، أو محرف إضافي واحد. إذا صحح cd اسم الدليل، فسيطبع اسم الملف المصحح، ويستمر الأمر. هذا الخيار يُستخدم فقط بواسطة الصدف التفاعلية.
- checkhash
- إذا ضُبطت، فسيتحقق bash من وجود الأمر الموجود في جدول التلبيد قبل محاولة تنفيذه. إذا لم يعد الأمر الملبّد موجوداً، فسيجري bash بحثاً عادياً عن المسار.
- checkjobs
- إذا ضُبطت، فسيُدرج bash حالة أي مهام متوقفة أو مشغّلة قبل الخروج من صدفة تفاعلية. إذا كانت هناك أي مهام مشغّلة، فسيؤجل bash الخروج حتى تُحاول عملية خروج ثانية دون أمر وسيط (انظر JOB CONTROL above). تؤجل الصدفة دائماً الخروج إذا كانت هناك أي وظائف متوقفة.
- checkwinsize
- إذا ضُبطت، فسيتحقق bash من حجم النافذة بعد كل أمر خارجي (غير مدمج)، وإذا لزم الأمر، سيحدّث قيم LINES و COLUMNS، مستخدماً واصف الملف المرتبط بالخطأ القياسي إذا كان طرفية. هذا الخيار مُفعّل مبدئياً.
- cmdhist
- إذا ضُبطت، فسيحاول bash حفظ كل أسطر الأمر المتعدد الأسطر في نفس مدخلة التأريخ. مما يسمح بإعادة تحرير الأوامر المتعددة الأسطر بسهولة. هذا الخيار مُفعّل مبدئياً، لكن لا تأثير له إلا إذا فُعّل تأريخ الأوامر، كما هو موضح above تحت HISTORY.
- compat31
- compat32
- compat40
- compat41
- compat42
- compat43
- compat44
- تتحكم هذه في جوانب وضع توافق الصدفة (انظر SHELL COMPATIBILITY MODE below).
- complete_fullquote
- إذا ضُبطت، فسيقتبس bash كل المحارف الميتا (metacharacters) للصدفة في أسماء الملفات وأسماء الأدلة عند إجراء الإكمال. إذا لم تُضبط، فسيحذف bash المحارف الميتا مثل علامة الدولار من مجموعة المحارف التي ستُقتبس في أسماء الملفات المكتملة عندما تظهر هذه المحارف في مراجع متغيرات الصدفة في الكلمات المراد إكمالها. هذا يعني أن علامات الدولار في أسماء المتغيرات التي تتوسع إلى أدلة لن تُقتبس؛ ومع ذلك، لن تُقتبس أي علامات دولار تظهر في أسماء الملفات أيضاً. هذا فعال فقط عندما يستخدم bash الخطوط المائلة الخلفية لاقتباس أسماء الملفات المكتملة. هذا المتغير مضبوط مبدئياً، وهو سلوك bash المبدئي في الإصدارات حتى 4.2.
- direxpand
- إذا ضُبطت، فسيستبدل bash أسماء الأدلة بنتائج توسيع الكلمات عند إجراء إكمال اسم الملف. وهذا يغيّر محتويات مخزن التحرير المؤقت لـ readline. إذا لم تُضبط، فسيحاول bash الحفاظ على ما كتبه المستخدم.
- dirspell
- إذا ضُبطت، فسيحاول bash تصحيح إملاء أسماء الأدلة أثناء إكمال الكلمات إذا كان اسم الدليل المقدّم أولياً غير موجود.
- dotglob
- إذا ضُبطت، فسيضمّن bash أسماء الملفات التي تبدأ بـ “.” في نتائج تمديد مسار الملف. أسماء الملفات . و .. يجب دائماً مطابقته صراحة، حتى لو عُين dotglob.
- execfail
- إذا ضُبطت، فلن تخرج الصدفة غير التفاعلية إذا تعذر عليها تنفيذ الملف المحدد كعامل للأمر المدمج exec. الصدفة التفاعلية لا تخرج إذا فشل exec.
- expand_aliases
- إذا ضُبطت، فستُوسّع الأسماء المستعارة كما هو موضح above تحت ALIASES. هذا الخيار مفعّل مبدئيًا للصدمات التفاعلية.
- extdebug
- إذا ضُبطت عند استدعاء الصدفة، أو في ملف بدء تشغيل الصدفة، فرتّب لتنفيذ تشكيلة المنقّح قبل بدء الصدفة، وهو ما يطابق خيار --debugger. أما إذا ضُبطت بعد الاستدعاء، فيُفعّل السلوك المخصص لاستخدام المنقّحين:
- 1.
- يعرض الخيار -F للأمر الداخلي declare اسم ملف المصدر ورقم السطر المقابل لكل اسم دالة مُرر كمعامل.
- 2.
- إذا أرجع الأمر الذي تم تشغيله بواسطة فخ DEBUG قيمة غير صفرية، فسيتم تخطي الأمر التالي وعدم تنفيذه.
- 3.
- إذا أرجع الأمر الذي تم تشغيله بواسطة فخ DEBUG القيمة 2، وكانت الصدفة تنفذ داخل روتين فرعي (دالة صدفة أو نص صدفة يتم تنفيذه بواسطة المدمجات . أو source)، فإن الصدفة تحاكي استدعاء return.
- 4.
- يُحدّث BASH_ARGC و BASH_ARGV كما هو موضح في أوصافهما above).
- 5.
- تتبع الدوال مُمكّن: استبدال الأوامر، ودوال الصدفة، والصدفات الفرعية المستدعاة بـ ( الأمر ) ترث مصائد DEBUG و RETURN.
- 6.
- تتبع الأخطاء مفعل: استبدال الأوامر، ودوال الصدفة، والصدفات الفرعية المستدعاة باستخدام ( command ) ترث فخ ERR.
- extglob
- إذا ضُبطت، فستُفعّل ميزات مطابقة الأنماط الموسعة الموضحة above تحت توسيع مسار الملف.
- extquote
- إذا ضُبطت، فسيُجرى اقتباس $'string' و $"string" ضمن توسيعات ${parameter} المحاطة بعلامات اقتباس مزدوجة. هذا الخيار مُفعّل مبدئياً.
- failglob
- إذا ضُبطت، فإن الأنماط التي تفشل في مطابقة أسماء الملفات أثناء توسيع مسار الملف ستؤدي إلى خطأ في التوسيع.
- force_fignore
- إذا ضُبطت، فإن اللاحقات المحددة بواسطة متغير الصدفة FIGNORE ستؤدي إلى تجاهل الكلمات عند إجراء إكمال الكلمات حتى لو كانت الكلمات المتجاهلة هي الإكمالات الوحيدة الممكنة. انظر Shell Variables above للحصول على وصف لـ FIGNORE. هذا الخيار مفعّل بشكل مبدئي.
- globasciiranges
- إذا ضُبطت، فإن تعبيرات النطاق المستخدمة في تعبيرات الأقواس لمطابقة الأنماط (انظر Pattern Matching above) التصرف كما لو كان في محلية C التقليدية عند إجراء المقارنات. أي أن مطابقة الأنماط لا تأخذ في الاعتبار تسلسل الفرز في المحلية الحالية، لذا لن يتم فرز b بين A و B، وسيتم فرز أحرف ASCII الكبيرة والصغيرة معًا.
- globskipdots
- إذا ضُبطت، فلن يطابق توسيع مسار الملف أبداً أسماء الملفات . و .., حتى لو بدأ النمط بـ “.”. هذا الخيار مُمكّن مبدئيًا.
- globstar
- إذا ضُبطت، فإن النمط ** المستخدم في سياق توسيع مسار الملف سيطابق كل الملفات وصفرًا أو أكثر من الأدلة والأدلة الفرعية. إذا تبع النمط /، فستتطابق الأدلة والأدلة الفرعية فقط.
- gnu_errfmt
- إذا ضُبطت، فستُكتب رسائل خطأ الصدفة بتنسيق رسائل خطأ GNU القياسي.
- histappend
- إذا ضُبطت، فستُلحق قائمة التأريخ بالملف المسمى حسب قيمة متغير HISTFILE عند خروج الصدفة، بدلاً من الكتابة فوق الملف.
- histreedit
- إذا ضُبطت، وكان readline مستخدماً، فستُعطى للمستخدم فرصة لإعادة تحرير عملية تبديل تأريخ فاشلة.
- histverify
- إذا ضُبطت، وكان readline مستخدماً، فلن تُمرر نتائج تبديل التأريخ فوراً إلى محلل الصدفة. بدلاً من ذلك، يُحمّل السطر الناتج في مخزن تحرير readline، مما يسمح بإجراء مزيد من التعديلات.
- hostcomplete
- إذا ضُبطت، وكان readline مستخدماً، فسيحاول bash إجراء إكمال لاسم المضيف عندما تكون الكلمة التي تحتوي على @ قيد الإكمال (انظر Completing تحت READLINE above). هذا مفعل مبدئيًا.
- huponexit
- إذا ضُبطت، فسيُرسل bash إشارة SIGHUP إلى كل المهام عند الخروج من صدفة ولوج تفاعلية.
- inherit_errexit
- إذا ضُبطت، فسيورث تبديل الأوامر قيمة خيار errexit، بدلاً من إلغاء ضبطه في بيئة الصدفة الفرعية. هذا الخيار مُفعّل عند تفعيل وضع posix.
- interactive_comments
- في الصدفة التفاعلية، تؤدي الكلمة التي تبدأ بـ # إلى تجاهل تلك الكلمة وجميع المحارف المتبقية في ذلك السطر، كما هو الحال في الصدفة غير التفاعلية (راجع COMMENTS above). هذا الخيار مُمكّن مبدئيًا.
- lastpipe
- إذا ضُبطت، ولم يكن التحكم في المهام نشطاً، فستشغّل الصدفة آخر أمر في أنبوب لم يُنفّذ في الخلفية في بيئة الصدفة الحالية.
- lithist
- إذا ضُبطت، وفُعّل الخيار cmdhist، فستُحفظ الأوامر المتعددة الأسطر في التأريخ مع أسطر جديدة مضمنة بدلاً من استخدام فواصل الفاصلة المنقوطة كلما أمكن ذلك.
- localvar_inherit
- إذا ضُبطت، فستورث المتغيرات المحلية قيمة وسمات متغير بنفس الاسم موجود في نطاق سابق قبل تعيين أي قيمة جديدة. سمة nameref لا تُورث.
- localvar_unset
- إذا ضُبطت، فإن استدعاء unset على المتغيرات المحلية في نطاقات الدوال السابقة يسمها بحيث تجدها عمليات البحث اللاحقة غير مضبوطة حتى تعود تلك الدالة. وهذا يطابق سلوك إلغاء ضبط المتغيرات المحلية في نطاق الدالة الحالي.
- login_shell
- تضبط الصدفة هذا الخيار إذا بُدئت كصدفة تسجيل دخول (انظر الاستدعاء above). لا يجوز تغيير القيمة.
- mailwarn
- إذا ضُبطت، وكان الملف الذي يتحقق منه bash بحثاً عن بريد قد وُصل إليه منذ آخر مرة فُحص فيها، فسيظهر bash الرسالة “The mail in mailfile has been read”.
- no_empty_cmd_completion
- إذا ضُبطت، وكان readline مستخدماً، فلن يبحث bash في PATH عن إكمالات ممكنة عند محاولة الإكمال في سطر فارغ.
- nocaseglob
- إذا ضُبطت، فسيطابق bash أسماء الملفات بطريقة غير حساسة لحالة الأحرف عند إجراء توسيع مسار الملف (انظر Pathname Expansion above).
- nocasematch
- إذا ضُبطت، فسيُطابق bash الأنماط بطريقة غير حساسة لحالة الأحرف عند إجراء المطابقة أثناء تنفيذ أوامر case أو الأوامر الشرطية [[، أو عند إجراء توسيعات كلمات تبديل الأنماط، أو عند تصفية الإكمالات الممكنة كجزء من الإكمال المبرمج.
- noexpand_translation
- إذا ضُبطت، فسيحيط bash النتائج المترجمة لاقتباس $"..." بعلامات اقتباس مفردة بدلاً من المزدوجة. إذا لم تترجم السلسلة، فلن يكون لهذا أي تأثير.
- nullglob
- إذا ضُبطت، فإن أنماط توسيع مسار الملف التي لا تطابق أي ملفات (انظر Pathname Expansion above) تتوسع إلى لا شيء وتُزال، بدلاً من التوسع إلى نفسها.
- patsub_replacement
- إذا ضُبطت، فسيوسع bash حالات ظهور & في سلسلة الاستبدال لتبديل الأنماط إلى النص المطابق للنمط، كما هو موضح تحت Parameter Expansion above. هذا الخيار مُمكّن مبدئيًا.
- progcomp
- إذا ضُبطت، فستُفعّل تسهيلات الإكمال المبرمج (انظر Programmable Completion above). هذا الخيار مُمكّن مبدئيًا.
- progcomp_alias
- إذا ضُبطت، وفُعّل الإكمال المبرمج، فسيعامل bash اسم الأمر الذي ليس له أي إكمالات كاسم مستعار محتمل ويحاول توسيع الاسم المستعار. إذا كان له اسم مستعار، فسيحاول bash الإكمال المبرمج باستخدام كلمة الأمر الناتجة عن الاسم المستعار الموسع.
- promptvars
- إذا ضُبطت، فستخضع سلاسل الحث لتوسيع المعاملات، وتبديل الأوامر، والتوسيع الحسابي، وإزالة الاقتباس بعد توسيعها كما هو موضح في PROMPTING above. هذا الخيار مُمكّن مبدئيًا.
- restricted_shell
- تضبط الصدفة هذا الخيار إذا بُدئت في الوضع المقيد (انظر الصدفة المقيدة below). لا يجوز تغيير القيمة. لا يُعاد ضبط هذا عند تنفيذ ملفات بدء التشغيل، مما يسمح لملفات بدء التشغيل باكتشاف ما إذا كانت الصدفة مقيدة أم لا.
- shift_verbose
- إذا ضُبطت، فسيطبع الأمر المدمج shift رسالة خطأ عندما يتجاوز عدد الإزاحات عدد المعاملات الموضعية.
- مسار_المصدر
- إذا ضُبطت، فإن الأمر المدمج . (source) سيستخدم قيمة PATH للعثور على الدليل الذي يحتوي على الملف المقدم كعامل عندما لا يتوفر الخيار -p. هذا الخيار مُفعّل مبدئياً.
- varredir_close
- إذا ضُبطت، فستغلق الصدفة آلياً واصفات الملفات المعينة باستخدام صيغة إعادة التوجيه {varname} (انظر REDIRECTION above) بدلاً من تركها مفتوحة عند اكتمال الأمر.
- xpg_echo
- إذا ضُبطت، فسيوسع الأمر المدمج echo تتابعات الهروب ذات الخط المائل الخلفي مبدئياً. إذا فُعّل خيار صدفة posix أيضاً، فلن يفسر echo أي خيارات.
- suspend [-f]
- تعليق تنفيذ هذا الغلاف حتى يستلم إشارة SIGCONT. لا يمكن تعليق غلاف تسجيل الدخول، أو غلاف بدون تمكين التحكم في الوظائف؛ سيقوم الخيار -f بتجاوز ذلك وفرض التعليق. حالة الإرجاع هي 0 ما لم يكن الغلاف هو غلاف تسجيل دخول أو لم يتم تمكين التحكم في الوظائف ولم يتم توفير -f.
- test expr
- [ تعبير ]
- إرجاع حالة 0 (صواب) أو 1 (خطأ) بناءً على تقييم التعبير الشرطي expr. يجب أن يكون كل عامل ومعامل وسيطًا منفصلًا. تتكون التعبيرات من الأساسيات الموصوفة above تحت التعبيرات الشرطية. لا يقبل test أي خيارات، ولا يقبل ويتجاهل معامل -- كعلامة على نهاية الخيارات.
- يمكن دمج التعبيرات باستخدام العمليات التالية، والمدرجة بترتيب تنازلي حسب الأسبقية. يعتمد التقييم على عدد الوسائط؛ انظر أدناه. يستخدم test أسبقية العمليات عندما يكون هناك خمسة وسائط أو أكثر.
- ! expr
- صحيح إذا كان expr خاطئًا.
- ( expr )
- يعيد قيمة expr. قد يُستخدم هذا لتجاوز أسبقية العوامل العادية.
- expr1 -a expr2
- صحيح إذا كان كل من expr1 و expr2 صحيحين.
- expr1 -o expr2
- صحيح إذا كان أي من expr1 أو expr2 صحيحًا.
يُقيم test و [ التعبيرات الشرطية باستخدام مجموعة من القواعد المبنية على عدد المعطيات.
- 0 arguments
- التعبير خاطئ.
- معطى واحد
- يكون التعبير صحيحًا إذا وفقط إذا كان المعامل ليس فارغًا (not null).
- معطيان
- إذا كان الوسيط الأول !، يكون التعبير صحيحًا فقط إذا كان الوسيط الثاني فارغًا. إذا كان الوسيط الأول أحد العمليات الشرطية الأحادية المدرجة above تحت التعبيرات الشرطية، يكون التعبير صحيحًا إذا كان الاختبار الأحادي صحيحًا. إذا لم يكن المعامل الأول عاملًا شرطيًا أحاديًا صالحًا، يكون التعبير خاطئًا.
- 3 معطيات
- يتم تطبيق الشروط التالية بالترتيب المذكور. إذا كان المعامل الثاني هو أحد العوامل الشرطية الثنائية المدرجة above تحت التعبيرات الشرطية، تكون نتيجة التعبير هي نتيجة الاختبار الثنائي باستخدام المعاملين الأول والثالث. يُعتبر العاملان -a و -o عوامل ثنائية عندما يوجد ثلاثة معاملات. إذا كان المعامل الأول هو !، تكون القيمة نفيًا لاختبار المعاملين الثاني والثالث. إذا كان المعامل الأول هو ( تمامًا والمعامل الثالث هو ) تمامًا، تكون النتيجة هي اختبار المعامل الواحد للمعامل الثاني. خلاف ذلك، يكون التعبير خاطئًا.
- 4 معطيات
- يتم تطبيق الشروط التالية بالترتيب المذكور. إذا كان المعامل الأول هو !، فإن النتيجة هي نفي التعبير المكون من ثلاثة معاملات والمؤلف من المعاملات المتبقية. إذا كان المعامل الأول هو ( بالضبط والمعامل الرابع هو ) بالضبط، فإن النتيجة هي اختبار المعاملين للثاني والثالث. بخلاف ذلك، يتم تحليل التعبير وتقييمه وفقًا للأسبقية باستخدام القواعد المذكورة أعلاه.
- 5 معطيات أو أكثر
- يتم تحليل التعبير وتقييمه وفقًا للأسبقية باستخدام القواعد المذكورة أعلاه.
عندما تكون الصدفة في نمط posix، أو إذا كان التعبير جزءًا من أمر [[، فإن العوامل < و > تقوم بالفرز باستخدام المحلية الحالية. إذا لم تكن الصدفة في نمط posix، فإن الأوامر test و [ تفرز معجميًا باستخدام ترتيب ASCII.
يمكن أن يؤدي تحليل أسبقية العوامل التاريخي مع 4 معاملات أو أكثر إلى غموض عندما يواجه سلاسل تبدو كعناصر أساسية (primaries). لقد عفا الزمن على معيار POSIX للعناصر الأساسية -a و -o وإحاطة التعبيرات بين أقواس. يجب ألا تستخدمها السكربتات بعد الآن. من الموثوق به أكثر قصر استدعاءات الاختبار على عنصر أساسي واحد، واستبدال استخدامات -a و -o بعوامل القائمة && و || الخاصة بالشل.
- times
- اطبع أوقات المستخدم والنظام المتراكمة للصدفة وللعمليات التي يتم تشغيلها من الصدفة. حالة العودة هي 0.
- trap [-lpP] [[إجراء] sigspec ...]
- الـ إجراء هو أمر يُقرأ ويُنفذ عندما تتلقى الصدفة أيًا من الإشارات sigspec. إذا كان إجراء غائبًا (وكانت هناك إشارة sigspec واحدة) أو كان -، فستُعاد كل sigspec محددة إلى القيمة التي كانت عليها عند بدء الصدفة. إذا كان إجراء هو السلسلة النصية الفارغة (null string)، فستتجاهل الصدفة والأوامر التي تستدعيها الإشارة المحددة بكل sigspec.
- إذا لم تورد وسيطات، يعرض trap الإجراءات المرتبطة بكل إشارة مقتنصة كمجموعة من أوامر trap التي يمكن إعادة استخدامها كمدخلات للصدفة لاستعادة ترتيبات الإشارة الحالية. إذا أُعطي -p، ولم يتواجد action، يعرض trap الإجراءات المرتبطة بكل sigspec أو، إذا لم يزود أي منها، لكل الإشارات المقتنصة، كمجموعة أوامر trap يمكن إعادة استخدامها لاستعادة الحالة. يتصرف الخيار -P بشكل مشابه، لكنه يعرض فقط الإجراءات المرتبطة بكل وسيطة sigspec. يتطلب -P وسيطة sigspec واحدة على الأقل. يمكن استخدام الخيارات -P أو -p في بيئة صدفة فرعية، وطالما استُخدمت قبل استخدام trap لتغيير معالجة الإشارة، فستعرض حالة فخاخ الصدفة الأم.
- يطبع الخيار -l قائمة بأسماء الإشارات والأرقام المقابلة لها. كل sigspec إما اسم إشارة معرف في <signal.h>، أو رقم إشارة. أسماء الإشارات غير حساسة لحالة الأحرف والبادئة SIG اختيارية. إذا وُفر -l بدون معاملات sigspec، فإنه يطبع قائمة بأسماء الإشارات الصالحة.
- إذا كانت sigspec هي EXIT (0)، يُنفذ action عند الخروج من الصدفة. إذا كانت sigspec هي DEBUG، يُنفذ action قبل كل simple command، وأمر for، وأمر case، وأمر select، والأمر الحسابي ((، والأمر الشرطي [[، وأمر for الحسابي، وقبل تنفيذ أول أمر في دالة صدفة (انظر SHELL GRAMMAR) above). راجع وصف خيار الصدفة extdebug (انظر shopt) above) لتفاصيل تأثيره على صائد DEBUG. إذا كان sigspec هو RETURN، يُنفذ action في كل مرة تنتهي فيها وظيفة صدفة أو سكربت نُفذ باستخدام الأوامر المدمجة . أو source.
- إذا كانت sigspec هي ERR، يُنفذ action كلما أعاد أنبوب (قد يتكون من أمر بسيط واحد) أو قائمة أو أمر مركب حالة خروج غير صفرية، مع مراعاة الشروط التالية. لا يُنفذ فخ ERR إذا كان الأمر الفاشل جزءا من قائمة أوامر تلي مباشرة الكلمة المحجوزة while أو until، أو جزءا من اختبار في جملة if، أو جزءا من أمر نُفذ في قائمة && أو || باستثناء الأمر الذي يلي && أو || النهائية، أو أي أمر في أنبوب ما عدا الأخير (مع مراعاة حالة خيار الصدفة pipefail)، أو إذا كانت قيمة عودة الأمر معكوسة باستخدام !. هذه هي نفس الشروط التي يلتزم بها خيار errexit (-e).
- عندما لا تكون الصدفة تفاعلية، لا يمكن اعتراض الإشارات التي تم تجاهلها عند الدخول إلى الصدفة أو إعادة ضبطها. تسمح الصدفات التفاعلية باعتراض الإشارات المتجاهلة عند الدخول. تُعاد الإشارات المعترضة التي لا يتم تجاهلها إلى قيمها الأصلية في صدفة فرعية أو بيئة صدفة فرعية عند إنشائها. تكون حالة الإعادة خاطئة إذا كان أي sigspec غير صالح؛ عدا ذلك يعيد trap قيمة صحيحة.
- true
- لا يفعل شيئاً، ويُرجع حالة 0.
- type [-aftpP] name [name ...]
- توضيح كيف سيتم تفسير كل name إذا استخدم كاسم أمر.
- إذا تم استخدام الخيار -t، يطبع type سلسلة نصية تكون إحدى القيم: alias أو keyword أو function أو builtin أو file إذا كان الاسم هو اسم مستعار، أو كلمة محجوزة في الصدفة، أو دالة، أو مدمج، أو ملف قابل للتنفيذ، على التوالي. إذا لم يتم العثور على الاسم، فلا يطبع type شيئًا ويرجع حالة خروج غير صفرية.
- إذا تم استخدام الخيار -p، يرجع type إما مسار الملف القابل للتنفيذ الذي سيتم العثور عليه بالبحث في $PATH عن الاسم أو لا شيء إذا “type -t name” لن يعيد file. يجبر الخيار -P البحث في PATH عن كل name، حتى لو “type -t name” لن يعيد file. إذا كان name موجودًا في جدول الأوامر المقطعة، يطبع -p و -P القيمة المقطعة، والتي ليست بالضرورة الملف الذي يظهر أولًا في PATH.
- إذا تم استخدام الخيار -a، يطبع type جميع الأماكن التي تحتوي على أمر يسمى name. يتضمن ذلك الأسماء المستعارة، والكلمات المحجوزة، والدوال، والمدمجات، ولكن يمكن تزويد خيارات البحث في المسار (-p و -P) لقصر المخرجات على الملفات القابلة للتنفيذ. لا يراجع type جدول الأوامر المقطعة (hashed) عند استخدام -a مع -p، ويقوم فقط بالبحث في PATH عن name.
- يعطل الخيار -f البحث عن دوال الصدفة، تمامًا كما يفعل الأمر الداخلي command. يعيد type القيمة صواب (true) إذا عُثر على جميع المعاملات، وخطأ (false) إذا لم يُعثر على أي منها.
- ulimit [-HS] -a
- ulimit [-HS] [-bcdefiklmnpqrstuvxPRT [حد]]
- يوفر التحكم في الموارد المتاحة للصدفة وللعمليات التي تبدأها، على الأنظمة التي تسمح بهذا التحكم.
- يحدد الخياران -H و -S ما إذا كان سيُضبط الحد الصارم أو المرن للمورد المعطى. لا يمكن للمستخدم غير الجذر زيادة الحد الصارم بمجرد ضبطه؛ بينما يمكن زيادة الحد المرن حتى قيمة الحد الصارم. إذا لم يُحدد أي من -H أو -S، فيضبط ulimit كلا الحدين المرن والصارم.
- يمكن أن تكون قيمة limit رقمًا بالوحدة المحددة للمورد أو إحدى القيم الخاصة hard أو soft أو unlimited، والتي ترمز إلى الحد الصلب الحالي، والحد المرن الحالي، وعدم وجود حد، على التوالي. إذا حُذف limit، فسيطبع ulimit القيمة الحالية للحد المرن للمورد، ما لم يُعط الخيار -H. عند تحديد أكثر من مورد، يطبع اسم الحد ووحدته، إذا كان ذلك مناسبًا، قبل القيمة. تُفسر الخيارات الأخرى كما يلي:
- -a
- الإبلاغ عن جميع الحدود الحالية؛ لم تُضبط أي حدود.
- -b
- أقصى حجم للمخزن المؤقت للمقبس.
- -c
- أقصى حجم لملفات لُب النظام المنشأة.
- -d
- أقصى حجم لقطاع بيانات العملية.
- -e
- أقصى أولوية جدولة ( “nice”).
- -f
- أقصى حجم للملفات المكتوبة بواسطة الصدفة وأبنائها.
- -i
- أقصى عدد من الإشارات المعلقة.
- -k
- أقصى عدد من kqueues التي يمكن تخصيصها.
- -l
- أقصى حجم يمكن قفله في الذاكرة.
- -m
- أقصى حجم للمجموعة المقيمة (كثير من الأنظمة لا تلتزم بهذا الحد).
- -n
- أقصى عدد من واصفات الملفات المفتوحة (معظم الأنظمة لا تسمح بضبط هذه القيمة).
- -p
- حجم الأنبوب بكتل سعة 512 بايت (قد لا يُضبط هذا).
- -q
- أقصى عدد من البايتات في طوابير رسائل POSIX
- -r
- أقصى أولوية لجدولة الوقت الحقيقي.
- -s
- أقصى حجم للمكدس.
- -t
- أقصى قدر من وقت المعالج بالثواني.
- -u
- أقصى عدد من العمليات المتاحة لمستخدم واحد.
- -v
- أقصى قدر من الذاكرة الافتراضية المتاحة للصدفة، وفي بعض الأنظمة، لأبنائها.
- -x
- أقصى عدد من أقفال الملفات.
- -P
- أقصى عدد من الطرفيات الوهمية.
- -R
- أقصى وقت يمكن أن تعمل فيه عملية وقت حقيقي قبل الحجب، بالميكروثانية.
- -T
- أقصى عدد من الخيوط.
إذا زود limit، ولم يُستخدم الخيار -a، يكون limit هو القيمة الجديدة للمورد المحدد. إذا لم يزود أي خيار، يُفترض استخدام -f.
القيم هي بزيادات قدرها 1024 بايت، باستثناء -t بالثواني؛ و -R بالميكروثانية؛ و -p بوحدات كتل من 512 بايت؛ و -P و -T و -b و -k و -n و -u وهي قيم غير مقاسة؛ وعندما تكون في نمط posix، تكون -c و -f بزيادات قدرها 512 بايت. حالة الإرجاع هي 0 ما لم يُقدم خيار أو معطى غير صالح، أو يحدث خطأ أثناء ضبط حد جديد.
- umask [-p] [-S] [وضع]
- اضبط قناع إنشاء ملفات المستخدم على mode. إذا بدأ mode برقم، يُفسر كعدد ثماني؛ وإلا يُفسر كقناع نمط رمزي مشابه لما يقبله chmod(1). إذا حُذف mode، يطبع umask القيمة الحالية للقناع. الخيار -S بدون معامل mode يطبع القناع بتنسيق رمزي؛ المخرجات المبدئية هي عدد ثماني. إذا قُدم الخيار -p وحُذف mode، تكون المخرجات في شكل يمكن إعادة استخدامه كمدخلات. حالة العودة هي صفر إذا غُير النمط بنجاح أو إذا لم يُقدم معامل mode، وغير ذلك تكون غير صفرية.
- unalias [-a] [اسم ...]
- إزالة كل name من قائمة الأسماء المستعارة المعرفة. إذا زُوّد -a، تُزال جميع تعريفات الأسماء المستعارة. قيمة الإرجاع هي صواب ما لم يكن name المزود ليس اسمًا مستعارًا معرفًا.
- unset [-fv] [-n] [اسم ...]
- لكل اسم، أزل المتغير أو الدالة المقابلة. إذا أُعطي الخيار -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 [-fn] [-p varname] [id ...]
- انتظر كل عملية ابنة محددة id وأعد حالة الإنهاء لآخر id. قد يكون كل id معرف عملية pid أو توصيف وظيفة jobspec؛ إذا قُدم توصيف وظيفة، فإن wait ينتظر كافة العمليات في تلك الوظيفة.
- إذا لم تورد خيارات أو ids، ينتظر wait جميع مهام الخلفية الجارية وآخر إحلال لعملية نُفذ، إذا كان معرف العملية الخاص به هو نفسه $!، وتكون حالة العودة صفرا.
- إذا تم تزويد الخيار -n، ينتظر wait اكتمال أي من المعرفات المعطاة، أو في حال عدم تزويد أي منها، ينتظر أي مهمة أو استبدال عملية، ويرجع حالة الخروج الخاصة بها. إذا لم يكن أي من المعرفات المزودة ابنًا للصدفة، أو إذا لم تُزود أي معرفات ولم يكن لدى الصدفة أبناء لم تنتظرهم بعد، تكون حالة الخروج 127.
- إذا تم تزويد الخيار -p، يقوم wait بتعيين معرف العملية أو المهمة التي تم إرجاع حالة الخروج الخاصة بها إلى المتغير varname المسمى بوسيط الخيار. سيتم إلغاء ضبط المتغير، الذي لا يمكن أن يكون للقراءة فقط، في البداية قبل أي تعيين. هذا مفيد فقط عند استخدامه مع الخيار -n.
- يؤدي تقديم الخيار -f، عند تمكين التحكم في الوظائف، إلى إجبار wait على انتظار انتهاء كل معرف id قبل إرجاع حالته، بدلاً من الإرجاع عندما تتغير حالته.
- إذا لم يحدد أي من الـ ids إحدى عمليات الصدفة التابعة النشطة، تكون حالة العودة 127. إذا قوطع wait بواسطة إشارة، فسيظل أي varname غير مضبوط، وستكون حالة العودة أكبر من 128، كما هو موضح تحت SIGNALS above. وإلا، تكون حالة العودة هي حالة الخروج لآخر id.
وضع توافق الصدفة¶
قدم 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 والإصدارات الأحدث.
- •
- وضع الطرف الأيمن لعامل مطابقة التعبيرات النمطية للأمر [[ (=~) بين علامات اقتباس ليس له تأثير خاص.
- •
- لا تراعي عوامل التشغيل < و > للأمر [[ المحلية الحالية عند مقارنة السلاسل النصية؛ فهي تستخدم ترتيب ASCII.
- •
- لا تراعي عوامل التشغيل < و > للأمر [[ المحلية الحالية عند مقارنة السلاسل النصية؛ فهي تستخدم ترتيب ASCII. تستخدم إصدارات Bash الأقدم من bash-4.1 ترتيب ASCII و strcmp(3)؛ بينما تستخدم bash-4.1 وما بعدها تسلسل ترتيب المحلية الحالية و strcoll(3).
- في وضع posix، قد يتبع time خيارات ومع ذلك يظل معروفاً ككلمة محجوزة (هذا هو تفسير POSIX رقم 267).
- في وضع posix، يتطلب المحلل وجود عدد زوجي من علامات الاقتباس المفردة في جزء word من توسيع المعامل المقتبس اقتباساً مزدوجاً، ويعاملها معاملة خاصة، بحيث تُعتبر المحارف الموجودة داخل علامات الاقتباس المفردة مقتبسة (هذا هو تفسير POSIX رقم 221).
- سلسلة الاستبدال في استبدال الأنماط المحاطة بعلامات اقتباس مزدوجة لا تخضع لإزالة علامات الاقتباس، كما يحدث في الإصدارات بعد bash-4.2.
- في وضع posix، تعتبر علامات الاقتباس المفردة خاصة عند توسيع جزء word من توسيع معامل مقتبس اقتباساً مزدوجاً، ويمكن استخدامها لاقتباس قوس إغلاق أو محرف خاص آخر (هذا جزء من تفسير POSIX رقم 221)؛ في الإصدارات اللاحقة، لا تكون علامات الاقتباس المفردة خاصة داخل توسعات الكلمات المقتبسة اقتباساً مزدوجاً.
- تُعتبر أخطاء توسيع الكلمات أخطاءً غير قاتلة تؤدي إلى فشل الأمر الحالي، حتى في نمط 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 قبل 5.1 تطبع رسالة إعلامية بهذا المعنى، حتى عند إنتاج مخرجات يمكن إعادة استخدامها كمدخلات. يقوم Bash-5.1 بكتم تلك الرسالة عند تزويد الخيار -l.
- يعامل الأمر الداخلي unset محاولات إلغاء تعيين أدلة المصفوفة @ و * بشكل مختلف اعتمادًا على ما إذا كانت المصفوفة مفهرسة أو ترابطية، وبشكل مختلف عما كان في الإصدارات السابقة.
- أوامر الحساب ( ((...)) ) والتعبيرات في جملة for الحسابية يمكن توسيعها أكثر من مرة.
- التعبيرات المستخدمة كوسائط للعمليات الحسابية في الأمر الشرطي [[ يمكن توسيعها أكثر من مرة.
- يمكن توسيع التعبيرات في توسيع الأقواس لمعاملات السلسلة الفرعية أكثر من مرة.
- يمكن توسيع التعبيرات في توسيع الكلمات $((...)) أكثر من مرة.
- التعبيرات الحسابية المستخدمة كفهارس للمصفوفات المفهرسة يمكن توسيعها أكثر من مرة.
- test -v، عند إعطائه معطى A[@]، حيث A مصفوفة ترابطية موجودة، سيعيد القيمة صحيح إذا كانت المصفوفة تحتوي على أي عناصر مضبوطة. سيبحث Bash-5.2 ويبلغ عن مفتاح باسم @.
- سيُعيد توسيع الكلمات ${parameter[:]=value} القيمة value، قبل إجراء أي تحويلات خاصة بالمتغير (على سبيل المثال، التحويل إلى أحرف صغيرة). أما Bash-5.2 فسيُعيد القيمة النهائية المُسندة للمتغير.
- سيتصرف تحليل استبدالات الأوامر كما لو كان تعميم الأنماط الممتد (انظر وصف shopt المدمج أعلاه) ممكناً، بحيث لا يفشل تحليل استبدال أمر يحتوي على نمط extglob (مثلاً، كجزء من دالة صدفة). يفترض هذا أن النية هي تمكين extglob قبل تنفيذ الأمر وإجراء توسيعات الكلمات. سيفشل عند وقت توسيع الكلمات إذا لم يكن extglob قد مُكن بحلول وقت تنفيذ الأمر.
- يستخدم الأمر الداخلي test خوارزميته التاريخية لتحليل التعبيرات الفرعية الموضوعة بين قوسين عند إعطائه خمسة معاملات أو أكثر.
- إذا تم تزويد الخيار -p أو -P للمدمج bind، فإن bind يعامل أي وسائط متبقية بعد معالجة الخيارات كأسماء أوامر قابلة للربط، ويعرض أي تتابعات مفاتيح مربوطة بتلك الأوامر، بدلاً من معاملة الوسائط كتتابعات مفاتيح للربط.
صدفة مقيدة¶
إذا بُدئ bash باسم rbash، أو زود الخيار -r عند الاستدعاء، تصبح الصدفة مقيدة. تُستخدم الصدفة المقيدة لإعداد بيئة أكثر تحكما من الصدفة القياسية. وهي تتصرف تماما مثل bash باستثناء أن الأمور التالية غير مسموح بها أو لا تُنفذ:
- تغيير الأدلة باستخدام cd.
- ضبط أو إلغاء ضبط قيم SHELL أو PATH أو HISTFILE أو ENV أو BASH_ENV.
- تحديد أسماء أوامر تحتوي على /.
- تحديد اسم ملف يحتوي على / كـ وسيط للأمر المدمج ..
- استخدام الخيار -p للأمر الداخلي . لتحديد مسار بحث.
- تحديد اسم ملف يحتوي على شرطة مائلة كـ وسيط للأمر المدمج history.
- تحديد اسم ملف يحتوي على شرطة مائلة (slash) كـ وسيط للخيار -p للأمر المدمج hash.
- استيراد تعاريف الدوال من بيئة الصدفة عند بدء التشغيل.
- تحليل قيم BASHOPTS و 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/9799919799/
- http://tiswww.case.edu/~chet/bash/POSIX — وصف لوضع posix
- sh(1)، ksh(1)، csh(1)
- emacs(1)، vi(1)
- readline(3)
الملفات¶
- /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 لتقديم بلاغ عن علة. وإذا كان لديك إصلاح، فنحن نشجعك على إرساله أيضاً! يمكنك إرسال الاقتراحات و “philosophical” بلاغات العلل إلى bug-bash@gnu.org أو نشرها في مجموعة أخبار Usenet المسماة gnu.bash.bug.
يجب أن تتضمن جميع بلاغات العلل ما يلي:
- رقم نسخة bash
- العتاد ونظام التشغيل
- المُصنف المستخدم للتصنيف
- وصف لسلوك العلة
- سكربت قصير أو
- “recipe” يُظهر العلة
يُدرج bashbug العناصر الثلاثة الأولى آلياً في النموذج الذي يوفره لتقديم بلاغ عن علة.
يجب توجيه التعليقات وبلاغات العلل المتعلقة بصفحة الدليل هذه إلى chet.ramey@case.edu.
العلل¶
إنها ضخمة للغاية وبطيئة للغاية.
توجد بعض الاختلافات الدقيقة بين bash والنسخ التقليدية من sh، ومعظمها بسبب مواصفات POSIX
الأسماء المستعارة مربكة في بعض الاستخدامات.
أوامر الصدفة المدمجة ودوالها غير قابلة للإيقاف أو إعادة التشغيل.
الأوامر المركبة وقوائم الأوامر التي تكون على شكل “a ; b ; c” لا تُعالج بسلاسة عند دمجها مع تعليق العمليات. فعند إيقاف عملية ما، تنفذ الصدفة فوراً الأمر التالي في القائمة أو تخرج من أي حلقات موجودة. يكفي إحاطة الأمر بين قوسين لإجباره على العمل في صدفة فرعية، والتي قد تُوقف كوحدة واحدة، أو بدء الأمر في الخلفية وإحضاره فوراً إلى الواجهة.
متغيرات المصفوفة لا يمكن (حتى الآن) تصديرها.
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 7 أبريل 2025 | GNU Bash 5.3 |