Debian และ Ubuntu เปลี่ยนไปใช้ dash (iirc) เพราะมีสองอย่าง ก่อนอื่น Bash กลายเป็นเรื่องใหญ่ในช่วงหลายปีที่ผ่านมา ในความเป็นจริง/bin/bash
ไบนารีในระบบ Ubuntu 8.04 ของฉันเกือบสิบเท่า (!) ใหญ่พอ/bin/dash
ๆ ตอนนี้มันไม่สำคัญมากสำหรับการใช้กระสุนแบบวันต่อวัน แต่มันก็มีความสำคัญในสถานการณ์ต่อไปนี้:
- Dash มีขนาดเล็กกว่ามากและโหลดเร็วกว่าซึ่งเป็นประโยชน์สำหรับสคริปต์เริ่มต้น หากคุณต้องเริ่มต้นมันเยอะ ๆ ให้โหลด Dash แทน Bash ในแต่ละครั้งเร่งความเร็วให้เร็วขึ้น
- เนื่องจากขนาดที่เล็กกว่าของเดเบียนเดเบียนและอูบุนตูจึงสามารถกำจัดก้อนอันใหญ่โตที่มีขนาดเล็กของพวกมันออกจากพื้นที่อื่น ๆ
ข้อเสียของการใช้ Dash แทนการทุบตีสำหรับการเขียนสคริปต์คือว่าคนจำนวนมากใช้ niceties การสร้างประโยคเพียงทุบตีได้ที่เรียกว่าBashisms ตัวอย่างของ Bashisms เป็นสตริงย่อยเช่นนี้
echo $SHELL
/bin/bash
a=1234567890
echo ${a}
1234567890
echo ${a:3}
4567890
echo ${a:3:1}
4
และนี่:
echo ${a#123}
4567890
Dash ในทางกลับกันส่วนใหญ่มีจุดมุ่งหมายที่จะเป็นไปตาม POSIX (และไม่มากไปกว่านั้น) จะทำให้คุณมีข้อผิดพลาดsubstition แย่หากคุณลองทำสิ่งนี้:
echo $SHELL
/bin/dash
# actually, it will read /bin/bash above, because if you just run dash
# it will not set the $SHELL variable :)
a=1234567890
echo ${a}
1234567890
echo ${a:3}
dash: Bad substitution
เรื่องนี้จะสำคัญถ้าคุณใช้/bin/sh
(และดังนั้นdash
) เป็นล่ามสำหรับเชลล์ของคุณและใช้ Bashisms ในพวกเขา Debian และ Ubuntu มีหน้า wiki ที่ดีเกี่ยวกับ Bashisms และทำไมพวกเขาถึงไม่ดีใน shellscripts โดยทั่วไปและสคริปต์ init โดยเฉพาะ ดังนั้นคุณควรเลือกอย่างมีสติว่าคุณต้องการ/bin/sh
หรือ/bin/bash
เป็นล่ามสำหรับสคริปต์ของคุณ
ไม่ควรใช้ Dash เป็นเชลล์เริ่มต้นในระบบของคุณ เพียงใช้ Bash สำหรับสิ่งนั้น เพื่อความสะดวกในการพกพาสคริปต์ของคุณคุณสามารถใช้ Dash ในฐานะล่ามเพื่อเพิ่มโอกาสที่สคริปต์จะรันบน Linux และ Unixes อื่น ๆ