Zsh مقابل البرمجة النصية Bash. ماهو الفرق؟

Zsh مقابل البرمجة النصية Bash. ماهو الفرق؟
القراء مثلك يساعدون في دعم MUO. عند إجراء عملية شراء باستخدام الروابط الموجودة على موقعنا، قد نكسب عمولة تابعة. اقرأ أكثر.

عندما يتعلق الأمر بالبرمجة النصية للقذائف على أنظمة التشغيل المشابهة لـ Unix، تهيمن قذيفتان: Bash (Bourne Again Shell) وZsh (Z Shell). إذا كنت مبرمجًا أو مسؤول نظام، فإن الاختيار بين هذين الأمرين يؤثر بشكل كبير على كفاءتك وإنتاجيتك.





فيديو MUO لهذا اليوم قم بالتمرير للمتابعة مع المحتوى

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





ما هو باش وZsh؟

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





Zsh (Z shell) هي نسخة موسعة من Bash تحتوي على العديد من الميزات. إنها القشرة الافتراضية على نظام التشغيل macOS. كما أنها أصبحت ذات شعبية متزايدة على أنظمة Linux.

كيفية التبديل من Bash إلى Zsh

إذا كنت تستخدم نظام Linux وترغب في التبديل إلى Zsh، فابدأ بذلك باستخدام مدير الحزم الخاص بك لتثبيته . على سبيل المثال، في نظام Debian أو Ubuntu، استخدم الأمر التالي:



 sudo apt install zsh

بعد تثبيته على نظامك، قم بالتبديل إليه عن طريق تشغيل الأمر التالي:

 chsh -s $(which zsh)

إذا كنت تستخدم نظام التشغيل macOS، فهذا يعني أن Zsh مثبت بالفعل. للتبديل إليه قم بتشغيل الأمر التالي:





 chsh -s /bin/zsh

للتبديل مرة أخرى إلى Bash، استبدل Zsh بـ Bash في الأوامر المذكورة أعلاه.

للتحقق من الصدفة التي تستخدمها، قم بتشغيل الأمر التالي:





 echo $SHELL

سيساعدك هذا على التأكد من أنك تستخدم الصدفة التي تنوي استخدامها.

الاختلافات بين Zsh و Bash

هناك عدة اختلافات بين Zsh و Bash. سيساعدك النظر في هذه الاختلافات في تحديد الصدفة التي تناسبك بشكل أفضل.

1. التخصيص الفوري

يوفر Zsh طريقة أسهل لتخصيص المطالبات الخاصة بك باستخدام % تسلسلات الهروب القائمة على. وهذا يسمح بمطالبات ديناميكية بالألوان والمعلومات. لتخصيص موجه الصدفة الخاص بك، حدد PS1 (الموجه الأساسي).

لا يتصل جهاز wii بالإنترنت
 PS1="%F{green}%n@%m %F{blue}%~ %f$ " 

يعرض الموجه المخصص أعلاه اسم المستخدم واسم المضيف والدليل الحالي بألوان مختلفة:

  تخصيص Zsh الفوري على الجهاز

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

يستخدم Bash أسلوبًا مختلفًا بعض الشيء عندما يتعلق الأمر بالتخصيص السريع. ويستخدم رموز الهروب لتحديد تغييرات اللون والتنسيق في الموجه. لتحقيق نفس التخصيص مثل Zsh أعلاه، يمكنك استخدام الموجه المخصص التالي.

 PS1="\[3[32m\]\u@\h \[3[34m\]\w \[3[0m\]$ " 

