sh dapat berarti shell Bourne atau / bin / sh, yang merupakan shell (POSIX-conformant) lainnya pada kebanyakan platform modern. "Shell POSIX" adalah shell abstrak yang didefinisikan oleh POSIX , yang diimplementasikan oleh bash dalam mode POSIX, atau ksh atau dash secara default. / bin / sh kadang-kadang juga disebut shell POSIX, karena itu adalah shell yang sesuai dengan POSIX pada kebanyakan platform. Kerang Bourne asli bukan kerang POSIX.
bashref memiliki daftar perbedaan antara bash dan cangkang Bourne . man bash
memiliki daftar perubahan saat bash dipanggil dalam mode POSIX .
/ bin / sh bukan symlink atau hard link pada OS X, tapi ukurannya hampir sama dengan / 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
man bash :
Jika bash dipanggil dengan nama sh, ia mencoba untuk meniru perilaku startup dari versi historis sh sedekat mungkin, sambil menyesuaikan dengan standar POSIX juga.
Peniruan cangkang Bourne sebaliknya sangat terbatas. bash +B
(Bourne) sebenarnya akan menonaktifkan fitur seperti ekspansi brace.
$ sh
$ echo {a,b}
a b
$ echo $BASH_VERSION
3.2.48(1)-release
$ bash +B
$ echo {a,b}
{a,b}
Tetapi bahkan jika Anda menonaktifkan mode POSIX, gema berperilaku seperti echo -e
secara default:
$ sh
$ shopt -uo posix
$ echo '1\b2'
2
/ bin / sh adalah dash pada Ubuntu , jadi beberapa bashism bekerja dengan / bin / sh pada OS X tetapi tidak Ubuntu.
Jika Anda benar-benar ingin menulis skrip untuk (sesuatu seperti) shell Bourne asli, Anda bisa menggunakannya #!/usr/bin/env bash +B
.
Saya pikir lebih mudah menulis skrip untuk bash daripada menghindari fitur yang bukan bagian dari spesifikasi POSIX atau cangkang Bourne atau menguji semuanya dengan cangkang lain.
sh
danbash
): http://en.wikipedia.org/wiki/Comparison_of_command_shells