Zsh lwn. Bash Skrip. Apa perbezaannya?

Zsh lwn. Bash Skrip. Apa perbezaannya?
Pembaca seperti anda membantu menyokong MUO. Apabila anda membuat pembelian menggunakan pautan di tapak kami, kami mungkin mendapat komisen ahli gabungan. Baca Lagi.

Apabila bercakap tentang skrip shell pada sistem pengendalian seperti Unix, dua shell mendominasi: Bash (Bourne Again Shell) dan Zsh (Z Shell). Jika anda seorang pengaturcara atau pentadbir sistem, pilihan antara kedua-dua ini memberi kesan ketara kepada kecekapan dan produktiviti anda.





Video MUO pada hari itu SCROLL UNTUK MENERUSKAN KANDUNGAN

Memahami perbezaan dan persamaan antara kedua-dua cengkerang ini akan membantu anda mengoptimumkan aliran kerja baris arahan anda. Mengetahui tentang nuansa setiap cangkang akan membantu anda membuat keputusan termaklum.





Apakah Bash dan Zsh?

Bash popular pada kedua-dua sistem Linux dan macOS. Ia merupakan alat berkuasa yang boleh anda gunakan untuk berinteraksi dengan sistem pengendalian dan menjalankan arahan. Anda juga boleh gunakan Bash untuk skrip shell , yang mengautomasikan tugas dengan menulis skrip yang mengandungi lebih daripada satu arahan.





Zsh (Z shell) ialah versi lanjutan Bash yang mempunyai lebih banyak ciri. Ia adalah cangkerang lalai pada macOS. Ia juga menjadi semakin popular pada sistem Linux.

Bagaimana Beralih Dari Bash ke Zsh

Jika anda menggunakan sistem Linux dan ingin bertukar kepada Zsh, mulakan dengan menggunakan pengurus pakej anda untuk memasangnya . Sebagai contoh, pada Debian atau Ubuntu, gunakan arahan berikut:



 sudo apt install zsh

Selepas memasangnya pada sistem anda, tukar kepadanya dengan menjalankan arahan berikut:

 chsh -s $(which zsh)

Jika anda menggunakan macOS, Zsh sudah dipasang. Untuk beralih kepadanya jalankan arahan berikut:





 chsh -s /bin/zsh

Untuk bertukar kembali kepada Bash, gantikan Zsh dengan Bash dalam arahan di atas.

Untuk menyemak shell yang anda gunakan, jalankan arahan berikut:





 echo $SHELL

Ini akan membantu anda mengesahkan anda menggunakan cangkerang yang anda ingin gunakan.

jenis ram apa yang mungkin memperlambat prestasi sistem

Perbezaan Antara Zsh dan Bash

Terdapat beberapa perbezaan antara Zsh dan Bash. Memandangkan perbezaan ini akan membantu anda memutuskan cangkang yang paling sesuai untuk anda.

1. Penyesuaian Segera

Zsh menawarkan cara yang lebih mudah untuk menyesuaikan gesaan anda menggunakan % -urutan melarikan diri berasaskan. Ini membolehkan gesaan dinamik dengan warna dan maklumat. Untuk menyesuaikan gesaan shell anda, takrifkan PS1 (Gesaan Utama).

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

Gesaan tersuai di atas memaparkan nama pengguna, nama hos dan direktori semasa dalam warna yang berbeza:

  Penyesuaian gesaan Zsh pada terminal

Terdapat banyak cara lain untuk menyesuaikan gesaan Zsh , membolehkan anda menetapkan penunjuk pentadbir, sertakan tarikh dan masa serta menyimpan gesaan baharu.

Bash menggunakan pendekatan yang sedikit berbeza apabila ia berkaitan dengan penyesuaian segera. Ia menggunakan kod melarikan diri untuk menentukan perubahan warna dan pemformatan dalam gesaan. Untuk mencapai penyesuaian yang sama seperti Zsh di atas, anda boleh menggunakan gesaan tersuai berikut.

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