استخدام \[3[0m\] يعد أمرًا بالغ الأهمية لأنه يضمن أن تغييرات اللون لا تؤثر على النص الذي يتبع المطالبة.

2. دعم المصفوفات النقابية

يدعم Zsh أصلاً المصفوفات الترابطية. توفر هذه المصفوفات طريقة ملائمة لربط البيانات مما يجعل من السهل تنظيم المعلومات واسترجاعها. يستخدم يعلن أمر للإعلان بشكل صريح عن مصفوفة ترابطية:

 # Declare an associative array in Zsh  
declare -A my_assoc_array

يمكنك بعد ذلك تعيين قيم للمصفوفة الترابطية:

 my_assoc_array=(key1 value1 key2 value2) 

وأخيرًا، يمكنك الوصول إلى القيم باستخدام مفاتيحها:

 echo $my_assoc_array[key1] # Outputs: value1

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

 echo "${my_assoc_array[key1]}" 

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

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

3. أنماط التألق الموسعة

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

في البرنامج النصي Zsh، يمكنك تمكين هذه الأنماط باستخدام ملف com.setopt يأمر. على سبيل المثال، لتتناسب مع الجميع .رسالة قصيرة الملفات الموجودة في الدليل الحالي:

 setopt extended_glob 
txt_files=(*.txt)

لمطابقة كافة الملفات باستثناء تلك ذات ملحق .log:

 setopt extended_glob 
non_log_files=^(*.log)

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

 shopt -s extglob 
txt_files=(*.txt)

لمطابقة كافة الملفات باستثناء تلك التي تحتوي على .سجل امتداد:

 shopt -s extglob 
non_log_files=!(*.log)

الفرق الرئيسي بين Zsh و Bash عندما يتعلق الأمر بأنماط التألق هو الأمر المستخدم لتمكينها. ومع ذلك، لاحظ أن بعض العوامل تختلف بين القذيفتين.

4. توسيع المعلمات المتقدمة

يدعم Zsh التوسع غير المباشر للمعلمات. يتيح لك ذلك توسيع قيمة المتغير الذي تم تخزين اسمه في متغير آخر. لتحقيق ذلك، عليك أن تضع بادئة اسم المتغير بعلامة تعجب ! .

 name="foo" 
result="${!name}"
echo "$result"

من ناحية أخرى، لا يسمح Bash بالتوسع غير المباشر محليًا. الحل البديل لذلك هو استخدام تقييم الأمر المدمج أو ${!كان} بناء الجملة للمراجع المتغيرة غير المباشرة.

كيفية تثبيت نظام التشغيل windows 10 من USB
 name="world" 
var="name"
echo ${!var} # This will output: world

أوجه التشابه بين Bash و Zsh

على الرغم من وجود اختلافات بين Bash وZsh، إلا أنهما يشتركان أيضًا في بعض أوجه التشابه.

1. بناء جملة سطر الأوامر

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

ومع ذلك، هناك اختلافات طفيفة جدًا في بناء الجملة والتي ستحتاج إلى تحديدها وتعديلها.

2. اتساق استبدال الأوامر

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

 result=$(ls) 

في كل من Bash وZsh، يمكنك استخدام $(الأمر) بناء الجملة لاستبدال إخراج الأمر إلى متغير. وهذا يسمح بسهولة نقل البرامج النصية بين الغلافين.

3. خيار تصحيح البرنامج النصي

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

 # Debugging a script in both Bash and Zsh 
#!/bin/bash -x

echo "Debugging Bash script"

في برنامج Bash النصي هذا، يتم استخدام -x العلم يتيح التصحيح. يمكنك استخدام نهج مماثل في Zsh؛ فقط استبدل سحق مع zsh .

اعتبارات للاختيار بين Zsh و Bash

  • التوافق وقابلية النقل : Bash هو الغلاف الافتراضي في العديد من الأنظمة المستندة إلى Unix. وهذا يجعله خيارًا أكثر أمانًا للبرمجة النصية عبر الأنظمة الأساسية. إذا كنت بحاجة إلى تشغيل البرامج النصية الخاصة بك على نطاق واسع من الأنظمة دون تعديل، فإن Bash هو الخيار الأفضل.
  • تعقيد البرنامج النصي والميزات المتقدمة : يوفر Zsh ميزات متقدمة مثل المصفوفات الترابطية وأنماط الالتفاف الموسعة وتوسيع المعلمات المتقدمة. وهذا يبسط مهام البرمجة النصية المعقدة. إذا كانت البرامج النصية الخاصة بك تتطلب معالجة متقدمة للسلاسل أو هياكل البيانات، فإن Zsh هو الخيار الأفضل.
  • النظام البيئي للمجتمع والمكونات الإضافية : يتمتع كل من Bash وZsh بمجتمعات نشطة، لكن Zsh لديه مجتمع أقوى ونظام بيئي واسع النطاق من المكونات الإضافية والموضوعات. إذا كنت تقدر التخصيص، فيمكن أن يكون دعم مجتمع Zsh النابض بالحياة والمكونات الإضافية ميزة كبيرة.
  • سهولة التعلم : إذا كنت جديدًا في البرمجة النصية لـ Shell، فإن Bash هو نقطة بداية يسهل الوصول إليها. لديها وثائق وموارد واسعة النطاق متاحة للمبتدئين. وهذا يجعل من السهل تعلم أساسيات البرمجة النصية لـ Shell.

أتمتة المهام باستخدام برامج شل النصية

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

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