Debian và Ubuntu chuyển sang dash (iirc) vì một vài điều. Trước hết, Bash đã trở nên lớn trong những năm qua. Trên thực tế, /bin/bash
hệ số nhị phân trên hệ thống Ubuntu 8.04 của tôi lớn gần gấp mười lần (!) /bin/dash
. Bây giờ, điều đó không quan trọng lắm đối với việc sử dụng vỏ hàng ngày, nhưng nó quan trọng trong các tình huống sau:
- Dash nhỏ hơn nhiều và do đó tải nhanh hơn, đó là một lợi ích cho init-scripts. Nếu bạn phải bắt đầu rất nhiều trong số chúng, hãy tải Dash thay vì Bash mỗi lần, tăng tốc mọi thứ lên đáng kể.
- Do kích thước nhỏ hơn của Dash, Debian và Ubuntu có thể loại bỏ một khối khá lớn kích thước của initrd của chúng, để lại nhiều chỗ hơn cho các thứ khác (và một lần nữa, tăng tốc mọi thứ).
Nhược điểm của việc sử dụng Dash thay vì Bash cho kịch bản, là rất nhiều người sử dụng các cú pháp cú pháp chỉ Bash có, cái gọi là Bashism . Ví dụ về Bashism là các chuỗi con, như thế này:
echo $SHELL
/bin/bash
a=1234567890
echo ${a}
1234567890
echo ${a:3}
4567890
echo ${a:3:1}
4
Và cái này:
echo ${a#123}
4567890
Mặt khác, Dash chủ yếu nhằm mục đích tuân thủ POSIX (và không hơn thế), sẽ gây ra lỗi cho trạm biến áp xấu nếu bạn thử điều này:
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
Điều này sẽ có vấn đề nếu bạn sử dụng /bin/sh
(và do đó dash
) làm thông dịch viên cho các bản sao của bạn và sử dụng Bashism trong chúng. Debian và Ubuntu có các trang wiki hay về Bashism và tại sao chúng lại tệ trong các bản mô tả nói chung và các tập lệnh init nói riêng. Do đó, bạn nên có ý thức lựa chọn xem bạn cần /bin/sh
hay /bin/bash
là người phiên dịch cho kịch bản của bạn.
Dash không được sử dụng làm vỏ mặc định trên hệ thống của bạn. Chỉ cần sử dụng Bash cho điều đó. Đối với tính di động của các tập lệnh của bạn, bạn có thể sử dụng Dash làm trình thông dịch để tăng tỷ lệ cược các tập lệnh sẽ chạy trên các hương vị Linux và Unix khác.