مقایسه Zsh با Bash Scripting: تفاوت در چیست؟

115
0
مقایسه Zsh با Bash Scripting

وقتی صحبت از اسکریپت نویسی پوسته در سیستم عامل های مشابه یونیکس می شود، دو پوسته غالب هستند: Bash (Bourne Again Shell) و Zsh (Z Shell). اگر شما یک برنامه نویس یا یک مدیر سیستم هستید، انتخاب بین این دو به طور قابل توجهی بر کارایی و بهره وری شما تأثیر می گذارد. مقایسه Zsh با Bash Scripting را در ادامه بخوانید.

درک تفاوت ها و شباهت های بین این دو پوسته به شما کمک می کند تا گردش کار خط فرمان خود را بهینه کنید. دانستن تفاوت های ظریف هر پوسته به شما در تصمیم گیری آگاهانه کمک می کند.

Bash و Zsh چیست؟

Bash در هر دو سیستم لینوکس و macOS محبوب است. این ابزار قدرتمندی است که می توانید برای تعامل با سیستم عامل و اجرای دستورات از آن استفاده کنید. همچنین می‌توانید از Bash برای اسکریپت‌نویسی پوسته استفاده کنید که با نوشتن اسکریپت‌هایی حاوی بیش از یک دستور، وظایف را خودکار می‌کند.

Zsh (پوسته Z) یک نسخه توسعه یافته از Bash است که ویژگی های بسیار بیشتری دارد. این پوسته پیش فرض در macOS است. همچنین در سیستم های لینوکس به طور فزاینده ای محبوب می شود.

نحوه تغییر از Bash به Zsh

اگر از یک سیستم لینوکس استفاده می کنید و می خواهید به Zsh تغییر دهید، با استفاده از مدیریت بسته خود برای نصب آن شروع کنید. به عنوان مثال، در دبیان یا اوبونتو، از دستور زیر استفاده کنید:

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 (Primary Prompt) را تعریف کنید.

PS1="%F{green}%n@%m %F{blue}%~ %f$ "

اعلان سفارشی فوق، نام کاربری، نام میزبان و فهرست فعلی را با رنگ های مختلف نمایش می دهد:

راه‌های زیادی برای سفارشی‌سازی درخواست Zsh وجود دارد که به شما امکان می‌دهد یک نشانگر مدیریت تنظیم کنید، تاریخ و زمان را درج کنید و درخواست جدید را ذخیره کنید.

هنگام سفارشی‌سازی سریع، Bash از رویکرد کمی متفاوت استفاده می‌کند. از کدهای فرار برای تعیین تغییرات رنگ و قالب بندی در اعلان استفاده می کند. برای دستیابی به همان سفارشی سازی Zsh در بالا، می توانید از دستور سفارشی زیر استفاده کنید.

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

