답변:
당신의 기본 가정이 잘못되었다고 생각합니다. 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/ 에서 다운로드 할 수 있습니다 .
에서 남자 bash는 :
bash가 sh라는 이름으로 호출되면 POSIX 표준도 준수하면서 sh의 히스토리 버전 시작 동작을 최대한 가깝게 모방하려고합니다.
그러나 원래 Bourne 쉘의 다른 측면을 모방하지는 않습니다.
원래 Bourne 쉘은 더 이상 유지 보수되지 않으며 / bin / sh는 이제 POSIX를 준수하는 다른 쉘이됩니다. OS X의 sh는 다른 플랫폼에서 우분투의 대시와 같이 / bin / sh와 반드시 작동하지 않는 bashism 을 사용할 수 있습니다 .