Apple이 기본 셸을 바꾼 데는 라이선스 배경이 있어
Bash 4.0은 2009년에 GPLv3로 출시됐어. Apple은 특허 조항과 사용 제한을 금지하는 의무(anti-tivoization)를 운영체제 공급자 관점에서 부담으로 봤어. 그래서 macOS의 시스템 bash는 GPLv2로 배포된 마지막 버전인 3.2 계열에 십 년 넘게 머물렀고, 2019년에는 이미 12년 된 bash였지. macOS Catalina부터는 기본 로그인 셸을 허용 범위가 넓은 자체 라이선스의 zsh로 바꿨어.
bash 3.2 대비 zsh가 주는 것
- 자동 완성 엔진은
compinit과 커뮤니티의 자동 완성 정의를 사용해.git뒤에서 Tab을 누르면 브랜치가,kubectl뒤에서는 pod가 후보로 보여. - 재귀 글로브 확장은
**/*.py로 현재 디렉터리 아래의 모든 Python 파일을 찾을 수 있어서 단순한 경우에는find가 필요 없어. - 글로브 한정자는
*(.om[1])처럼 파일 종류와 정렬 조건을 글로브에 붙여 가장 최근에 수정된 일반 파일을 바로 고를 수 있어. - 테마를 적용한 프롬프트는 Powerlevel10k, Starship이나 Pure를 쓰면 Git 브랜치, Python 가상 환경과 Kubernetes 맥락을 프롬프트에 표시할 수 있어.
- 플러그인 생태계에서는 Oh My Zsh, Prezto나 zinit을 통해 자동 제안, 구문 강조와 명령 기록 검색을 선택해서 붙일 수 있어.
bash에서 그대로 가져온 것
대화형 bash에서 익힌 $(...), [[ ]], $?, $0, 히어독, set -e와 배열은 zsh에서도 대부분 그대로 쓸 수 있어. 차이는 단어 분리, 글로브 동작, read 옵션과 배열 인덱스의 시작점에서 나타나. zsh 배열은 기본적으로 1부터 시작하며 자세한 내용은 스크립팅 트랙에서 다뤄.
스크립트는 zsh? bash?
내 컴퓨터에서만 실행하는 스크립트라면 zsh를 선택해도 돼. 서버, 컨테이너, CI 실행기나 다른 개발자의 컴퓨터에서도 돌려야 한다면 대상 환경에 실제로 있는 bash 또는 POSIX sh를 선택해야 해. 어떤 셸이든 shebang과 본문 문법이 일치해야 해.
실행중인 셸이 무엇인지 ECHO $SHELL을 써서 확인하라는 것이군요. 또한 맥 OS 에서는 ZSH가 도입되었으니 그의 문법을 배워라