sh có thể có nghĩa là vỏ Bourne hoặc / bin / sh, là một số vỏ khác (phù hợp với POSIX) trên hầu hết các nền tảng hiện đại. "Shell POSIX" là shell trừu tượng được xác định bởi POSIX , được triển khai bằng bash ở chế độ POSIX hoặc ksh hoặc dash theo mặc định. / bin / sh đôi khi cũng được gọi là vỏ POSIX, vì đó là vỏ phù hợp với POSIX trên hầu hết các nền tảng. Các vỏ Bourne ban đầu không phải là vỏ POSIX.
bashref có một danh sách các khác biệt giữa bash và Bourne shell . man bash
có một danh sách các thay đổi khi bash được gọi trong chế độ POSIX .
/ bin / sh không phải là liên kết tượng trưng hoặc liên kết cứng trên OS X, nhưng nó có cùng kích thước với / bin / bash:
$ ls -li /bin/{ba,}sh
29631757 -r-xr-xr-x 1 root wheel 1333920 Jul 26 01:52 /bin/bash
29631758 -r-xr-xr-x 1 root wheel 1334000 Jul 26 01:52 /bin/sh
người đàn ông bash :
Nếu bash được gọi với tên sh, nó sẽ cố gắng bắt chước hành vi khởi động của các phiên bản lịch sử của sh càng gần càng tốt, đồng thời tuân thủ tiêu chuẩn POSIX.
Việc bắt chước của vỏ Bourne là khá hạn chế. bash +B
(Bourne) thực sự sẽ vô hiệu hóa các tính năng như mở rộng cú đúp.
$ sh
$ echo {a,b}
a b
$ echo $BASH_VERSION
3.2.48(1)-release
$ bash +B
$ echo {a,b}
{a,b}
Nhưng ngay cả khi bạn tắt chế độ POSIX, echo vẫn hoạt động như echo -e
mặc định:
$ sh
$ shopt -uo posix
$ echo '1\b2'
2
/ bin / sh là dấu gạch ngang trên Ubuntu , vì vậy một số bashism hoạt động với / bin / sh trên OS X nhưng không phải Ubuntu.
Nếu bạn thực sự muốn viết các kịch bản cho (giống như) các vỏ Bourne ban đầu, bạn có thể sử dụng #!/usr/bin/env bash +B
thay thế.
Tôi nghĩ việc viết tập lệnh cho bash dễ dàng hơn là tránh các tính năng không phải là một phần của thông số kỹ thuật POSIX hoặc shell Bourne hoặc kiểm tra mọi thứ với các shell khác.
sh
vàbash
): http://en.wikipedia.org/wiki/Comparison_of_command_shells