Sh - قيادة لينكس - قيادة يونيكس

اسم

باش - جنو بورن - شيل

موجز

باش [خيارات] [ملف]

وصف

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

يهدف Bash إلى أن يكون تطبيقًا متوافقًا مع مواصفات IEEE POSIX Shell و Tools (مجموعة عمل IEEE 1003.2).

خيارات

بالإضافة إلى خيارات shell أحادية الحرف الموثقة في وصف أمر setin المدمج ، تفسر bash الخيارات التالية عند استدعائها:

سلسلة ج

إذا كان الخيار -c موجودًا ، فستتم قراءة الأوامر من السلسلة . إذا كانت هناك وسيطات بعد السلسلة ، فسيتم تعيينها إلى المعلمات الموضعية ، بدءًا من $ 0 .

-أنا

إذا كان الخيار -i موجودًا ، فإن shell يكون تفاعليًا .

-l

اجعل باش يتصرف كما لو أنه تم استدعاؤه كصدفة تسجيل دخول (انظر INVOCATION أدناه).

-r

إذا كان الخيار -r موجودًا ، تصبح shell مقيدًا (انظر قاصر تحت).

-s

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

تتم طباعة قائمة بكافة السلاسل المزدوجة التي تم اقتباسها من قبل $ على ouput القياسي. هذه هي السلاسل التي تخضع لترجمة اللغة عندما تكون اللغة الحالية ليست C أو POSIX . هذا يعني الخيار -n ؛ سيتم تنفيذ أي أوامر.

[- +] O [ shopt_option ]

يُعد shopt_option أحد خيارات shell المقبولة بواسطة السوار المضمن (انظر: SHELL BUILTIN COMMANDS أدناه). إذا كان shopt_option موجودًا ، -O يحدد قيمة هذا الخيار ؛ + O يزعجها. إذا لم يتم توفير shopt_option ، فستتم طباعة أسماء وقيم خيارات shell المقبولة بالعرض على المخرج القياسي. إذا كان خيار الاستدعاء هو O + ، فسيتم عرض المخرجات بتنسيق يمكن إعادة استخدامه كمدخل.

أ- إشارات نهاية الخيارات وتعطيل معالجة الخيارات الإضافية. يتم التعامل مع أي وسيطات بعد - كأسماء ملفات ووسائط. حجة من - تعادل - .

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

--dump بو السلاسل

مكافئ إلى -D ، ولكن الإخراج في تنسيق ملف GNU gettext (كائن محمول).

سلاسل --dump

أي ما يعادل -D .

--مساعدة

عرض رسالة الاستخدام على المخرجات القياسية والخروج بنجاح.

- ملف ملف

- ملف ملف

تنفيذ الأوامر من الملف بدلاً من ملف التهيئة الشخصية القياسي ~ / .bashrc إذا كانت shell تفاعلية (راجع INVOCATION أدناه).

--تسجيل الدخول

أي ما يعادل -l .

--noediting

لا تستخدم مكتبة GNU للقراءة لقراءة أسطر الأوامر عندما تكون shell تفاعلية.

--لا الشخصية

لا تقرأ إما ملف بدء التشغيل على مستوى النظام / etc / profile أو أي من ملفات التهيئة الشخصية ~ / .bash_profile أو ~ / .bash_login أو ~ / .profile . بشكل افتراضي ، يقرأ bash هذه الملفات عند استدعائه كصدفة تسجيل دخول (انظر INVOCATION أدناه).

--norc

لا تقرأ أو تنفذ ملف التهيئة الشخصية ~ / .bashrc إذا كانت shell تفاعلية. يتم تشغيل هذا الخيار افتراضيًا إذا تم استدعاء shell كـ sh .

--posix

قم بتغيير سلوك bash حيث تختلف العملية الافتراضية عن معيار POSIX 1003.2 لتتطابق مع الوضع القياسي ( posix ).

--محدد

تصبح shell مقيدة (انظر القيد المحظور أدناه).

--rpm-يتطلب

إنتاج قائمة الملفات المطلوبة لتشغيل البرنامج النصي shell. هذا يعني "-n" ويخضع لنفس القيود التي يتم بها التحقق من خطأ الوقت في الترجمة. لا يتم تحليل باكتكس و [] الاختبارات و evals ، لذلك قد يتم تفويت بعض التبعيات. --verbose أي ما يعادل إلى -v .

--الإصدار

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

الحجج

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

استدعاء

shell تسجيل الدخول هو واحد الذي يكون الحرف الأول من وسيطة صفر هو - أو يبدأ واحد مع الخيار --login .

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

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

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

عند الخروج من shell لتسجيل الدخول ، يقوم bash بقراءة وتنفيذ الأوامر من الملف ~ / .bash_logout ، إذا كان موجودًا.

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

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

if [-n "$ BASH_ENV"]؛ ثم . "$ BASH_ENV". فاي

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

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

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

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

إذا تم بدء shell مع معرف المستخدم (المجموعة) الفعال لا يساوي معرف المستخدم الحقيقي (المجموعة) ، ولم يتم توفير الخيار -p ، لا يتم قراءة ملفات بدء التشغيل ، ولا يتم توارث وظائف shell من البيئة ، SHELLOPTS متغير ، إذا ظهر في البيئة ، يتم تجاهلها ، ويتم تعيين معرف المستخدم الفعال لمعرف المستخدم الحقيقي. إذا تم توفير الخيار -p عند الاستدعاء ، يكون سلوك بدء التشغيل هو نفسه ، ولكن لا يتم إعادة تعيين معرف المستخدم الفعال.

تعريفات

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

فراغ

مساحة أو علامة تبويب.

كلمة

تسلسل من الأحرف يعتبر بمثابة وحدة واحدة بواسطة shell. يُعرف أيضًا باسم الرمز المميز .

اسم

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

metacharacter

حرف ، عندما unecoted ، يفصل الكلمات. واحدة من التالية:

| () <> علامة تبويب الفضاء

مشغل التحكم

رمز مميز يقوم بوظيفة التحكم. إنه أحد الرموز التالية:

|| & &&؛ ؛؛ () | <السطر>

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

الكلمات المحجوزة هي كلمات لها معنى خاص للقشرة. يتم التعرف على الكلمات التالية كمحجوزة عند unquoted وكلمة الأولى من أمر بسيط (راجع SHELL GRAMMAR أدناه) أو الكلمة الثالثة من حالة أو الأمر:

! حالة القيام به Elif آخر esac fi لوظيفة إذا كان في اختيار ثم حتى حين {} الوقت [[]]

SHELL GRAMMAR

أوامر بسيطة

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

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

خطوط الأنابيب

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

[ time [ -p ]] [! الأمر ] [ command2 ...]

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

إذا كانت الكلمة محفوظة ! يسبق خط أنابيب ، حالة الخروج من خط الأنابيب هذا هي NOT المنطقية لحالة الخروج من الأمر الأخير. وإلا ، فإن حالة خط الأنابيب هي حالة الخروج من الأمر الأخير. تنتظر shell إنهاء كافة الأوامر الموجودة في خط الأنابيب قبل إرجاع القيمة.

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

يتم تنفيذ كل أمر في خط أنابيب كعملية منفصلة (أي ، في سلسلة فرعية).

قوائم

القائمة هي تسلسل لواحد أو أكثر من خطوط الأنابيب مفصولة بواسطة أحد المشغلين ؛ أو & & && أو || ، وينتهي اختياريًا بواحد من ؛ أو & ، أو .

من قائمة المشغلين ، && و || لها الأسبقية المتساوية ، يليها ؛ و ، التي لها أسبقية متساوية.

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

إذا تم إنهاء أمر بواسطة مشغل التحكم & ، فإن shell ينفذ الأمر في الخلفية في قائمة فرعية. لا تنتظر shell الأمر لإنهاء ، وحالة الإرجاع هي 0. أوامر مفصولة بواسطة ؛ يتم تنفيذها بالتسلسل ينتظر shell لكل أمر لإنهائه بدوره. حالة الإرجاع هي حالة الخروج من الأمر الأخير الذي تم تنفيذه.

مشغلي التحكم && و || تشير إلى AND قوائم و أو قوائم ، على التوالي. قائمة AND لها النموذج

