ksh ve bash tamamen farklıdır, ancak bash ve sh ikili dosyaları çoğunlukla aynıdır. OS X's sh, bash'ın bir sürümüdür:
- Has POSIX modu sağladı. bash varsayılan olarak POSIX ile uyumlu değildir.
- Farklı başlatma davranışları vardır. Örneğin
sh -l
okumaz ~/.bash_profile/
.
- Xpg_echo varsayılan olarak etkindir. Yani
echo
böyle davranır echo -e
ve herhangi bir seçeneği desteklemez.
Varsayılan FCEDIT sh biçiminde, ancak EDITOR biçiminde veya bash biçiminde düzenlenir:
$ 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}}"
Kaynak http://opensource.apple.com/tarballs/ adresinden indirilebilir .
Gönderen adam bash :
Bash sh adıyla çağrılırsa, POSIX standardına da uyurken, sh'in eski sürümlerinin başlatma davranışını mümkün olduğunca yakından taklit etmeye çalışır.
Orijinal Bourne mermilerinin diğer yönlerini taklit etmiyor.
Orijinal Bourne mermileri artık korunmuyor ve / bin / sh artık sadece POSIX ile uyumlu başka bir mermi anlamına geliyor. OS X's sh , diğer platformlarda / bin / sh ile mutlaka çalışmayan bashisms'lerin kullanılmasına izin verir (Ubuntu'daki tire gibi).