Why care about the shell timeline?
You will read scripts written for sh in 1989 alongside zsh config files written last week. Knowing which shell each tool targets keeps you from copying a piece of bash-only syntax into a strict POSIX script and watching it explode in CI.
1979 — Bourne shell (sh)
Stephen Bourne wrote sh at Bell Labs to replace the original Thompson shell. It defined the syntax that everyone else cloned: pipes, if/then/fi, here-docs, environment variables, $?. When you write #!/bin/sh, you are asking for that minimal Bourne-flavored grammar — no arrays, no [[ ]], no fancy expansion.
1989 — Bourne Again (bash)
bash is the GNU project's free Bourne replacement. It absorbed ideas from Korn shell (ksh) and C shell (csh): history, command-line editing, arrays, [[ ]] conditionals, $(...) substitution. macOS used bash as the default from 10.3 (2003) until 10.15 (2019), but Apple froze the version at 3.2 because later releases switched to GPLv3.
1990 — Z shell (zsh)
Paul Falstad wrote zsh to be "bash plus everything good from the others." Better completion, recursive globbing (**), prompt themes, named directories, modular plugins via Oh-My-Zsh / Prezto / zinit. macOS Catalina (2019) made it the default login shell.
2005 — fish
fish ("friendly interactive shell") rejected POSIX compatibility on purpose. It has the smartest defaults of any shell — autosuggestions, syntax highlighting, sane scripting — but you cannot run a bash script verbatim. fish is for the prompt, not for portable scripts.
The rule of thumb
Use zsh (or fish) for your interactive prompt. Use bash or POSIX sh for scripts you ship to other machines. Never assume a script's interpreter — always set the shebang.
윈도우 환경에서 공부중이라 bash를 다루기 어렵지만, 이번 챕터에서 key point는 내가 작업할 때는 사용이 편한 fish와 같은거를 쓰고, 공유할 때는 범용성이 뛰어난 bash와같은 문법을사용해라.
즉 사용버전과 배포버전 각각의 환경(나의 환경과 제3자들의환경)이 다름을 인식하라는 것인가요?