command1 && command2

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

قائمة OR لديها النموذج

command1 || command2

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

أوامر مركبة

الأمر المركب هو واحد مما يلي:

( قائمة )

يتم تنفيذ قائمة في subshell. لا تبقى التعيينات المتغيرة وأوامر builtin التي تؤثر على بيئة shell سارية المفعول بعد اكتمال الأمر. حالة الإرجاع هي حالة الخروج من القائمة .

{ list ؛ }

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

(( التعبير ))

يتم تقييم التعبير وفقًا للقواعد الموضحة أدناه تحت التقييم ARITHMETIC . إذا كانت قيمة التعبير غير صفرية ، تكون حالة الإرجاع 0 ؛ وإلا فإن حالة الإرجاع هي 1. وهذا يعادل تمامًا السماح بـ " التعبير ".

[[ تعبير ]]

قم بإرجاع الحالة من 0 أو 1 بناءً على تقييم تعبير التعبير الشرطي. تتكون التعبيرات من الانتخابات التمهيدية الموضحة أدناه تحت التعبير الشرطي . لا يتم تنفيذ تقسيم الكلمة وتوسيع pathname على الكلمات بين [[ و ]] ؛ يتم تنفيذ التوسع تيلدا ، والمعلمة ، وتوسيع متغير ، والتوسع الحسابي ، واستبدال القيادة ، واستبدال العملية ، وإقتباس الاقتباس.

عند استخدام == و ! = عوامل التشغيل ، تعتبر السلسلة الموجودة على يمين المشغل نمطًا ومطابقة وفقًا للقواعد الموضحة أدناه ضمن مطابقة الأنماط . قيمة الإرجاع هي 0 إذا كانت السلسلة مطابقة أو لا تتطابق مع النمط ، على التوالي ، و 1 بطريقة أخرى. يمكن اقتباس أي جزء من النمط لإجباره على أن يقابله كسلسلة.

يمكن الجمع بين التعبيرات باستخدام عوامل التشغيل التالية ، المدرجة في ترتيب تنازلي للأسبقية:

( تعبير )

ترجع قيمة التعبير . يمكن استخدام هذا لتجاوز الأسبقية المعتادة للمشغلين.

! التعبير

صحيح إذا كان التعبير خاطئًا.

expression1 && expression2

صحيح إذا كان كل من expression1 و expression2 صحيحين.

expression1 || expression2 صحيح اذا كان expression1 أو expression2 صحيح.

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

للاسم [ في كلمة ] ؛ قائمة فعله

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

for (( expr1 ؛ expr2 ؛ expr3 ))؛ قائمة فعله

أولاً ، يتم تقييم التعبير الحسابي expr1 وفقًا للقواعد الموضحة أدناه تحت التقييم ARITHMETIC . ثم يتم تقييم التعبير الحسابي expr2 بشكل متكرر حتى يتم تقييمه إلى الصفر. في كل مرة يتم فيها تقييم expr2 إلى قيمة غير صفرية ، يتم تنفيذ القائمة ويتم تقييم التعبير الحسابي expr3 . إذا تم حذف أي تعبير ، فإنه يتصرف كما لو أنه يتم تقييمه إلى 1. قيمة الإرجاع هي حالة الخروج من الأمر الأخير في القائمة التي يتم تنفيذها ، أو false إذا كان أي من التعبيرات غير صالح.

اختر الاسم [ كلمة ] قائمة فعله

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