استفاده از \[\033[0m\] بسیار مهم است زیرا تضمین می‌کند که تغییرات رنگ بر روی متنی که به دنبال فرمان می‌آید تأثیر نمی‌گذارد.

2. پشتیبانی از آرایه های انجمنی

Zsh به طور بومی از آرایه های انجمنی پشتیبانی می کند. این آرایه‌ها راه مناسبی برای مرتبط کردن داده‌ها فراهم می‌کنند که سازماندهی و بازیابی اطلاعات را آسان می‌کند. از دستور declare -A برای اعلام صریح یک آرایه انجمنی استفاده کنید:

# 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. الگوهای Globbing توسعه یافته

الگوهای globbing گسترده یک راه قدرتمند و انعطاف پذیر برای انتخاب و دستکاری فایل ها و دایرکتوری ها بر اساس معیارهای مختلف ارائه می دهند. زمانی که با ساختارهای پیچیده فایل کار می کنید یا زمانی که به کنترل دقیقی بر انتخاب فایل نیاز دارید، مفید هستند.

در یک اسکریپت Zsh، می توانید این الگوها را با استفاده از دستور setopt فعال کنید. به عنوان مثال، برای مطابقت با همه فایل‌های txt در فهرست فعلی:

setopt extended_glob
txt_files=(*.txt)

برای مطابقت با همه فایل ها به جز آنهایی که پسوند log دارند:

setopt extended_glob
non_log_files=^(*.log)

در Bash باید آنها را با استفاده از دستور shopt با گزینه extglob فعال کنید. به عنوان مثال، برای مطابقت با همه فایل‌های txt در فهرست فعلی:

shopt -s extglob
txt_files=(*.txt)

برای مطابقت با همه فایل ها به جز آنهایی که پسوند log دارند:

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

تفاوت اصلی بین Zsh و Bash در مورد الگوهای globbing دستوری است که برای فعال کردن آنها استفاده می شود. با این حال، توجه داشته باشید که برخی از عملگرها بین دو پوسته متفاوت هستند.

4. توسعه پارامتر پیشرفته

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

name=”foo”
result=”${!name}”
echo “$result”

از سوی دیگر، Bash به صورت بومی اجازه گسترش غیرمستقیم را نمی دهد. راه حل برای این کار استفاده از دستور داخلی eval یا دستور ${!var} برای مراجع متغیر غیرمستقیم است.

name=”world”
var=”name”
echo ${!var} # This will output: world

شباهت های بین Bash و Zsh

در حالی که تفاوت‌هایی بین Bash و Zsh وجود دارد، آنها شباهت‌هایی نیز دارند.

1. نحو خط فرمان

Bash و Zsh یک دستور خط فرمان مشابه دارند. این عالی است زیرا به این معنی است که اکثر دستورات و اسکریپت هایی که می نویسید در هر دو پوسته بدون تغییر کار می کنند. Zsh در بالای Bash ساخته شده است، بنابراین شامل همه دستورات و ویژگی های اولیه است.

با این حال، تفاوت های بسیار جزئی در نحو وجود دارد که باید آنها را شناسایی و تنظیم کنید.

2. سازگاری جایگزینی فرمان

جایگزینی دستور فرآیند جاسازی خروجی یک دستور در دستور دیگر است. بین هر دو پوسته سازگار است.

result=$(ls) 

هم در Bash و هم در Zsh، می‌توانید از دستور $(command) برای جایگزینی خروجی یک دستور با یک متغیر استفاده کنید. این امکان حمل آسان اسکریپت ها را بین دو پوسته فراهم می کند.

3. گزینه اشکال زدایی اسکریپت

هم Bash و هم Zsh از پرچم -x برای اشکال زدایی اسکریپت استفاده می کنند. هنگامی که یک اسکریپت را با این پرچم اجرا می کنید، هر دستور را قبل از اجرا نمایش می دهد. این به شما کمک می کند تا مشکلات موجود در اسکریپت های خود را شناسایی کنید.

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

echo “Debugging Bash script”

در این اسکریپت Bash، پرچم -x اشکال زدایی را فعال می کند. می توانید از یک رویکرد مشابه در Zsh استفاده کنید. فقط bash را با zsh جایگزین کنید.

ملاحظاتی برای انتخاب بین Zsh و Bash

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

. پیچیدگی اسکریپت و ویژگی‌های پیشرفته: Zsh ویژگی‌های پیشرفته‌ای مانند آرایه‌های انجمنی، الگوهای globbing گسترده و گسترش پارامترهای پیشرفته را ارائه می‌کند. این کار وظایف برنامه نویسی پیچیده را ساده می کند. اگر اسکریپت های شما نیاز به دستکاری رشته های پیشرفته یا ساختار داده دارند، Zsh انتخاب بهتری است.

. انجمن و اکوسیستم پلاگین: هر دو Bash و Zsh دارای انجمن‌های فعال هستند، اما Zsh دارای جامعه قوی‌تر و اکوسیستم گسترده‌ای از پلاگین‌ها و مضامین است. اگر به سفارشی‌سازی اهمیت می‌دهید، انجمن پر جنب و جوش Zsh و پشتیبانی افزونه می‌تواند مزیت قابل توجهی باشد.

. سهولت یادگیری: اگر در زمینه اسکریپت نویسی پوسته تازه کار هستید، Bash نقطه شروع قابل دسترس تری است. دارای اسناد و منابع گسترده ای است که برای مبتدیان در دسترس است. این امر یادگیری اصول اولیه اسکریپت نویسی پوسته را آسان تر می کند.

خودکارسازی وظایف با استفاده از اسکریپت های شل (Shell)

دانستن نحوه خودکارسازی وظایف با استفاده از اسکریپت های پوسته از اهمیت بالایی برخوردار است. می توانید کارهای تکراری را خودکار کنید و در زمان زیادی صرفه جویی کنید.

شما همچنین می توانید از این اسکریپت ها برای مدیریت حساب های کاربری، نظارت بر منابع سیستم، پشتیبان گیری از داده ها و انجام تعمیر و نگهداری معمول استفاده کنید. وقتی به دقت نوشته شوند، می توانند احتمال خطای انسانی را نیز کاهش دهند.

امتیاز این مطلب

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

گوگل فارکس آموزش تخصصی آمارکتس