Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

나에게 맞는 Linux 셸 고르기: Bash vs Zsh vs Fish 완벽 비교

터미널을 열면 아마도 UNIX 셸 환경으로 Bash를 사용하고 있을 가능성이 높습니다. 하지만 Bash 외에도 다양한 '셸' 환경이 존재한다는 사실, 알고 계셨나요?

C Shell, Korn Shell, Z Shell, 심지어 Fish Shell까지 여러 환경이 있습니다. 이들 셸은 각각 고유한 장단점을 지니고 있기 때문에, 자신의 시스템에 어떤 셸을 사용할지 결정하기 전에 충분히 비교해 보는 것이 좋습니다.

이 글에서는 가장 인기 있는 셸 세 가지의 주요 특징과 차이점을 살펴보고, 여러분의 개발 환경에 꼭 맞는 셸을 선택하는 데 도움을 드리겠습니다.

Bash 셸이란?

Bash(Bourne Again Shell)는 UNIX 셸이자 명령 언어입니다. Brian Fox가 GNU 프로젝트를 위해 기존 Bourne 셸(sh)의 무료 대체제로 개발했으며, 1989년 처음 공개되었습니다. 현재 대부분의 Linux 배포판에서 기본 셸로 채택되어 있으며, Kali Linux처럼 Zsh를 기본 셸로 사용하는 경우도 있습니다.

재미있는 사실 하나! Bash는 Linux 창시자 Linus Torvalds가 Linux 커널로 포팅한 최초의 프로그램 중 하나입니다.

주의할 점은 Bash가 단순한 셸이 아니라 프로그래밍 언어이기도 하다는 것입니다. 즉, Bash 자체로 동작을 스크립팅할 수 있습니다. 예를 들면 다음과 같습니다.

#!/bin/bash
echo "Hello World"

Bash의 주요 특징

  • 대부분의 시스템에서 기본 셸이므로 사용자층이 가장 넓습니다
  • 인라인 와일드카드 표현식을 지원하지 않습니다. 와일드카드는 Regex처럼 셸에서 패턴을 검색할 때 쓰이며, 주요 와일드카드는 *, ?, [] 세 가지입니다
  • 디렉터리 이름을 자동으로 변경할 수 없습니다
  • 스크립트 내에서 #은 주석으로 처리됩니다
  • shopt 설정 기능을 제공합니다
  • 프롬프트에서 백슬래시 이스케이프를 사용합니다
  • 사용자 설정은 .bashrc 파일에 저장됩니다

Z Shell(Zsh)이란?

Zsh 역시 UNIX 셸로, Bash와 매우 유사하게 스크립팅과 명령 해석이 가능합니다. Bourne 셸을 확장해 만든 셸로 많은 개선 사항이 담겨 있으며, 1990년 Paul Falstad가 공개했습니다. Bash, Korn Shell, C Shell의 기능 일부를 함께 갖추고 있는 것이 특징입니다.

참고로 macOS는 기본 셸로 Zsh를 사용합니다.

Zsh의 주요 특징

  • 강력한 자동 완성: 터미널에서 Tab 키를 누르면 명령어를 완성해 줄 뿐만 아니라, 입력 가능한 파일과 디렉터리 전체를 드롭다운 목록으로 보여줍니다

나에게 맞는 Linux 셸 고르기: Bash vs Zsh vs Fish 완벽 비교

  • 인라인 와일드카드 표현식을 지원합니다
  • Bash보다 훨씬 세밀하게 설정을 조정할 수 있습니다
  • 다양한 플러그인과 테마 생태계를 지원합니다

Zsh에는 전용 프레임워크도 존재합니다. 그중 가장 유명한 것이 바로 Oh My Zsh로, Zsh 구성을 손쉽게 관리할 수 있게 돕는 커뮤니티 기반 오픈소스 프레임워크입니다.

헷갈리기 쉬운 부분을 짚고 넘어가겠습니다. Zsh와 Oh My Zsh는 비슷해 보이지만 서로 다른 것입니다. Oh My Zsh는 어디까지나 Zsh 설정을 관리하는 도구일 뿐, 셸 그 자체가 아닙니다.

Fish Shell이란?

Fish(Friendly Interactive SHell)는 상호작용성과 사용 편의성에 초점을 맞춘 UNIX 셸입니다. Zsh처럼 사용자가 직접 설정을 손봐야 하는 대신, 설치만 하면 기본적으로 인터랙티브한 기능을 바로 누릴 수 있다는 점이 큰 차별점입니다.

Fish는 Axel Liljencrantz가 2005년에 만들었으며, POSIX 셸 표준을 따르지 않기 때문에 '이색적인 셸(exotic shell)'로 분류됩니다.

Fish의 주요 특징

  • 입력하면서 검색하는 자동 제안: 명령어 기록과 현재 위치한 디렉터리를 기반으로 실시간 추천을 제공합니다. Bash의 기록 검색과 비슷하지만, Fish는 이 기능이 항상 켜져 있어 터미널 작업 내내 실시간 피드백을 받을 수 있습니다
  • 문법보다는 기능을 '명령어' 형태로 제공해, 옵션과 도움말 텍스트로 직관적으로 확인할 수 있습니다
  • 기본 설정이 잘 갖춰진 상태로 제공되므로, Zsh 등 다른 sh 계열보다 초보자 친화적이라는 평가를 받습니다
  • 스크립팅 언어가 Bash·Zsh와 다릅니다. Zsh는 별칭(alias)을 많이 활용하는 반면, Fish는 스크립트에서 별칭 사용을 지양합니다

cd, cp, vim, ssh 같은 기본 명령어만으로 스크립트를 작성한다면 Fish와 Bash의 차이를 크게 체감하지 못할 수도 있습니다.

그러나 명령 출력을 변수에 담을 때는 확연한 차이가 드러납니다. Bash에서는 익숙한 방식이 다음과 같습니다.

todays_date=$(date)
echo "Todays date is $todays_date"

나에게 맞는 Linux 셸 고르기: Bash vs Zsh vs Fish 완벽 비교

Todays Date is Tue Dec 13 15:29:28 CST 2022

반면 Fish에서는 출력 캡처 문법이 다르게 동작합니다. 동일한 작업을 Fish로 작성하면 다음과 같습니다.

set date (date)
echo "Todays Date $date"
todays date is Tue Dec 13 21:35:03 UTC 2022

결론: 어떤 셸을 선택해야 할까?

Bash, Zsh, Fish는 저마다의 장점과 공통점을 지닌 훌륭한 셸입니다. 각 셸의 성격을 파악했으니, 이제 자신의 작업 환경에 맞게 골라 쓸 준비가 되셨을 겁니다.

  • 높은 설정 유연성이 필요하다면 → Zsh(혹은 Oh My Zsh 설치)
  • 복잡한 설정 없이 인터랙티브한 터미널을 원한다면 → Fish Shell
  • 클래식하고 안정적인 느낌을 선호한다면 → Bash 그대로 사용

결국 최고의 셸이란 정해져 있지 않습니다. 개발자인 여러분의 취향과 워크플로우에 가장 잘 맞는 셸을 선택하는 것이 정답입니다.