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