menggunakan \[3[0m\] adalah penting kerana ia memastikan bahawa perubahan warna tidak menjejaskan teks yang mengikuti gesaan.

2. Sokongan untuk Tatasusunan Bersekutu

Zsh secara asli menyokong tatasusunan bersekutu. Tatasusunan ini menyediakan cara yang mudah untuk mengaitkan data yang memudahkan untuk mengatur dan mendapatkan maklumat. guna mengisytiharkan -A perintah untuk mengisytiharkan tatasusunan bersekutu secara eksplisit:

 # Declare an associative array in Zsh  
declare -A my_assoc_array

Anda kemudiannya boleh menetapkan nilai kepada tatasusunan bersekutu:

 my_assoc_array=(key1 value1 key2 value2) 

Dan, akhirnya, akses nilai menggunakan kunci mereka:

 echo $my_assoc_array[key1] # Outputs: value1

Bash telah menyertakan sokongan asli untuk tatasusunan bersekutu sejak versi 4.0. Anda mengisytiharkan dan menetapkan nilai dengan cara yang sama seperti yang anda lakukan dalam Zsh. Tetapi apabila ia datang untuk mengakses nilai tatasusunan, anda perlu membungkus kunci di dalam kurungan kerinting:

 echo "${my_assoc_array[key1]}" 

Perbezaan utama ialah sokongan Zsh untuk tatasusunan bersekutu lebih kaya dengan ciri dan maju daripada Bash. Zsh membenarkan tatasusunan bersekutu mempunyai kunci pelbagai jenis data, bukan hanya rentetan. Bash hanya menyokong kekunci rentetan.

Dalam versi Bash yang lebih awal, anda perlu memikirkan cara untuk penyelesaian atau mempunyai alat luaran untuk menggunakan tatasusunan bersekutu.

3. Corak Globbing Dilanjutkan

Corak globbing lanjutan menyediakan cara yang berkuasa dan fleksibel untuk memilih dan memanipulasi fail dan direktori berdasarkan pelbagai kriteria. Ia berguna apabila anda bekerja dengan struktur fail yang kompleks atau apabila anda memerlukan kawalan tepat ke atas pemilihan fail.

Dalam skrip Zsh, anda boleh mendayakan corak ini menggunakan setopt perintah. Sebagai contoh, untuk memadankan semua .txt fail dalam direktori semasa:

 setopt extended_glob 
txt_files=(*.txt)

Untuk memadankan semua fail kecuali fail yang mempunyai sambungan .log:

 setopt extended_glob 
non_log_files=^(*.log)

Dalam Bash, anda perlu mendayakan mereka menggunakan kedai-kedai perintah dengan extglob pilihan. Sebagai contoh, untuk memadankan semua .txt fail dalam direktori semasa:

 shopt -s extglob 
txt_files=(*.txt)

Untuk memadankan semua fail kecuali yang mempunyai .log sambungan:

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

Perbezaan utama antara Zsh dan Bash apabila ia berkaitan dengan corak globbing ialah arahan yang digunakan untuk membolehkannya. Walau bagaimanapun, perhatikan bahawa sesetengah pengendali adalah berbeza antara kedua-dua cengkerang.

4. Pengembangan Parameter Lanjutan

Zsh menyokong pengembangan tidak langsung parameter. Ini membolehkan anda mengembangkan nilai pembolehubah yang namanya disimpan dalam pembolehubah lain. Untuk mencapai ini, anda perlu memberi awalan nama pembolehubah dengan tanda seru ! .

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

Bash sebaliknya tidak membenarkan pengembangan tidak langsung secara asli. Penyelesaian untuk ini adalah menggunakan eval arahan terbina dalam atau ${!was} sintaks untuk rujukan pembolehubah tidak langsung.

cara membuat akaun google yang lain
 name="world" 
var="name"
echo ${!var} # This will output: world

Persamaan Antara Bash dan Zsh

Walaupun terdapat perbezaan antara Bash dan Zsh, mereka juga berkongsi beberapa persamaan.

1. Sintaks Baris Perintah

Bash dan Zsh berkongsi sintaks baris arahan yang serupa. Ini bagus kerana ini bermakna kebanyakan arahan dan skrip yang anda tulis akan berfungsi dalam mana-mana shell, tanpa pengubahsuaian. Zsh dibina di atas Bash, jadi ia termasuk semua arahan dan ciri asas yang sama.

Walau bagaimanapun, terdapat perbezaan yang sangat kecil dalam sintaks yang anda perlu kenal pasti dan laraskan.

2. Konsisten Penggantian Perintah

Penggantian arahan ialah proses membenamkan output satu arahan ke yang lain. Ia konsisten antara kedua-dua cengkerang.

 result=$(ls) 

Dalam kedua-dua Bash dan Zsh, anda boleh menggunakan $(perintah) sintaks untuk menggantikan output arahan kepada pembolehubah. Ini membolehkan mudah alih skrip antara dua cangkerang.

3. Pilihan Penyahpepijatan Skrip

Kedua-dua Bash dan Zsh menggunakan -x bendera untuk penyahpepijatan skrip. Apabila anda menjalankan skrip dengan bendera ini, ia memaparkan setiap arahan sebelum ia dijalankan. Ini membantu anda mengenal pasti isu dalam skrip anda.

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

echo "Debugging Bash script"

Dalam skrip Bash ini, the -x bendera membolehkan penyahpepijatan. Anda boleh menggunakan pendekatan yang sama dalam Zsh; ganti sahaja bash dengan zsh .

Pertimbangan untuk Memilih Antara Zsh dan Bash

  • Keserasian dan Kemudahalihan : Bash ialah cangkerang lalai pada banyak sistem berasaskan Unix. Ini menjadikannya pilihan yang lebih selamat untuk skrip merentas platform. Jika anda memerlukan skrip anda untuk dijalankan pada pelbagai sistem tanpa pengubahsuaian, Bash ialah pilihan yang lebih baik.
  • Kerumitan Skrip dan Ciri Lanjutan : Zsh menyediakan ciri lanjutan seperti tatasusunan bersekutu, corak globbing lanjutan dan pengembangan parameter lanjutan. Ini memudahkan tugas skrip yang kompleks. Jika skrip anda memerlukan manipulasi rentetan lanjutan atau struktur data, Zsh ialah pilihan yang lebih baik.
  • Ekosistem Komuniti dan Plugin : Kedua-dua Bash dan Zsh mempunyai komuniti yang aktif, tetapi Zsh mempunyai komuniti yang lebih kukuh dan ekosistem pemalam dan tema yang luas. Jika anda menghargai penyesuaian, komuniti bertenaga Zsh dan sokongan pemalam boleh menjadi kelebihan yang ketara.
  • Kemudahan Pembelajaran : Jika anda baru menggunakan skrip shell, Bash ialah titik permulaan yang lebih mudah diakses. Ia mempunyai dokumentasi dan sumber yang luas yang tersedia untuk pemula. Ini memudahkan untuk mempelajari asas skrip shell.

Mengautomasikan Tugas Menggunakan Skrip Shell

Mengetahui cara mengautomasikan tugas menggunakan skrip shell adalah sangat penting. Anda boleh mengautomasikan tugasan berulang dan menjimatkan banyak masa.

Anda juga boleh menggunakan skrip ini untuk mengurus akaun pengguna, memantau sumber sistem, menyandarkan data dan melakukan penyelenggaraan rutin. Apabila ditulis dengan teliti, ia juga boleh mengurangkan potensi kesilapan manusia.