Zsh กับ Bash Scripting ความแตกต่างคืออะไร?

Zsh กับ Bash Scripting ความแตกต่างคืออะไร?
ผู้อ่านเช่นคุณช่วยสนับสนุน MUO เมื่อคุณทำการซื้อโดยใช้ลิงก์บนเว็บไซต์ของเรา เราอาจได้รับค่าคอมมิชชั่นจากพันธมิตร อ่านเพิ่มเติม.

เมื่อพูดถึงเชลล์สคริปต์บนระบบปฏิบัติการที่เหมือน Unix เชลล์สองตัวจะมีอิทธิพลเหนือ: Bash (Bourne Again Shell) และ Zsh (Z Shell) หากคุณเป็นโปรแกรมเมอร์หรือผู้ดูแลระบบ ตัวเลือกระหว่างสองสิ่งนี้จะส่งผลต่อประสิทธิภาพและประสิทธิผลของคุณอย่างมาก





MUO วิดีโอประจำวันนี้ เลื่อนเพื่อดำเนินการต่อด้วยเนื้อหา

การทำความเข้าใจความแตกต่างและความคล้ายคลึงระหว่างเชลล์ทั้งสองนี้จะช่วยให้คุณเพิ่มประสิทธิภาพเวิร์กโฟลว์บรรทัดคำสั่งของคุณได้ การทราบถึงความแตกต่างของแต่ละเชลล์จะช่วยให้คุณมีข้อมูลประกอบการตัดสินใจได้





คุณเชื่อมต่อหูฟังบลูทูธกับ xbox one ได้ไหม

Bash และ Zsh คืออะไร?

Bash ได้รับความนิยมทั้งบนระบบ Linux และ macOS เป็นเครื่องมืออันทรงพลังที่คุณสามารถใช้เพื่อโต้ตอบกับระบบปฏิบัติการและรันคำสั่ง นอกจากนี้คุณยังสามารถ ใช้ Bash สำหรับการเขียนสคริปต์เชลล์ ซึ่งทำให้งานเป็นอัตโนมัติโดยการเขียนสคริปต์ที่มีมากกว่าหนึ่งคำสั่ง





Zsh (Z เชลล์) เป็นเวอร์ชันขยายของ 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 (พรอมต์หลัก)

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

พรอมต์ที่กำหนดเองด้านบนจะแสดงชื่อผู้ใช้ ชื่อโฮสต์ และไดเรกทอรีปัจจุบันด้วยสีต่างๆ:

  การปรับแต่งพร้อมท์ Zsh บนเทอร์มินัล

มีมากมาย วิธีอื่นๆ ในการปรับแต่งพรอมต์ Zsh ช่วยให้คุณสามารถตั้งค่าตัวบ่งชี้ผู้ดูแลระบบ รวมวันที่และเวลา และบันทึกพร้อมท์ใหม่

Bash ใช้วิธีการที่แตกต่างออกไปเล็กน้อยในการปรับแต่งแบบทันที ใช้รหัส Escape เพื่อระบุสีและการเปลี่ยนแปลงการจัดรูปแบบในพรอมต์ เพื่อให้บรรลุการปรับแต่งแบบเดียวกับ 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. รูปแบบ Globbing แบบขยาย

รูปแบบวงกลมที่ขยายออกไปทำให้มีวิธีที่มีประสิทธิภาพและยืดหยุ่นในการเลือกและจัดการไฟล์และไดเร็กทอรีตามเกณฑ์ต่างๆ มีประโยชน์เมื่อคุณทำงานกับโครงสร้างไฟล์ที่ซับซ้อน หรือเมื่อคุณต้องการการควบคุมการเลือกไฟล์อย่างแม่นยำ

ในสคริปต์ Zsh คุณสามารถเปิดใช้งานรูปแบบเหล่านี้ได้โดยใช้ ตั้งค่า สั่งการ. เช่น เพื่อให้ตรงกับทั้งหมด .txt ไฟล์ในไดเร็กทอรีปัจจุบัน:

 setopt extended_glob 
txt_files=(*.txt)

หากต้องการจับคู่ไฟล์ทั้งหมดยกเว้นไฟล์ที่มีนามสกุล .log:

วิธีค้นหาข้อความเก่าบน iphone โดยไม่ต้องเลื่อนหน้าจอ
 setopt extended_glob 
non_log_files=^(*.log)

ใน Bash คุณต้องเปิดใช้งานโดยใช้ไฟล์ ร้านค้า สั่งการด้วย extglob ตัวเลือก. เช่น เพื่อให้ตรงกับทั้งหมด .txt ไฟล์ในไดเร็กทอรีปัจจุบัน:

 shopt -s extglob 
txt_files=(*.txt)

เพื่อจับคู่ไฟล์ทั้งหมดยกเว้นไฟล์ที่มี .บันทึก ส่วนขยาย:

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

ความแตกต่างที่สำคัญระหว่าง Zsh และ Bash เมื่อพูดถึงรูปแบบ globbing คือคำสั่งที่ใช้ในการเปิดใช้งาน อย่างไรก็ตาม โปรดสังเกตว่าตัวดำเนินการบางตัวมีความแตกต่างกันระหว่างเชลล์ทั้งสอง

4. การขยายพารามิเตอร์ขั้นสูง

Zsh รองรับการขยายพารามิเตอร์ทางอ้อม ซึ่งจะทำให้คุณสามารถขยายค่าของตัวแปรที่มีชื่อเก็บไว้ในตัวแปรอื่นได้ เพื่อให้บรรลุเป้าหมายนี้ คุณต้องใส่เครื่องหมายอัศเจรีย์นำหน้าชื่อตัวแปร ! .

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

ในทางกลับกัน Bash ไม่อนุญาตให้มีการขยายทางอ้อมโดยกำเนิด วิธีแก้ปัญหาสำหรับสิ่งนี้คือการใช้ ประเมินผล คำสั่งในตัวหรือ ${!เป็น} ไวยากรณ์สำหรับการอ้างอิงตัวแปรทางอ้อม

 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 นำเสนอคุณสมบัติขั้นสูง เช่น อาร์เรย์ที่เชื่อมโยง รูปแบบ Globbing ที่ขยาย และการขยายพารามิเตอร์ขั้นสูง สิ่งนี้ทำให้งานสคริปต์ที่ซับซ้อนง่ายขึ้น หากสคริปต์ของคุณต้องการการจัดการสตริงหรือโครงสร้างข้อมูลขั้นสูง Zsh เป็นตัวเลือกที่ดีกว่า
  • ระบบนิเวศชุมชนและปลั๊กอิน : ทั้ง Bash และ Zsh มีชุมชนที่กระตือรือร้น แต่ Zsh มีชุมชนที่แข็งแกร่งกว่าและระบบนิเวศที่กว้างขวางของปลั๊กอินและธีม หากคุณให้ความสำคัญกับการปรับแต่งชุมชนที่มีชีวิตชีวาของ Zsh และการสนับสนุนปลั๊กอินอาจเป็นข้อได้เปรียบที่สำคัญ
  • ความง่ายในการเรียนรู้ : หากคุณยังใหม่กับการเขียนเชลล์สคริปต์ Bash เป็นจุดเริ่มต้นที่เข้าถึงได้ง่ายกว่า มีเอกสารและแหล่งข้อมูลมากมายสำหรับผู้เริ่มต้น ทำให้ง่ายต่อการเรียนรู้พื้นฐานของเชลล์สคริปต์

งานอัตโนมัติโดยใช้เชลล์สคริปต์

การรู้วิธีการทำงานอัตโนมัติโดยใช้เชลล์สคริปต์มีความสำคัญอย่างยิ่ง คุณสามารถทำงานซ้ำๆ โดยอัตโนมัติและประหยัดเวลาได้มาก

windows หยุดกระบวนการที่สำคัญของรหัสตาย

คุณยังสามารถใช้สคริปต์เหล่านี้เพื่อจัดการบัญชีผู้ใช้ ตรวจสอบทรัพยากรระบบ สำรองข้อมูล และดำเนินการบำรุงรักษาตามปกติ เมื่อเขียนอย่างระมัดระวัง ยังช่วยลดโอกาสที่จะเกิดข้อผิดพลาดจากมนุษย์ได้อีกด้วย