回答:
あなたの基本的な仮定は間違っていると思います。10.8.3の確認:
pse@Fourecks:~$ ls -l $(type -p sh bash ksh)
-r-xr-xr-x 1 root wheel 1333920 Oct 16 2012 /bin/bash*
-r-xr-xr-x 1 root wheel 1380304 Oct 16 2012 /bin/ksh*
-r-xr-xr-x 1 root wheel 1334000 Oct 16 2012 /bin/sh*
pse@Fourecks:~$ cmp -l $(type -p sh bash) | wc -l
cmp: EOF on /bin/bash
1138124
pse@Fourecks:~$ cmp -l $(type -p sh ksh) | wc -l
cmp: EOF on /bin/sh
1238180
技術的には、との間にいくつかの類似点がsh
ありますbash
(そして、後者ものように動作させることができますsh
)がksh
、最終的には別のソースベースからのものです。
kshとbashは完全に異なりますが、bashとshのバイナリはほとんど同じです。OS Xのshはbashのバージョンで、次のことを行います。
sh -l
は読みません~/.bash_profile/
。echo
ようecho -e
に動作し、オプションをサポートしていません。デフォルトのFCEDITはshで編集されていますが、EDITORまたは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}}"
ソースはhttp://opensource.apple.com/tarballs/からダウンロードできます。
man bashから:
bashがshという名前で呼び出された場合、POSIX標準にも準拠しながら、shの過去のバージョンの起動時の動作をできるだけ模倣しようとします。
ただし、オリジナルのBourneシェルの他の側面はエミュレートしません。
元のBourneシェルは維持されなくなり、/ bin / shはPOSIXに準拠する他のシェルになるようになりました。OS Xのshでは、他のプラットフォーム(Ubuntuのダッシュのような)で/ bin / shと必ずしも連動しないバシズムを使用できます。