كلمة الحالة في [[(]) نمط [ | نمط ]

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

إذا كانت القائمة ثم قائمة [ قائمة elif ؛ ثم قائمة ] ... [ قائمة أخرى ؛ ] فاي

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

بينما القائمة قائمة فعله

حتى القائمة قائمة فعله

ينفذ الأمر while باستمرار قائمة المهام طالما أن الأمر الأخير في القائمة يعيد حالة الخروج من الصفر. يتطابق الأمر until مع الأمر while ، باستثناء أنه تم إلغاء الاختبار ؛ يتم تنفيذ قائمة do طالما أن الأمر الأخير في القائمة بإرجاع حالة خروج غير صفرية. حالة الخروج من حين وحتى الأوامر هي حالة الخروج لأمر الأمر الأخير الذي يتم تنفيذه ، أو صفر إذا لم يتم تنفيذ أي منهما.

اسم [ function ] () { list ؛ }

هذا يحدد وظيفة بالاسم . نص الدالة هو قائمة الأوامر بين {و}. يتم تنفيذ هذه القائمة عند تحديد الاسم كاسم أمر بسيط. حالة الخروج لدالة هي حالة الخروج من الأمر الأخير المنفذة في الجسم. (انظر الوظائف أدناه.)

تعليقات

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

نقلا عن

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

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

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

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

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

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

يحافظ إرفاق الأحرف في علامات الاقتباس المزدوجة على القيمة الحرفية لكل الأحرف داخل علامات الاقتباس ، باستثناء $ و ` و \ . الأحرف $ و ` تحتفظ بمعناها الخاص ضمن علامات اقتباس مزدوجة. تحتفظ الخط المائل العكسي بمعناها الخاص فقط عند تتبعه بأحد الأحرف التالية: $ أو " " أو "" أو "" أو " . قد يتم اقتباس علامة اقتباس مزدوجة ضمن علامات اقتباس مزدوجة بسبقها بخط مائل عكسي.

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

يتم التعامل مع كلمات النموذج $ " string " بشكل خاص. توسيع الكلمة إلى سلسلة مع استبدال أحرف backslash-escaped كما المحددة بواسطة القياسي ANSI C. يتم فك ترميز تسلسل الهروب Backslash ، إذا كان موجودًا ، كما يلي:

تنبيه (جرس)

مسافة للخلف

\ ه

شخصية هروب

\F

نموذج تغذية

\ ن

خط جديد

\ ص

إرجاع

\ ر

مساحة أفقية

\الخامس

علامة التبويب العمودية

\\

مائل

\ '

اقتباس واحد

\ nnn

الحرف ذو الثمانية بتات الذي قيمته قيمة nnn الثمانية (رقم واحد إلى ثلاثة أرقام)

س س س

حرف الثمانية بتات الذي قيمته هي القيمة السداسية عشرية HH (واحد أو رقمين سداسيين)

\ c x

حرف تحكم x

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

ستتسبب سلسلة مقتبسة مزدوجة مسبوقة بعلامة الدولار ( $ ) في ترجمة السلسلة وفقًا للإعدادات المحلية الحالية. إذا كانت اللغة الحالية هي C أو POSIX ، يتم تجاهل علامة الدولار. إذا تم ترجمة السلسلة واستبدالها ، يتم استبدال الاستبدال المزدوج.

المعلمات

المعلمة هي كيان يقوم بتخزين القيم. يمكن أن يكون اسمًا أو رقمًا أو أحد الأحرف الخاصة المدرجة أدناه تحت Parameters خاصة . لأغراض الصدف ، المتغير هو معلمة تدل على اسم . المتغير له قيمة وخصائص صفرية أو أكثر. يتم تعيين السمات باستخدام الأمر builtin declin (انظر التصريح أدناه في SHELL BUILTIN COMMANDS ).

يتم تعيين المعلمة إذا تم تعيين قيمة لها. سلسلة فارغة قيمة صالحة. بمجرد تعيين متغير ، قد يتم إلغاء تعيينه فقط باستخدام الأمر unin builtin (انظر SHELL BUILTIN COMMANDS أدناه).

قد يتم تعيين متغير إلى بيان من النموذج

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

إذا لم يتم إعطاء قيمة ، فسيتم تعيين المتغير للقيمة الخالية. تخضع جميع القيم لتوسيع التلدة ، والمعلمة والتوسع المتغير ، واستبدال الأمر ، والتوسع الحسابي ، وإزالة الاقتباس (انظر EXPANSION أدناه). إذا كان للمتغير مجموعة سوية صحيحة ، فإن القيمة تخضع للتوسعة الحسابية حتى إذا لم يتم استخدام التوسعة $ ((...)) (انظر التوسعة الحسابية أدناه). لم يتم تنفيذ تقسيم الكلمات ، باستثناء "$ @" كما هو موضح أدناه تحت Parameters خاصة . لا يتم تنفيذ امتداد Pathname. قد تظهر عبارات التعيين أيضًا كوسيطات لأوامر التصريح ، و typet ، و export ، و readonly ، و local builtin.

المعلمات Position

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

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

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

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

*

يمتد إلى المعلمات الموضعية ، بدءا من واحد. عندما يحدث التمدد ضمن علامات تنصيص مزدوجة ، فإنه يتمدد إلى كلمة واحدة مع قيمة كل معلمة مفصولة بحرف أول من المتغير الخاص IFS . أي ، " $ * " يكافئ " $ 1 c $ 2 c ... " ، حيث c هو الحرف الأول من قيمة متغير IFS . في حالة عدم تعيين IFS ، يتم فصل المعلمات بمسافات. إذا كان IFS خاليًا ، يتم ضم المعلمات بدون فواصل متداخلة.

@

يمتد إلى المعلمات الموضعية ، بدءا من واحد. عندما يحدث التوسع ضمن علامات تنصيص مزدوجة ، يتم توسيع كل معلمة إلى كلمة منفصلة. أي أن " $ @ " يساوي " $ 1 " " $ 2 " ... عندما لا توجد معلمات موضعية ، " $ @ " و $ @ توسيع إلى لا شيء (أي ، تتم إزالتها).

#

يتوسع إلى عدد المعلمات الموضعية بالأرقام العشرية.

؟

يمتد إلى حالة خط أنابيب المقدمة الذي تم تنفيذه مؤخرًا.

-

يتوسع إلى علامات الخيار الحالية على النحو المحدد عند الطلب ، من خلال أمر setin المدمج ، أو تلك التي تم وضعها بواسطة shell نفسه (مثل الخيار -i ).

$

يمتد إلى معرف العملية shell. في subshell () ، يتم توسيعه إلى معرف العملية shell الحالي ، وليس subshell.

!

يتوسع إلى معرف العملية لأحدث الخلفية التي تم تنفيذها (غير المتزامن).

0

يمتد إلى اسم البرنامج النصي shell أو shell. يتم تعيين هذا على تهيئة shell. إذا تم استدعاء bash باستخدام ملف أوامر ، يتم تعيين $ 0 إلى اسم ذلك الملف. إذا تم بدء bash باستخدام الخيار -c ، فسيتم تعيين $ 0 على الوسيطة الأولى بعد السلسلة التي سيتم تنفيذها ، إذا كان أحدها موجودًا. خلاف ذلك ، يتم تعيينه على اسم الملف المستخدم لاستدعاء bash ، كما يتم تقديمه بواسطة الوسيطة صفر.

_

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

متغيرات قذيفة

يتم تعيين المتغيرات التالية بواسطة shell:

سحق

يمتد إلى اسم الملف الكامل المستخدم لاستدعاء هذا المثيل من bash .

BASH_VERSINFO

متغير صفيف للقراءة فقط يحتفظ أعضاءه بمعلومات الإصدار الخاصة بهذا المثيل من bash . القيم التي تم تعيينها لأعضاء الصفيف هي كالتالي:

BASH_VERSINFO [ 0]

رقم الإصدار الرئيسي ( الإصدار ).

BASH_VERSINFO [ 1]

رقم الإصدار الثانوي ( الإصدار ).

BASH_VERSINFO [ 2]

مستوى التصحيح.

BASH_VERSINFO [ 3]

نسخة البناء.

BASH_VERSINFO [ 4]

حالة الإصدار (على سبيل المثال ، beta1 ).

BASH_VERSINFO [ 5]

قيمة MACHTYPE .

BASH_VERSION

يتوسع إلى سلسلة تصف إصدار مثيل باش هذا .

COMP_CWORD

COMP_LINE

سطر الأوامر الحالي. يتوفر هذا المتغير فقط في وظائف shell والأوامر الخارجية التي يتم استدعاؤها بواسطة تسهيلات الإكمال القابلة للبرمجة (انظر الإكمال للبرمجة أدناه).

COMP_POINT

COMP_WORDS

متغير صفيف (انظر المصفوفات أدناه) يتكون من الكلمات الفردية في سطر الأوامر الحالي. يتوفر هذا المتغير فقط في وظائف shell التي يتم استدعاؤها بواسطة تسهيلات الإكمال القابلة للبرمجة (انظر الإكمال للبرمجة أدناه).

DIRSTACK

متغير صفيف (راجع المصفوفات أدناه) يحتوي على المحتويات الحالية لمكدس الدليل. الدلائل تظهر في بنية تخزين العناصر بالترتيب عرضها بواسطة dirs مضمن. قد يتم استخدام تعيين أعضاء متغير الصفيف هذا لتعديل الدلائل الموجودة بالفعل في بنية تخزين العناصر ، ولكن يجب استخدام buildd و popd builtin لإضافة وإزالة الدلائل. لن يؤدي التعيين لهذا المتغير إلى تغيير الدليل الحالي. إذا لم يتم تعيين DIRSTACK ، فإنه يفقد خصائصه الخاصة ، حتى إذا تم إعادة تعيينه فيما بعد.

EUID

يتوسع لمعرف المستخدم الفعال للمستخدم الحالي ، تم تهيئته عند بدء تشغيل shell. هذا المتغير للقراءة فقط.

FUNCNAME

اسم أي وظيفة shell يتم تنفيذها حاليًا. هذا المتغير موجود فقط عند تنفيذ وظيفة shell. لا يكون للمهام إلى FUNCNAME أي تأثير وإرجاع حالة خطأ. إذا لم يتم تعيين FUNCNAME ، فسيخسر خصائصه الخاصة ، حتى إذا تم إعادة تعيينه لاحقًا.

فئات

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

HISTCMD

رقم السجل ، أو الفهرس في قائمة المحفوظات ، للأمر الحالي. إذا لم يتم تعيين HISTCMD ، فإنه يفقد خصائصه الخاصة ، حتى إذا تم إعادة تعيينه لاحقًا.

HOSTNAME

ضبط تلقائيا على اسم المضيف الحالي.

HOSTTYPE

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

LINENO

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

MACHTYPE

يتم التعيين تلقائيًا على سلسلة تصف بالكامل نوع النظام الذي يتم فيه تنفيذ bash ، بتنسيق GNU cpu-company-system القياسي. الافتراضي هو معتمد على النظام.

OLDPWD

دليل العمل السابق كما هو محدد بواسطة الأمر cd .

OPTARG

قيمة وسيطة الخيار الأخير التي تمت معالجتها بواسطة الأمر getopts builtin (انظر SHELL BUILTIN COMMANDS أدناه).

OPTIND

فهرس الوسيطة التالية المراد معالجتها بواسطة الأمر getopts builtin (انظر SHELL BUILTIN COMMANDS أدناه).

OSTYPE

يتم التعيين تلقائيًا على سلسلة تصف نظام التشغيل الذي يتم فيه تشغيل bash . الافتراضي هو معتمد على النظام.

PIPESTATUS

متغير صفيف (راجع المصفوفات أدناه) يحتوي على قائمة بقيم حالة الخروج من العمليات في خط أنابيب المقدمة التي تم تنفيذها مؤخرًا (والتي قد تحتوي على أمر واحد فقط).

PPID

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

PWD

دليل العمل الحالي كما هو محدد بواسطة الأمر cd .

RANDOM

في كل مرة تتم الإشارة إليها هذه المعلمة ، يتم إنشاء عدد صحيح عشوائي بين 0 و 32767. قد تتم تهيئة تسلسل الأرقام العشوائية عن طريق تعيين قيمة إلى RANDOM . إذا لم يتم تعيين RANDOM ، فسوف يفقد خصائصه الخاصة ، حتى إذا تمت إعادة تعيينه لاحقًا.

الرد

اضبط على سطر الإدخال الذي تمت قراءته بواسطة الأمر readin built عند عدم توفير أي وسيطات.

ثوان

في كل مرة يتم الرجوع إليها هذه المعلمة ، عدد الثواني منذ إرجاع استدعاء shell. إذا تم تعيين قيمة إلى SECONDS ، فإن القيمة التي يتم إرجاعها عند مراجع لاحقة هي عدد الثواني منذ تعيين زائد القيمة المعينة. إذا لم يتم تعيين SECONDS ، فإنه يفقد خصائصه الخاصة ، حتى إذا تم إعادة تعيينه لاحقًا.

SHELLOPTS

قائمة مفصولة بفواصل النقط من خيارات shell الممكنة. كل كلمة في القائمة هي وسيطة صالحة للخيار -o لأمر setin المدمج (انظر SHELL BUILTIN COMMANDS أدناه). الخيارات التي تظهر في SHELLOPTS هي تلك التي تم الإبلاغ عنها كما هي من خلال set -o . إذا كان هذا المتغير في البيئة عند بدء bash ، سيتم تمكين كل خيار shell في القائمة قبل قراءة أي ملفات بدء تشغيل. هذا المتغير للقراءة فقط.

SHLVL

تتم زيادتها بمقدار واحد في كل مرة يتم فيها تشغيل مثيل من bash .

UID

يتوسع إلى معرف المستخدم الخاص بالمستخدم الحالي ، الذي تمت تهيئته عند بدء تشغيل shell. هذا المتغير للقراءة فقط.

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

BASH_ENV

إذا تم تعيين هذه المعلمة عند قيام bash بتنفيذ برنامج نصي shell ، يتم تفسير قيمته على أنه اسم ملف يحتوي على أوامر لتهيئة shell ، كما هو الحال في ~ / .bashrc . تخضع قيمة BASH_ENV لتوسيع المعلمة ، واستبدال الأمر ، والتوسيع الحسابي قبل أن يتم تفسيرها على أنها اسم ملف. PATH غير مستخدم للبحث عن اسم الملف الناتج.

CDPATH

مسار البحث لأمر cd . هذه قائمة من الدلائل المفصولة بفواصل نقطية حيث يبحث الغلاف عن أدلة الوجهة المحددة بواسطة الأمر cd . قيمة العينة هي ".: ~: / usr".

الأعمدة

يُستخدم بواسطة الأمر built-built لتحديد عرض المطراف عند طباعة قوائم التحديد. ضبط تلقائيا عند استلام SIGWINCH.

COMPREPLY

متغير الصفيف الذي يقرأ منه باش الإكمالات الممكنة الناتجة عن وظيفة shell التي يستدعيها مرفق الإكمال القابل للبرمجة (انظر الإكمال للبرمجة أدناه).

FCEDIT

المحرر الافتراضي لأمر fc المدمج.

FIGNORE

قائمة لاحقة مفصولة بفواصل من اللواحق لتجاهلها عند إنجاز اسم الملف (راجع READLINE أدناه). يتم استبعاد اسم الملف الذي تتطابق لاحقته مع أحد الإدخالات في FIGNORE من قائمة أسماء الملفات المتطابقة. قيمة العينة هي ".o: ~".

GLOBIGNORE

قائمة أنماط مفصولة بفواصل منقوطة تحدد مجموعة أسماء الملفات ليتم تجاهلها بواسطة توسيع اسم المسار. إذا تطابق اسم الملف المطابق لنمط توسيع اسم المسار أيضًا مع أحد الأنماط الموجودة في GLOBIGNORE ، فستتم إزالته من قائمة التطابقات.

HISTCONTROL

إذا تم تعيينها على قيمة ignorespace ، فلن يتم إدخال الأسطر التي تبدأ بحرف مسافة في قائمة المحفوظات. في حالة التعيين على قيمة تجاهل ، لا يتم إدخال الخطوط المطابقة لخط التاريخ الأخير. قيمة ignoreboth يجمع بين الخيارين. إذا لم يتم التعيين ، أو تم تعيينه على أي قيمة أخرى غير تلك المذكورة أعلاه ، فسيتم حفظ جميع الأسطر التي يقرأها المحلل اللغوي في قائمة المحفوظات ، وفقًا لقيمة HISTIGNORE . تم استبدال وظيفة هذا المتغير بواسطة HISTIGNORE . لا يتم اختبار الأسطر الثانية واللاحقة لأمر مركب متعدد الأسطر ، ويتم إضافتها إلى السجل بغض النظر عن قيمة HISTCONTROL .

HISTFILE

اسم الملف الذي تم حفظ محفوظات الأوامر فيه (انظر التاريخ أدناه). القيمة الافتراضية هي ~ / .bash_history . في حالة عدم التعيين ، لا يتم حفظ محفوظات الأوامر عند إنهاء shell التفاعلي.

HISTFILESIZE

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

HISTIGNORE

قائمة أنماط مفصولة بفواصل منقوطة تستخدم لتحديد أسطر الأوامر التي يجب حفظها في قائمة المحفوظات. يتم تثبيت كل نمط في بداية السطر ويجب أن يتطابق مع السطر الكامل (لا يتم إلحاق أي حرف ضمني ` * ). يتم اختبار كل نمط مقابل الخط بعد تطبيق الشيكات المحددة بواسطة HISTCONTROL . بالإضافة إلى أحرف مطابقة نمط shell العادي ، يتطابق ` & 'مع سطر السجل السابق. ` و 'يمكن تجنبها باستخدام شرطة مائلة للخلف ؛ تتم إزالة الخط المائل العكسي قبل محاولة مطابقة. لا يتم اختبار الأسطر الثانية واللاحقة من الأمر المركب متعدد الأسطر ، وتتم إضافتها إلى المحفوظات بغض النظر عن قيمة HISTIGNORE .

HISTSIZE

عدد الأوامر التي يجب تذكرها في سجل الأوامر (انظر التاريخ أدناه). القيمة الافتراضية هي 500.

الصفحة الرئيسية

الدليل الرئيسي للمستخدم الحالي. الوسيطة الافتراضية لأمر cd builtin. يتم استخدام قيمة هذا المتغير أيضًا عند تنفيذ توسع التيلدة.

HOSTFILE

يحتوي على اسم ملف بنفس تنسيق / etc / hosts الذي يجب قراءته عندما تحتاج shell لإكمال اسم مضيف. قد يتم تغيير قائمة الإكمالات الممكنة لاسم المضيف أثناء تشغيل shell ؛ في المرة التالية التي تتم فيها محاولة استكمال اسم المضيف بعد تغيير القيمة ، يضيف bash محتويات الملف الجديد إلى القائمة الحالية. إذا تم تعيين HOSTFILE ، ولكن ليس له قيمة ، فحاول bash قراءة / etc / hosts للحصول على قائمة بإكمالات المضيف المحتملة. عندما يتم تعيين HOSTFILE ، يتم مسح قائمة اسم المضيف.

IFS

فاصل الحقل الداخلي المستخدم في تقسيم الكلمة بعد التوسيع وتقسيم السطور إلى كلمات باستخدام الأمر builtin read . القيمة الافتراضية هي `` ''.

IGNOREEOF

يتحكم في عمل الغلاف التفاعلي عند استلام حرف EOF كمدخل وحيد. في حالة التعيين ، تكون القيمة هي عدد حروف EOF المتتالية التي يجب أن يتم كتابتها كأحرف أولية على سطر المدخلات قبل خروج bash . إذا كان المتغير موجودًا ولكن ليس له قيمة رقمية ، أو ليس له قيمة ، تكون القيمة الافتراضية هي 10. إذا لم يكن موجودًا ، فإن EOF يشير إلى نهاية الإدخال إلى shell.

INPUTRC

اسم الملف لملف بدء التشغيل readline ، يتجاوز الافتراضي ~ / .inputrc (انظر READLINE أدناه).

LANG

تُستخدم لتحديد فئة الإعدادات المحلية لأي فئة غير محددة تحديدًا بمتغير يبدأ بالقيمة LC_ .

LC_ALL

يتجاوز هذا المتغير قيمة LANG وأي متغير LC_ آخر يحدد فئة لغة.

LC_COLLATE

يحدد هذا المتغير ترتيب الترتيب المستخدم عند فرز نتائج امتداد اسم المسار ، ويحدد سلوك تعبيرات النطاق ، وفئات التقابل ، وتسلسلات الترتيب داخل توسع اسم المسار ومطابقة النمط.

LC_CTYPE

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

LC_MESSAGES

يحدد هذا المتغير الإعدادات المحلية المستخدمة لترجمة السلاسل المزدوجة التي تم اقتباسها مسبوقة بـ $ .

LC_NUMERIC

يحدد هذا المتغير فئة اللغة المستخدمة لتنسيق الأرقام.

خطوط

يتم استخدامه بواسطة الأمر builtin select لتحديد طول العمود الخاص بقوائم اختيار الطباعة. ضبط تلقائيا عند استلام SIGWINCH.

بريد

إذا تم تعيين هذه المعلمة على اسم ملف ولم يتم تعيين متغير MAILPATH ، فإن bash يعلم المستخدم بوصول البريد في الملف المحدد.

MAILCHECK

لتحديد عدد مرات التحقق من البايت (بالثواني) للبريد. الافتراضي هو 60 ثانية. عندما يحين وقت التحقق من البريد ، يقوم shell بذلك قبل عرض المطالبة الأساسية. في حالة عدم تعيين هذا المتغير ، أو تعيينه على قيمة ليست أكبر من أو تساوي الصفر ، تقوم shell بتعطيل التحقق من البريد.

MAILPATH

قائمة بأسماء الملفات مفصولة بفواصل نقطية لفحصها للبريد. يمكن تحديد الرسالة التي سيتم طباعتها عند وصول البريد إلى ملف معين عن طريق فصل اسم الملف عن الرسالة التي تحتوي على `؟ '. عند استخدامها في نص الرسالة ، يتم توسيع $ _ إلى اسم ملف ترحيل البريد الحالي. مثال:

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

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

OPTERR

إذا تم تعيينها على القيمة 1 ، فستظهر رسالة bash رسائل الخطأ التي تم إنشاؤها بواسطة الأمر getopts builtin (انظر SHELL BUILTIN COMMANDS أدناه). تتم تهيئة OPTERR إلى 1 في كل مرة يتم فيها استدعاء shell أو تنفيذ برنامج نصي shell.

مسار

مسار البحث للأوامر. وهي قائمة من الدلائل المفصولة بفواصل نقطية والتي يبحث فيها shell عن الأوامر (انظر COMMAND EXECUTION أدناه). المسار الافتراضي يعتمد على النظام ، ويتم تعيينه بواسطة المسؤول الذي يقوم بتثبيت bash . القيمة المشتركة هي `/ usr / gnu / bin: / usr / local / bin: / usr / ucb: / bin: / usr / bin :. ''.

POSIXLY_CORRECT

إذا كان هذا المتغير موجودًا في البيئة عند بدء bash ، تدخل shell وضع posix قبل قراءة ملفات بدء التشغيل ، كما لو كان قد تم توفير الخيار - invposposition . إذا تم ضبطها أثناء تشغيل shell ، فإن bash يمكّن وضع posix ، كما لو تم تنفيذ الأمر set -o posix .

PROMPT_COMMAND

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

PS1

يتم توسيع قيمة هذه المعلمة (انظر PROMPTING أدناه) واستخدامها كسلسلة مطالبة أساسية. القيمة الافتراضية هي `` \ s- \ v \ $ ''.

PS2

يتم توسيع قيمة هذه المعلمة كما هو الحال مع PS1 واستخدامها كسلسلة مطالبة ثانوية. الافتراضي هو `` > ''.

PS3

يتم استخدام قيمة هذه المعلمة كموجه لأمر select (راجع SHELL GRAMMAR أعلاه).

PS4

يتم توسيع قيمة هذه المعلمة كما هو الحال مع PS1 ويتم طباعة القيمة قبل أن يتم عرض كل أمر bash أثناء تتبع التنفيذ. يتم تكرار الحرف الأول من PS4 عدة مرات ، حسب الضرورة ، للإشارة إلى مستويات متعددة من indirection. الافتراضي هو `` + ''.

تنسيق الوقت

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

٪٪

حرفية ٪ .

٪ [ p ] [l] R

الوقت المنقضي بالثواني.

٪ [ p ] [l] U

عدد ثواني CPU المستهلك في وضع المستخدم.

٪ [ ع ] [ل] S

عدد ثواني CPU التي يتم إنفاقها في وضع النظام.

٪ P

النسبة المئوية لوحدة المعالجة المركزية (CPU) ، المحسوبة كـ (٪ U +٪ S) /٪ R.

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

يحدد l اختياريًا تنسيقًا أطول ، بما في ذلك دقائق ، من النموذج MM m SS . FF s. تحدد قيمة p ما إذا كان الكسر موجودًا أم لا.

إذا لم يتم تعيين هذا المتغير ، يعمل bash كما لو كان يحتوي على القيمة $ \ \ real \ t٪ 3lR \ nuser \ t٪ 3lU \ nsys٪ 3lS ' . إذا كانت القيمة خالية ، فلن يتم عرض معلومات التوقيت. تتم إضافة سطر جديد لاحقًا عند عرض سلسلة التنسيق.

TMOUT

إذا تم تعيينها على قيمة أكبر من الصفر ، يتم التعامل مع TMOUT على أنه المهلة الافتراضية للقراءة المضمنة. ينهي الأمر select إذا لم يصل الإدخال بعد TmOUT ثانية عندما يكون الإدخال قادمًا من مطراف. في shell التفاعلية ، يتم تفسير القيمة على أنها عدد الثواني لانتظار الإدخال بعد إصدار المطالبة الأساسية. ينهي Bash بعد انتظار هذا العدد من الثواني إذا لم يصل الإدخال.

auto_resume

يتحكم هذا المتغير في كيفية تفاعل shell مع المستخدم والتحكم في الوظيفة. إذا تم تعيين هذا المتغير ، يتم التعامل مع أوامر بسيطة مفردة الكلمة دون إعادة توجيه كمرشح لاستئناف وظيفة التوقف الموجودة. لا يوجد أي غموض مسموح به. إذا كان هناك أكثر من مهمة تبدأ بالمجموعة التي تم كتابتها ، فسيتم تحديد الوظيفة التي تم الوصول إليها مؤخرًا. اسم المهمة المتوقفة ، في هذا السياق ، هو سطر الأوامر المستخدم لبدء تشغيله. إذا تم ضبط القيمة على القيمة بالضبط ، فيجب أن تتطابق السلسلة التي تم توفيرها مع اسم الوظيفة المتوقفة تمامًا ؛ إذا كان مضبوطًا على سلسلة فرعية ، فيجب أن تتطابق السلسلة الموردة مع سلسلة فرعية من اسم الوظيفة المتوقفة. توفر قيمة سلسلة فرعية وظيفة مشابهة لـ ٪؟ معرف الوظيفة (انظر JOB CONTROL أدناه). إذا تم التعيين على أي قيمة أخرى ، فيجب أن تكون السلسلة المقدمة عبارة عن بادئة لاسم الوظيفة المتوقفة ؛ هذا يوفر وظائف مشابهة لـ ٪ job identifier.

histchars

الأحرف الثلاثة أو الثلاثة التي تتحكم في توسع التاريخ والارتقاء به (انظر تاريخ التوسعة أدناه). الحرف الأول هو حرف توسيع التاريخ ، الحرف الذي يشير إلى بداية تمدد التاريخ ، عادة ` ! ". الحرف الثاني هو حرف الاستبدال السريع ، والذي يستخدم كاختصار لإعادة تشغيل الأمر السابق الذي تم إدخاله ، مع استبدال سلسلة واحدة بأخرى في الأمر. الافتراضي هو ` ^ . الحرف الثالث الاختياري هو الحرف الذي يشير إلى أن ما تبقى من الخط هو تعليق عندما يتم العثور عليه على أنه الحرف الأول لكلمة ، عادةً ` # '. يؤدي حرف تعليق السجل إلى تخطي استبدال التاريخ للكلمات المتبقية على السطر. لا يتسبب بالضرورة في أن يقوم محلل shell بمعالجة بقية السطر كتعليق.

المصفوفات

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

يتم إنشاء مصفوفة تلقائيًا إذا تم تعيين أي متغير لاستخدام اسم بناء الجملة [ subscript ] = value . يتم التعامل مع الكسر على أنه تعبير حسابي يجب تقييمه إلى رقم أكبر من أو يساوي الصفر. لتوضيح صفيف بشكل صريح ، استخدم اسم -a- (راجع SHELL BUILTIN COMMANDS أدناه). يُقبل أيضًا الإعلان باسم [ subscript ] ؛ يتم تجاهل التسجيل. قد يتم تحديد السمات لمتغير الصفيف باستخدام التصريح والمقروءة readonly . تنطبق كل سمة على جميع أعضاء الصفيف.

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

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

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

توسيع

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

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

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

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

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

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

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

يتم استخدام هذه البنية عادة كاختزال عندما تكون البادئة الشائعة للسلاسل المراد إنشاؤها أطول من المثال أعلاه:

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

أو

chown root /usr/{ucb/{ex،edit}،lib/{ex؟.؟*،how_ex}}

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

توسيع تيلدا

إذا كانت الكلمة تبدأ بحرف التلدة غير المقروءة (' ~ ') ، فإن جميع الأحرف التي تسبق أول شرطة غير مقيدة (أو كل الحروف ، إذا لم يكن هناك شرطة غير مدروسة) تعتبر بادئة تيلدا . إذا لم يتم اقتباس أي من الأحرف الموجودة في البادئة tilde-prefix ، يتم التعامل مع الأحرف في البادئة tilde-prefix بعد التلدة على أنها اسم تسجيل دخول محتمل. إذا كان اسم تسجيل الدخول هذا هو سلسلة فارغة ، يتم استبدال التلدة بقيمة معلمة shell HOME . إذا لم يتم تعيين HOME ، فسيتم استبدال الدليل الرئيسي للمستخدم الذي ينفذ shell. وبخلاف ذلك ، يتم استبدال البادئة tilde-prefix بالدليل الرئيسي المرتبط باسم تسجيل الدخول المحدد.

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

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

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

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

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

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

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

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

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

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

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

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

يتوسع إلى أسماء المتغيرات التي تبدأ أسماؤها بالبادئة ، مفصولة بحرف أول من المتغير الخاص IFS .

يتم استبدال طول الأحرف في قيمة المعلمة . إذا كانت المعلمة هي * أو @ ، فإن القيمة المستبدلة هي عدد المعلمات الموضعية. إذا كانت المعلمة عبارة عن اسم مصفوفة مكتوب بواسطة * أو @ ، فإن القيمة البديلة هي عدد العناصر في الصفيف.

يتم توسيع الكلمة لإنتاج نمط كما هو الحال في توسيع اسم المسار. إذا تطابق هذا النمط مع بداية قيمة المعلمة ، فإن نتيجة التوسع هي القيمة الموسعة للمعلمة بأقصر نموذج مطابق (حالة `' # ') أو أطول نمط مطابق (` ` ## ' حالة "حذف". إذا كانت المعلمة هي @ أو * ، فسيتم تطبيق عملية إزالة النمط على كل معلمة موضعية بدورها ، ويكون التوسيع هو القائمة الناتجة. إذا كانت المعلمة عبارة عن متغير صفيف تم تسجيله بـ @ أو * ، يتم تطبيق عملية إزالة النمط على كل عضو في الصفيف ، ويكون التوسيع هو القائمة الناتجة.

يتم توسيع الكلمة لإنتاج نمط كما هو الحال في توسيع اسم المسار. إذا كان النمط يتطابق مع جزء لاحق من القيمة الموسعة للمعلمة ، فستكون نتيجة التمديد هي القيمة الموسعة للمعلمة بأقصر نموذج مطابقة (حالة `` ٪ ') أو نمط المطابقة الأطول (`` ٪ تم حذف ٪ '' case. إذا كانت المعلمة هي @ أو * ، فسيتم تطبيق عملية إزالة النمط على كل معلمة موضعية بدورها ، ويكون التوسيع هو القائمة الناتجة. إذا كانت المعلمة عبارة عن متغير صفيف تم تسجيله بـ @ أو * ، يتم تطبيق عملية إزالة النمط على كل عضو في الصفيف ، ويكون التوسيع هو القائمة الناتجة.

يتم توسيع النقش لإنتاج نمط كما هو الحال في توسيع اسم المسار. يتم توسيع المعلمة ويتم استبدال أطول تطابق النمط مقابل قيمته بالسلسلة . في النموذج الأول ، يتم استبدال المطابقة الأولى فقط. النموذج الثاني يؤدي إلى استبدال كافة تطابقات النمط مع سلسلة . إذا كان النمط يبدأ بـ # ، فيجب أن يتطابق في بداية القيمة الموسعة للمعلمة . إذا كان النمط يبدأ بـ ٪ ، فيجب أن يطابق في نهاية القيمة الموسعة للمعلمة . إذا كانت السلسلة خالية ، فسيتم حذف التطابقات النمطية وقد يتم حذف النمط / التالي. إذا كانت المعلمة هي @ أو * ، فسيتم تطبيق عملية الاستبدال على كل معلمة موضعية ، ويكون التوسيع هو القائمة الناتجة. إذا كانت المعلمة عبارة عن متغير صفيف تم تسجيله بـ @ أو * ، فسيتم تطبيق عملية الاستبدال على كل عضو في الصفيف ، ويكون التوسيع هو القائمة الناتجة.

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

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

$ ( أمر )

أو

` القيادة`

يقوم Bash بتنفيذ التوسيع عن طريق تنفيذ الأمر واستبدال استبدال الأمر بالمخرج القياسي للأمر ، مع حذف أي خطوط زائدة جديدة. لا يتم حذف الخطوط الجديدة المدمجة ، ولكن قد تتم إزالتها أثناء تقسيم الكلمة. يمكن استبدال استبدال الأمر $ ( ملف القطة ) بما يعادل $ ولكن أسرع (< ملف ).

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

قد تكون متداخلة الأوامر التبديل. للتداخل عند استخدام النموذج backquoted ، تخلص من backquotes الداخلية مع خطوط مائلة عكسية.

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

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

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

$ (( التعبير ))

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

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

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

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

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

تقسيم الكلمة

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

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

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

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

توسع Pathname

بعد تقسيم الكلمة ، ما لم يتم تعيين الخيار -f ، يقوم bash بمسح كل كلمة للأحرف * ، ؟ و [ . في حالة ظهور أحد هذه الأحرف ، يتم اعتبار الكلمة على أنها نمط ، ويتم استبدالها بقائمة مرتبة أبجديًا لأسماء الملفات التي تطابق النمط. إذا لم يتم العثور على أسماء ملفات مطابقة ، وتم تعطيل خيار shell nullglob ، يتم ترك الكلمة بدون تغيير. إذا تم تعيين خيار nullglob ولم يتم العثور على أي تطابقات ، تتم إزالة الكلمة. إذا تم تمكين nocaseglob خيار shell ، يتم تنفيذ المطابقة دون النظر إلى حالة الأحرف الأبجدية. عند استخدام نمط لتوسيع اسم المسار ، يجب مطابقة الحرف "`. " في بداية الاسم أو بعد علامة مائلة مباشرة ، بشكل صريح ، ما لم يتم تعيين dotglob لخيار shell. عند مطابقة اسم مسار ، يجب دائمًا مطابقة حرف الخط المرسوم بشكل صريح. في حالات أخرى ، لا يتم التعامل مع الحرف ``. '' بشكل خاص. راجع وصف العرض أدناه تحت SHELL BUILTIN COMMANDS للحصول على وصف لخيارات shell nocaseglob و nullglob و dotglob .

يمكن استخدام متغير shell GLOBIGNORE لتقييد مجموعة أسماء الملفات المطابقة لنمط . إذا تم تعيين GLOBIGNORE ، تتم إزالة كل اسم مطابق للملف يتطابق أيضًا مع أحد الأنماط في GLOBIGNORE من قائمة التطابقات. يتم دائمًا تجاهل أسماء الملفات "`. " و " `.." ، حتى عند ضبط GLOBIGNORE . ومع ذلك ، فإن إعداد GLOBIGNORE له تأثير على تمكين خيار shell dotglob ، بحيث تتطابق جميع أسماء الملفات الأخرى التي تبدأ بـ ``. ' . للحصول على السلوك القديم لتجاهل أسماء الملفات التي تبدأ بـ ``. ' ، اجعل ' `. * '' أحد الأنماط في GLOBIGNORE . يتم تعطيل خيار dotglob عند عدم تعيين GLOBIGNORE .

نمط مطابقة

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

تحتوي أحرف النقش الخاص على المعاني التالية:

*

يتطابق مع أي سلسلة ، بما في ذلك سلسلة فارغة.

؟

يطابق أي حرف واحد.

[...]

تتطابق مع أي من الأحرف المغلقة. يشير زوج من الأحرف مفصولة بواصلة إلى تعبير نطاق ؛ أي حرف يقوم بالفرز بين هذين الحرفين ، شاملاً ، باستخدام تسلسل ترتيب المجموعات اللغوية الحالية ومجموعة الأحرف ، تتم مطابقته. إذا كان أول حرف يتبع [ هو ! أو ^ ثم تتم مطابقة أي حرف غير مغلق. يتم تحديد ترتيب الفرز للأحرف في تعبيرات النطاق حسب الإعدادات المحلية الحالية وقيمة متغير shell LC_COLLATE ، في حالة التعيين . أ - يمكن مطابقته بتضمينه كحرف أول أو آخر في المجموعة. يمكن مطابقة [ A ] عن طريق تضمينها كحرف أول في المجموعة.

داخل [ و ] ، يمكن تحديد فئات الأحرف باستخدام بناء الجملة [: class :] ، حيث تمثل الفئة واحدة من الفئات التالية المعرفة في معيار POSIX.2:

alnum alpha ascii blank cntrl digit graph انخفاض طباعة النقطه الفضاء العلوي كلمة xdigit
يطابق فئة أحرف أي حرف ينتمي إلى تلك الفئة. يطابق فئة أحرف الكلمة الحروف والأرقام والحرف _.

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

داخل [ و ] ، بناء الجملة [. الرمز .] يتطابق مع رمز رمز التجميع.

إذا تم تمكين خيار shell extglob باستخدام المبني المصور ، يتم التعرف على العديد من مشغلي المطابقة الممتدة للنمط. في الوصف التالي ، قائمة pattern هي قائمة بنمط واحد أو أكثر مفصولة بـ | . قد تتكون الأنماط المركبة باستخدام واحد أو أكثر من الأنماط الفرعية التالية:

( نمط قائمة )

تتطابق مع الصفر أو حدوث واحد من الأنماط المحددة

* ( نمط قائمة )

تتطابق مع الصفر أو أكثر من الأنماط المحددة

+ ( قائمة الأنماط )

تتطابق مع واحد أو أكثر من أنماط الأنماط المحددة

@ ( قائمة نمط )

تتطابق تمامًا مع أحد الأنماط المحددة

! ( قائمة نمط )

يتطابق مع أي شيء باستثناء أحد الأنماط المحددة

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

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

REDIRECTION

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

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

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

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

ls > dirlist 2 > & 1

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

ls 2 > & 1 > dirlist

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

يعالج Bash العديد من أسماء الملفات خاصةً عند استخدامها في عمليات إعادة التوجيه ، كما هو موضح في الجدول التالي:

/ dev / fd / fd

إذا كان fd عددًا صحيحًا صالحًا ، يتم تكرار واصف الملف fd .

/ ديف / ستدين

واصف الملف 0 مكرر.

/ ديف / المعياري

واصف الملف 1 مكرر.

/ ديف / ستدير

واصف الملف 2 مكرر.

/ dev / tcp / host / port

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

/ dev / udp / host / port

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

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

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

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

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

[ ن ] < كلمة

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

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

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

[ ن ] > كلمة

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

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

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

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

[ ن ] >> كلمة

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

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

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

&> كلمة

و

> & كلمة

من النموذجين ، يفضل الأول. هذا يعادل معادلة ل

> كلمة 2 > & 1

هنا الوثائق

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

شكل الوثائق هنا هو:

<< [ - ] كلمة هنا محدد الوثيقة

يتم تنفيذ أي توسع المعلمة أو استبدال الأمر أو التوسع الحسابي أو توسيع اسم المسار على الكلمة . إذا تم ذكر أي أحرف في الكلمة ، فإن المحدد هو نتيجة إزالة الاقتباس من الكلمة ، ولا يتم توسيع الخطوط الموجودة في الوثيقة. إذا كانت الكلمة غير مدروسة ، فإن جميع أسطر الوثيقة هنا تخضع لتوسيع المعلمة ، واستبدال الأمر ، والتوسعة الحسابية. في الحالة الأخيرة ، يتم تجاهل تسلسل الحرف \ ، ويجب استخدام \ quote the characters \ ، $ ، and ` .

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

هنا السلاسل

نسخة من وثائق هنا ، التنسيق هو:

<<< الكلمة

يتم توسيع الكلمة وتوفيرها للأمر على مدخلاتها القياسية.

تكرار واصفات الملف

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

[ ن ] كلمة

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

المشغل

[ ن ] > وكلمة

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

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

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

[ n ] <& digit -

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

وبالمثل ، فإن مشغل إعادة التوجيه

[ n ] > & digit -

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

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

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

[ ن ] <> كلمة

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

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

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

يتم إنشاء الأسماء المستعارة وإدراجها مع الأمر المستعار ، وإزالتها باستخدام الأمر unalias .

لا توجد آلية لاستخدام الحجج في النص البديل. إذا كانت هناك حاجة إلى الحجج ، فيجب استخدام وظيفة shell (انظر الوظائف أدناه).

لا يتم توسيع الأسماء المستعارة عندما تكون shell غير تفاعلية ، ما لم يتم تعيين خيار shell expand_aliases باستخدام shopt (راجع وصف العرض أسفل SHELL BUILTIN COMMANDS أدناه).

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

بالنسبة إلى كل الأغراض تقريبًا ، يتم استبدال الأسماء المستعارة بوظائف shell.

المهام

تعمل دالة shell المحددة على النحو الموصوف أعلاه تحت SHELL GRAMMAR ، على تخزين سلسلة من الأوامر للتنفيذ اللاحق. عند استخدام اسم دالة shell كاسم أمر بسيط ، يتم تنفيذ قائمة الأوامر المرتبطة بهذا الاسم. يتم تنفيذ الدالات في سياق shell الحالي ؛ يتم إنشاء أي عملية جديدة لتفسيرها (مقارنة هذا مع تنفيذ برنامج نصي shell). عندما يتم تنفيذ دالة ، تصبح الوسيطات إلى الدالة المعلمات الموضعية أثناء تنفيذها. يتم تحديث المعلمة الخاصة # لتعكس التغيير. المعلمة Positional 0 دون تغيير. يتم تعيين متغير FUNCNAME على اسم الدالة أثناء تنفيذ الدالة. جميع جوانب بيئة تنفيذ shell متطابقة بين الدالة والمتصل الخاص بها مع الاستثناء الذي لا يتم توارثه اعتراض DEBUG (راجع وصف الاعتراض المضمّن تحت SHELL BUILTIN COMMANDS أدناه) ما لم يتم إعطاء الدالة سمة التتبع ( انظر وصف تعلن بنيت أدناه).

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

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

قد يتم سرد أسماء وتعريفات الدالة مع الخيار -f إلى الأمر decliding أو typeset builtin. سوف يقوم الخيار -F للإعلان أو typeset بسرد أسماء الوظائف فقط. قد يتم تصدير الوظائف بحيث يتم تحديدها تلقائيًا باستخدام الخيار -f إلى التصدير المضمّن.

قد تكون الوظائف متكررة. لا يوجد حد مفروض على عدد المكالمات العودية.

التقييم الرياضي

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

معرف الهوية ++ -

متغير بعد الزيادة وما بعد تناقص

++ معرف - معرف

زيادة مسبقة ومتغيرة ما قبل الإنقاص

- +

واحد ناقص زائد

! ~

منطقي ونفي المعادلة

**

الأسي

* /٪

الضرب والقسمة والباقي

+ -

علاوة على ذلك الطرح

<< >>

اليسار واليمين تحولات bitwise

<=> = <>

مقارنة

==!

المساواة وعدم المساواة

و

bitwise AND

^

bitwise الحصري أو

|

bitwise OR

&&

منطقي و

||

منطقية أو

expr ؟ expr : expr

تقييم مشروط

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

مهمة

expr1 ، expr2

فاصلة

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

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

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

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

يتم استخدام التعبيرات الشرطية بواسطة [[ الأمر المركب والاختبار و [ أوامر مدمجة لاختبار سمات الملف وإجراء مقارنات السلسلة والعمليات الحسابية. يتم تشكيل التعبيرات من الانتخابات التمهيدية الأحادية أو الثنائية التالية. إذا كانت أي وسيطة للملف إلى واحدة من الانتخابات التمهيدية من النموذج / dev / fd / n ، فسيتم تحديد واصف الملف n . إذا كانت وسيطة الملف إلى واحدة من الانتخابات التمهيدية هي واحدة من / dev / stdin ، / dev / stdout ، أو / dev / stderr ، فسيتم تحديد واصف الملف 0 أو 1 أو 2 ، على التوالي.

- ملف

صحيح إذا كان الملف موجودا.

ب الملف

صحيح إذا كان الملف موجودًا وهو ملف خاص بحظر.

ملف ج

صحيح إذا كان الملف موجودًا وهو ملف خاص بالحروف.

ملف د

صحيح إذا كان الملف موجودًا وهو دليل.

من الملف

صحيح إذا كان الملف موجودا.

الملف -f

صحيح إذا كان الملف موجودًا وهو ملف عادي.

-g الملف

صحيح إذا كان الملف موجودًا ومعرّف مجموعة المجموعات.

الملف -h

صحيح إذا كان الملف موجودًا وهو رابط رمزي.

-k الملف

صحيح إذا كان الملف موجودًا وتم ضبط بتة `` sticky``.

-p الملف

صحيح إذا كان الملف موجودًا وهو أنبوب مسمى (FIFO).

الملف -r

صحيح إذا كان الملف موجود وقابل للقراءة.

الملف

صحيح إذا كان الملف موجودًا ولديه حجم أكبر من الصفر.

-d fd

ﺻﺣﯾﺢ إذا ﮐﺎن ﻣﻔﺗﺎح fd اﻟﻣﻔﺗوح ﻣﻔﺗوﺣًﺎ وﯾﺷﯾر إﻟﯽ اﻟﺟﮭﺎز.

الملف

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

-w الملف

صحيح إذا كان الملف موجود وقابل للكتابة.

اكس الملف

صحيح إذا كان الملف موجودًا وقابل للتنفيذ.

ملف -O

صحيح إذا كان الملف موجودًا ومملوكًا بمعرف المستخدم الفعلي.

ملف -G

صحيح إذا كان الملف موجودًا ومملوكًا بمعرف المجموعة الفعلي.

ملف ل

صحيح إذا كان الملف موجودًا وهو رابط رمزي.

الملف -S

صحيح إذا كان الملف موجودًا وهو مقبس.

ملف -N

صحيح إذا كان الملف موجودًا وتم تعديله منذ آخر قراءة له.

file1 - nt file2

صحيح إذا كان file1 أحدث (وفقا لتاريخ التعديل) من file2 ، أو إذا كان file1 موجود و file2 لا.

file1 - ot file2

صحيح إذا كان file1 أقدم من file2 ، أو إذا كان file2 موجود و file1 لا.

file1 -ef file2

صحيح إذا كان file1 و file2 يشيران إلى نفس الجهاز وأرقام inode.

اسم الشهرة

صحيح إذا تم تمكين خيار خيار shell. انظر قائمة الخيارات تحت وصف خيار -o إلى المجموعة المبينة أدناه.

سلسلة -z

صحيح إذا كان طول السلسلة صفرا.

سلسلة

خيط

صحيح إذا كان طول السلسلة غير صفري.

string1 == string2

صحيح إذا كانت السلاسل متساوية. = يمكن استخدامه بدلاً من == من أجل الامتثال الصارم لـ POSIX.

string1 ! = string2

صحيح إذا كانت السلاسل ليست متساوية.

string1 < string2

صحيح إذا تم ترتيب string1 قبل string2 معجم في اللغة الحالية.

string1 > string2

صحيح إذا كان string1 يفرز بعد string2 معجم في اللغة الحالية.

arg1 OP arg2

OP هو واحد من -eq أو -ne أو -lt أو -le أو -gt أو -ge . هذه المشغلات الثنائية الحسابية تعود إلى true إذا كانت arg1 تساوي ، أو لا تساوي ، أقل من ، أو أقل من أو تساوي ، أكبر من ، أو أكبر من أو تساوي ، arg2 ، على التوالي. قد يكون Arg1 و arg2 أعداد صحيحة موجبة أو سالبة.

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

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

1.

يتم حفظ الكلمات التي وضع عليها المحلل اللغوي كـ تعيينات متغير (تلك التي تسبق اسم الأمر) وعمليات إعادة التوجيه للمعالجة اللاحقة.

2.

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

3.

يتم تنفيذ عمليات إعادة التوجيه كما هو موضح أعلاه تحت REDIRECTION .

4.

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

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

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

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

القيادة التنفيذ

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

إذا كان اسم الأمر لا يحتوي على علامات مائلة ، يحاول shell تحديد موقعه. في حالة وجود دالة shell بهذا الاسم ، يتم استدعاء تلك الدالة كما هو موضح أعلاه في FUNCTIONS . إذا كان الاسم لا يتطابق مع إحدى الدالات ، فإن shell يبحث عنه في قائمة المكوِّنات shell. إذا تم العثور على تطابق ، يتم استدعاء ذلك المضمن.

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

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

إذا فشل هذا التنفيذ لأن الملف ليس في تنسيق قابل للتنفيذ ، والملف ليس دليلاً ، فمن المفترض أن يكون برنامج نصي shell ، وهو ملف يحتوي على أوامر shell. يتم إنتاجها في subshell لتنفيذها. هذا subshell reinitializes نفسها ، بحيث يكون التأثير كما لو تم استدعاء قذيفة جديدة للتعامل مع البرنامج النصي ، باستثناء أنه يتم الاحتفاظ مواقع الأوامر تذكرها الوالد (انظر التجزئة أدناه تحت SHELL BUILTIN COMMANDS ) من قبل الطفل.

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

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

تحتوي shell على بيئة تنفيذ ، والتي تتكون مما يلي:

*

فتح الملفات الموروثة من قبل الصدفة عند الاحتجاج ، كما تم تعديلها بواسطة عمليات إعادة التوجيه المقدمة إلى مدمج exec

*

دليل العمل الحالي الذي تم تعيينه بواسطة cd أو pushd أو popd أو الموروث بواسطة shell عند الاستدعاء

*

قناع وضع إنشاء الملف كما هو محدد بواسطة umask أو الموروث من أصل shell

*

الفخاخ الحالية التي وضعتها فخ

*

المعلمات shell التي تم تعيينها بواسطة تعيين متغير أو مع مجموعة أو موروثة من أصل shell في البيئة

*

وظائف shell المحددة أثناء التنفيذ أو الموروثة من أصل shell في البيئة

*

تمكين الخيارات عند الاستدعاء (إما افتراضيًا أو باستخدام وسيطات سطر الأوامر) أو عن طريق التعيين

*

خيارات مكنت من قبل shopt

*

الأسماء المستعارة قذيفة مع الاسم المستعار

*

معرفات العمليات المختلفة ، بما في ذلك مهام الخلفية ، وقيمة $$ ، وقيمة $ PPID

عند تنفيذ أمر بسيط بخلاف دالة builtin أو shell ، يتم استدعاؤه في بيئة تنفيذ منفصلة تتكون مما يلي. ما لم يذكر خلاف ذلك ، يتم توارث القيم من shell.

*

ملفات shell المفتوحة ، بالإضافة إلى أي تعديلات وإضافات محددة بواسطة عمليات إعادة التوجيه إلى الأمر

*

دليل العمل الحالي

*

قناع وضع إنشاء الملف

*

متغيرات shell المحددة للتصدير ، مع المتغيرات التي تم تصديرها للأمر ، مرت في البيئة

*

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

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

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

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

أنظر أيضا

دليل باش المرجعي ، براين فوكس وشيت رامي

مكتبة Gnu Readline Library ، براين فوكس و Chet Ramey

مكتبة تاريخ غنو ، برايان فوكس وشيت رامي

واجهة نظام التشغيل المحمول (POSIX) الجزء 2: Shell and Utilities ، IEEE

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

emacs (1)، vi (1)

readline (3)