셸의 종류와 계보
셸의 종류와 계보
셸 (shell) 은 사용자의 입력을 해석해 운영체제에 전달하는 인터프리터입니다. 같은 운영체제 위에서도 여러 셸을 골라 쓸 수 있고, 셸마다 문법과 기능이 조금씩 다릅니다.
1. 셸에 대한 이야기
운영체제 커널은 시스템 호출 (system call) 을 통해 동작합니다. 일반 사용자가 매번 시스템 호출을 직접 부르기는 번거로우므로, 명령어를 입력받아 프로그램을 실행해 주는 중간 계층이 필요합니다. 그 역할을 하는 프로그램이 셸.
셸은 대화형 (REPL) 으로도 쓰이고, 스크립트 파일로 일괄 실행되기도 합니다. 둘 다 같은 인터프리터가 처리.
2. Unix 계보
Unix 셸의 계보는 1971 년의 Thompson shell 까지 거슬러 올라갑니다.
| 셸 | 출시 | 특징 |
|---|---|---|
| sh (Bourne shell) | 1977 | Stephen Bourne. Unix V7 의 표준. POSIX sh 의 기준. |
| csh | 1978 | Bill Joy. C 문법을 닮음. 스크립팅에는 함정. |
| ksh (KornShell) | 1983 | David Korn. csh 의 대화 기능과 sh 의 문법 결합. |
| bash | 1989 | Brian Fox. GNU 프로젝트의 sh 호환. Linux 의 사실상 기본. |
| zsh | 1990 | Paul Falstad. ksh/bash 호환 + 강력한 자동완성. macOS 10.15+ 기본. |
| fish | 2005 | "Friendly Interactive Shell". POSIX 비호환 의도적. |
Linux 배포판은 보통 bash 를 사용자 셸로 두고, /bin/sh 는 dash (Debian Almquist Shell) 같은 가벼운 POSIX sh 로 연결.
3. POSIX 표준의 위치
POSIX (Portable Operating System Interface) 는 IEEE 가 1988 년부터 표준화한 Unix 계열 OS 인터페이스 규격. 그 일부로 셸 명령 언어 (POSIX sh) 가 정의돼 있습니다.
bash · zsh · ksh 같은 현대 셸은 POSIX sh 의 상위 집합. POSIX sh 로 작성한 스크립트는 대체로 어디서든 동작하지만, bash 전용 확장 ([[ ]] · 배열) 은 dash 같은 엄격한 sh 에서 깨집니다. #!/bin/sh 로 시작하는 스크립트는 POSIX 범위 안에 머무는 편이 안전.
4. Windows 계보
| 셸 | 출시 | 특징 |
|---|---|---|
| COMMAND.COM | 1981 (MS-DOS 1.0) | DOS 시절의 16비트 명령 처리기. |
| cmd.exe | 1993 (Windows NT 3.1) | NT 계열의 32/64비트. .bat/.cmd 실행. |
| Windows PowerShell | 2006 | .NET Framework 기반. 객체 지향 셸. Windows 7+ 기본. |
| PowerShell 7+ | 2020 | .NET Core (이후 .NET 5+) 기반. 크로스플랫폼. |
PowerShell 의 명령 단위는 cmdlet — Verb-Noun 명명 (Get-Process · Set-Item).
5. 객체 파이프 vs 텍스트 파이프
bash 계열의 파이프 | 는 표준출력의 텍스트 바이트를 다음 명령의 표준입력으로 흘려보냅니다.
ps -ef | grep node | awk '{print $2}'
PowerShell 의 파이프는 .NET 객체를 흘려보냅니다. 다음 단계는 객체의 속성에 직접 접근:
Get-Process | Where-Object { $_.Name -eq "node" } | Select-Object -ExpandProperty Id
두 모델은 표현력의 결이 다릅니다. 텍스트 파이프는 어떤 도구든 결합하기 쉽고 이식성이 높음. 객체 파이프는 구조화된 데이터에서 안전하고 정확.
6. 어디서 무엇이 기본인가
- macOS 10.15+ — zsh.
- macOS 10.14- — bash 3.2 (Apple 이 GPLv3 회피로 업그레이드 중단).
- 대부분의 Linux — 사용자 셸 bash,
/bin/sh는 dash 또는 bash 의 sh 모드. - Windows 10/11 — PowerShell + cmd.exe. Windows Terminal 이 호스트.
- WSL2 — 내부는 일반 Linux 와 동일.
7. 대화형 vs 스크립트
셸은 두 가지 얼굴:
- 대화형 (interactive) — 사람이 직접 명령을 치는 환경. 자동완성·히스토리·프롬프트·테마.
- 비대화형 (스크립트) — 파일에 적힌 명령을 일괄 실행. 안정성·이식성·에러 처리.
zsh 와 fish 는 대화형 편의에 강점, bash 와 dash 는 스크립트 호환성에 강점. 사용자가 zsh 로 평소에 일하면서 자동화 스크립트는 bash 로 적는 조합이 흔합니다.
8. 셸을 바꾸는 법
| 작업 | macOS/Linux | Windows |
|---|---|---|
| 사용 가능한 셸 목록 | cat /etc/shells |
(Windows Terminal 프로필) |
| 기본 셸 변경 | chsh -s /bin/zsh |
Windows Terminal 설정 default profile |
| 현재 셸 확인 | echo $SHELL |
$PSVersionTable.PSVersion (PowerShell) |
9. 자주 걸리는 자리
bash 전용 문법 ([[ · 배열 · <<<) 을 #!/bin/sh 스크립트에 적은 경우 — dash 환경에서 깨짐.
macOS 의 bash 가 3.2 라 최신 bash 4/5 의 연관 배열 · mapfile 같은 기능을 못 쓰는 경우 — Homebrew 로 새 bash 를 설치해 #!/usr/bin/env bash 로 우회.
PowerShell 5.1 와 7+ 의 차이 — 5.1 은 && · || 가 없고 객체 출력이 다른 부분.
fish 는 POSIX 비호환 — 다른 셸 스크립트가 그대로 돌지 않습니다. fish 사용자가 bash 스크립트를 실행할 때는 bash script.sh 로 인터프리터를 명시.
하고픈 말
셸 선택은 대화형 편의 (zsh · fish) 와 스크립트 호환성 (bash · dash) 의 두 자리에서 결정됩니다. 두 셸을 함께 쓰는 모양 — 평소는 zsh, 자동화는 #!/usr/bin/env bash — 이 가장 자주 보이는 운영 결.
Next
- bash-and-sh
- powershell-basics
GNU Bash Manual · zsh 문서 · POSIX Shell (IEEE 1003.1) · Microsoft PowerShell · Wikipedia 셸 비교 를 참고합니다.