ksh e bash sono completamente diversi, ma i binari bash e sh sono per lo più identici. OS X's sh è una versione di bash che:
- Ha la modalità POSIX abilitata. bash non è conforme a POSIX per impostazione predefinita.
- Ha un comportamento di avvio diverso. Ad esempio
sh -l
non legge ~/.bash_profile/
.
- Ha abilitato xpg_echo per impostazione predefinita. Quindi
echo
si comporta come echo -e
e non supporta alcuna opzione.
L'impostazione predefinita di FCEDIT è ma sh ma EDITOR o ed in 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}}"
La fonte può essere scaricata dal link .
Da man bash :
If bash is invoked with the name sh, it tries to mimic the startup behavior of historical versions of sh as closely as possible, while conforming to the POSIX standard as well.
Tuttavia non emula altri aspetti delle shell Bourne originali.
Le shell Bourne originali non sono più mantenute e / bin / sh ora è pensato per essere un'altra shell che sia conforme a POSIX. OS X's sh consente di utilizzare i bashisms che non necessariamente funzionano con / bin / sh su altre piattaforme (come dash su Ubuntu).