ksh dan bash benar-benar berbeda, tetapi biner bash dan sh sebagian besar identik. OS X's sh adalah versi bash yang:
- Apakah mode POSIX diaktifkan. bash tidak mematuhi POSIX secara default.
- Memiliki perilaku startup yang berbeda. Misalnya
sh -l
tidak membaca ~/.bash_profile/
.
- Apakah xpg_echo diaktifkan secara default. Jadi
echo
bertingkah seperti echo -e
dan tidak mendukung opsi apa pun.
FCEDIT default adalah ed di sh tetapi EDITOR atau ed di bash:
$ diff -y --suppress-common-lines -W 80 <(strings /bin/bash) <(strings /bin/sh)
> /bin/bash
${FCEDIT:-${EDITOR:-ed}} | ${FCEDIT:-ed}
@(#)PROGRAM:bash PROJECT:bash-86.1 | @(#)PROGRAM:sh PROJECT:bash-86.1
$ grep -rF '${FCEDIT:-${EDITOR:-ed}}' ~/Code/Source/bash-86.1/
bash-86.1/bash-3.2/builtins/fc.c:# define POSIX_FC_EDIT_COMMAND "${FCEDIT:-${EDITOR:-ed}}"
bash-86.1/bash-3.2/builtins/fc.def:# define POSIX_FC_EDIT_COMMAND "${FCEDIT:-${EDITOR:-ed}}"
Sumber dapat diunduh dari http://opensource.apple.com/tarballs/ .
Dari man bash :
Jika bash dipanggil dengan nama sh, ia mencoba untuk meniru perilaku startup versi historis sh sedekat mungkin, sementara menyesuaikan dengan standar POSIX juga.
Itu tidak meniru aspek lain dari kulit Bourne asli.
Shell Bourne asli tidak lagi dipertahankan, dan / bin / sh sekarang dimaksudkan untuk menjadi beberapa shell lain yang hanya sesuai dengan POSIX. OS X's sh memungkinkan penggunaan bashisms yang tidak selalu berfungsi dengan / bin / sh pada platform lain (seperti dash pada Ubuntu).