유닉스 기반 운영 체제에서 스크립팅 목적으로 셸을 선택하는 것은 프로그래머와 시스템 관리자 모두에게 생산성과 효율성 모두에 영향을 미칠 수 있으므로 결정에 따라 상당한 결과를 초래할 수 있습니다. 가장 일반적으로 사용되는 옵션으로는 본 어게인 셸이라고도 하는 Bash와 Z 셸이라고도 하는 Zsh가 있습니다.

Bash와 Zsh의 차이점과 대응 관계를 포괄적으로 이해하면 최적화된 워크플로 관리를 통해 명령줄 작업을 탐색하는 숙련도를 크게 향상시킬 수 있습니다. 두 셸의 복잡성에 대해 잘 알고 있으면 개인이 자신의 필요에 가장 적합한 셸을 선택할 때 근거에 입각한 판단을 내릴 수 있습니다.

Bash와 Zsh란 무엇인가요?

Bash는 Linux 및 macOS 시스템과 같은 다양한 플랫폼에서 널리 사용되고 있습니다. 모든 것을 포괄하는 유틸리티로서 사용자는 운영 체제와 인터페이스하고 명령을 쉽게 실행할 수 있습니다. 또한 Bash는 단일 스크립트 내에서 여러 명령어를 결합하여 반복적인 작업을 자동으로 수행하는 셸 스크립팅 기능을 제공합니다.

Bash의 포괄적이고 고급화된 반복 기능인 Zsh는 이전 버전과 차별화되는 다양한 추가 기능을 자랑합니다. Apple의 macOS 플랫폼의 표준 셸인 Zsh는 이러한 맥락에서 널리 사용되고 있습니다. 또한 Zsh는 향상된 기능과 다용도로 인해 Linux 사용자들 사이에서 선호되는 선택으로 주목을 받고 있습니다.

Bash에서 Zsh로 전환하는 방법

Linux 기반 운영 체제 사용에서 원활하게 전환하고 선호하는 셸로 Zsh를 선택하려면 지정된 패키지 관리자를 사용하여 설치를 용이하게 하는 것부터 시작하세요. 특히 데비안 또는 우분투 시스템에서 작업할 때는 다음 명령을 실행하세요:

 sudo apt install zsh 

설치 후 애플리케이션을 사용하려면 터미널 또는 명령 프롬프트에서 다음 지시어를 실행하세요:

 chsh -s $(which zsh) 

macOS에서 Zsh로 전환하려면 운영 체제에 사전 설치된 터미널 애플리케이션을 사용하여 특정 명령을 실행하면 됩니다. 다른 기본 셸에서 Zsh로 전환하려면 아래에 제공된 지정된 명령어를 입력하기만 하면 됩니다.

 chsh -s /bin/zsh 

Zsh 대신 Bash 셸을 사용하도록 되돌리려면 앞서 제공된 명령줄 지침을 “Zsh”를 “Bash”로 대체하여 수정해야 합니다.

현재 사용 중인 셸을 확인하려면 다음 지시문을 실행하면 됩니다:

 echo $SHELL 

이 방법을 사용하면 원하는 셸이 사용되고 있는지 확인할 수 있으므로 사용자가 의도한 환경에서 작업하고 있는지 확인할 수 있습니다.

Zsh와 Bash의 차이점

Zsh와 Bash는 그 자체로 널리 사용되는 셸이지만, 둘 중 하나를 선택할 때 사용자의 결정에 영향을 줄 수 있는 뚜렷한 차이점이 있습니다. 이러한 차이점을 고려하면 개인의 선호도와 요구사항에 가장 적합한 셸을 결정하는 데 도움이 될 수 있습니다.

이 글도 확인해 보세요:  Rust에서 기본 HTTP 웹 서버를 빌드하는 방법

프롬프트 사용자 지정

Zsh에서 % 기반 이스케이프 시퀀스를 활용하면 명령줄 프롬프트를 보다 능률적으로 개인화할 수 있습니다. 이러한 이스케이프 시퀀스를 사용하면 프롬프트에 색상과 관련 정보를 통합할 수 있습니다. 셸의 기본 프롬프트를 맞춤 설정하려면 PS1 변수를 설정해야 합니다.

 PS1="%F{green}%n@%m %F{blue}%~ %f$ "

앞서 언급한 사용자 지정 프롬프트는 사용자의 닉네임, 도메인 이름 및 현재 작업 폴더를 다양한 색상으로 표시합니다.

관리 기호 통합, 현재 날짜 및 시간 표시, 프롬프트에 대한 수정 사항 보존 등 Zsh 프롬프트의 다양한 측면을 맞춤 설정할 수 있습니다.

다른 셸은 명령줄 인터페이스의 모양을 변경하기 위해 다양한 방법을 사용할 수 있지만, Bash는 프롬프트 자체 내에서 색상과 서식을 수정하기 위해 이스케이프 시퀀스를 포함하는 대체 전략을 사용합니다. Zsh에서 제공하는 개인화 수준을 재현하기 위해 다음과 같은 맞춤형 프롬프트 구성을 사용할 수 있습니다.

 PS1="\[\033[32m\]\u@\h \[\033[34m\]\w \[\033[0m\]\$ "

이스케이프 시퀀스 \[\\033[0m\]을 활용하면 프롬프트에 적용된 색상 변경으로 인한 간섭을 방지하여 후속 텍스트의 무결성을 유지하는 데 중추적인 역할을 합니다.

연관 배열 지원

Zsh의 기본 기능인 연관 배열은 키와 값을 연결하여 데이터를 저장하고 검색할 수 있는 실용적인 수단을 제공합니다. 배열을 만들려면 `declare -A` 구문 뒤에 원하는 배열 이름을 지정합니다:

 # Declare an associative array in Zsh 
declare -A my_assoc_array

특정 키-값 쌍으로 연관 배열을 만들려면 먼저 Python, JavaScript 등의 프로그래밍 언어에서 해시 테이블이나 사전과 같은 적절한 데이터 구조를 사용하여 배열을 초기화해야 합니다. 초기화 후에는 기존 키에 값을 할당하거나 아직 존재하지 않는 경우 새 키를 생성하여 배열에 새 요소를 추가할 수 있습니다. 이렇게 하면 배열 내에 저장된 정보에 쉽게 액세스하고 수정할 수 있습니다.

 my_assoc_array=(key1 value1 key2 value2)  

마지막으로, 연관 배열의 키에 직접 액세스하여 해당 키와 연관된 값을 검색할 수 있습니다. 이 기능은 배열 내에 저장된 특정 데이터로 특정 작업을 해야 할 때 유용합니다. 원하는 값의 키를 지정하면 필요에 따라 해당 정보를 쉽게 검색하고 조작할 수 있습니다.

 echo $my_assoc_array[key1] # Outputs: value1 

Bash 버전 4 릴리스부터 Bash에는 연관 배열에 대한 기본 지원이 포함되어 있습니다. 값을 선언하고 할당하는 과정은 Zsh와 유사합니다. 그러나 배열 값을 검색할 때는 키를 중괄호 {}로 묶어야 합니다.

 echo "${my_assoc_array[key1]}"  

Zsh는 Bash에 비해 연관 배열을 위한 보다 포괄적인 기능을 제공합니다. 두 셸 모두 배열에 키-값 쌍을 생성할 수 있지만, Zsh는 문자열뿐 아니라 다양한 데이터 유형의 키를 사용할 수 있습니다. 반면 Bash는 키를 문자열로만 제한합니다.

이 글도 확인해 보세요:  내부에서 REST API 호출을 수행하는 방법 VS 코드

이전 버전의 Bash 프로그래밍 언어에서는 연관 배열을 활용하기 위해 해결 방법을 구현하거나 외부 도구를 활용해야 했습니다.

확장 글로브 패턴

확장 글로브 패턴을 활용하면 여러 기준에 따라 파일과 디렉터리를 선택하고 조작할 수 있는 강력하고 적응력 있는 방법이 제공되므로 복잡한 디렉토리 구조 또는 정확한 파일 선택 요구 사항과 관련된 상황에서 특히 유용합니다.

Zsh 스크립트 내에서 `setopt` 명령을 활용하면 파일 매칭을 위한 다양한 패턴을 지정할 수 있습니다. 예를 들어, 현재 작업 디렉터리 내에 있는 확장자가 “.txt”인 모든 파일을 식별하기 위해 다음과 같은 구문을 사용할 수 있습니다:

 setopt extended_glob
txt_files=(*.txt)

파일 확장자가 “.log”인 파일을 제외하려면 다른 모든 파일을 어떻게 필터링할 수 있나요?

 setopt extended_glob
non_log_files=^(*.log)

bash 셸을 사용하여 현재 작업 디렉터리에서 “.txt”로 끝나는 모든 파일을 일치시키는 기능을 사용하려면 “extglob” 옵션과 함께 “shopt” 명령을 사용할 수 있습니다.

 shopt -s extglob
txt_files=(*.txt)

파일 확장자가 “.log”인 파일을 제외하려면 다른 모든 유형의 파일만 선택하도록 명령을 수정하려면 어떻게 해야 하나요?

 shopt -s extglob
non_log_files=!(*.log)

Zsh와 Bash는 활성화에 사용되는 명령의 차이로 인해 패턴 매칭 기능에 뚜렷한 차이가 있습니다. 그럼에도 불구하고 특정 연산자는 이 두 셸 간에 다를 수 있다는 점에 유의하는 것이 중요합니다.

고급 매개변수 확장

Zsh는 참조하는 변수 이름 앞에 느낌표(!)를 사용할 수 있도록 지원하여 변수를 간접적으로 확장할 수 있습니다. 이 기능을 활용하면 다른 변수에 의해 지정된 변수의 값을 조작할 수 있습니다.

 name="foo"
result="${!name}"
echo "$result"

Bash와 같은 일부 셸은 기본적으로 간접 매개변수 확장을 지원하지 않지만 해결 방법을 사용할 수 있습니다. 예를 들어, `eval` 기본 제공 명령 또는 `${!var}` 구문을 사용하여 Bash에서 변수를 간접적으로 참조할 수 있습니다.

 name="world"
var="name"
echo ${!var} # This will output: world

Bash와 Zsh의 유사점

Bash와 Zsh는 서로 다른 점이 있지만, 공통점도 있습니다.

명령줄 구문

명령줄에 사용되는 Bash와 Zsh의 구문은 놀라울 정도로 일관적입니다. 따라서 이 두 셸 내에서 작성된 명령어와 스크립트의 압도적인 대다수를 변경할 필요 없이 두 셸 모두에서 원활하게 실행할 수 있습니다. 주목할 만한 점은 Zsh가 Bash를 기반으로 구축되었기 때문에 이전 버전에 포함된 모든 기본 기능을 상속한다는 것입니다.

문법 구조에 약간의 불일치가 있어 주의가 필요하지만, 무시할 수 있는 수준이며 쉽게 수정할 수 있습니다.

이 글도 확인해 보세요:  자바스크립트에서 Intl API를 사용하는 방법

명령 대체 일관성

명령 대체로 알려진 기술은 한 명령의 결과를 다른 명령의 실행에 통합하는 것을 포함하며, 이 일관성은 두 유형의 셸에 모두 적용됩니다.

 result=$(ls)  

Bash와 Zsh는 모두 $(command) 구문을 사용하여 명령의 출력을 변수로 캡처하는 기능을 지원합니다. 이 기능을 사용하면 이러한 셸 중 하나를 사용하는 여러 운영 체제에서 스크립트를 원활하게 마이그레이션할 수 있습니다.

스크립트 디버깅 옵션

스크립트 디버깅과 관련하여 “-x” 플래그를 활용하는 것은 Bash와 Zsh 모두에서 일반적인 관행입니다. 이 플래그를 활성화한 상태에서 스크립트를 실행하면 시스템에서 실행하려는 각 명령을 실행하기 전에 표시합니다. 이를 통해 사용자는 스크립트 내에 존재하는 잠재적인 문제나 오류를 보다 효과적으로 감지할 수 있습니다.

 # Debugging a script in both Bash and Zsh
#!/bin/bash -x

echo "Debugging Bash script"

이 Bash 스크립트 내에서 -x 플래그를 사용하면 디버깅 작업을 용이하게 할 수 있습니다. 비슷한 방법론은 “bash”를 “zsh”로 대체하여 Zsh에서 구현할 수 있습니다.

Zsh와 Bash 중 선택 시 고려 사항

수많은 Unix 기반 플랫폼에서 기본 셸로 널리 사용되는 Bash는 크로스 플랫폼 스크립팅 작업에 적합한 타고난 호환성을 지니고 있습니다. 또한 다양한 운영 체제에서 수정할 필요 없이 원활하게 실행되므로 이식성이 가장 중요한 경우 더욱 실용적인 선택이 될 수 있습니다.

Zsh는 연관 배열, 향상된 글로브 패턴, 높은 수준의 매개변수 확장 등 보다 복잡한 기능을 제공하여 까다로운 스크립팅 시나리오를 간소화할 수 있습니다. 정교한 텍스트 처리 또는 강력한 데이터 구조가 필요한 경우 Zsh는 탁월한 지원을 제공합니다.

Bash와 Zsh는 모두 활발한 커뮤니티를 자랑하지만, Zsh가 더 강력한 커뮤니티를 보유하고 있으며 광범위한 플러그인과 테마를 제공합니다.개인화를 우선시하는 사용자에게는 Zsh의 번성하는 커뮤니티와 확장된 플러그인 지원이 주목할 만한 장점입니다.

입문자용 셸 프로그래밍 언어인 Bash는 기본적인 셸 스크립팅 기술을 쉽게 익힐 수 있는 포괄적인 문서와 학습 자료를 제공하므로 셸 스크립팅에 익숙해지려는 초보자에게 적합한 선택이 될 수 있습니다.

셸 스크립트를 사용한 작업 자동화

명령줄 인터페이스, 특히 셸 스크립트 활용을 통한 스크립팅 숙달은 상당한 가치를 지니고 있습니다. 이러한 숙련도를 통해 반복적인 프로세스를 효과적으로 간소화하여 많은 시간을 절약할 수 있습니다.

이러한 스크립트는 사용자 계정 관리, 시스템 리소스 모니터링, 데이터 백업, 일상적인 유지 관리 수행과 같은 다양한 기능을 제공하며, 꼼꼼하게 작성하면 인적 오류의 가능성을 최소화할 수 있습니다.

By 최은지

윈도우(Windows)와 웹 서비스에 대한 전문 지식을 갖춘 노련한 UX 디자이너인 최은지님은 효율적이고 매력적인 디지털 경험을 개발하는 데 탁월한 능력을 발휘합니다. 사용자의 입장에서 생각하며 누구나 쉽게 접근하고 즐길 수 있는 콘텐츠를 개발하는 데 주력하고 있습니다. 사용자 경험을 향상시키기 위해 연구를 거듭하는 은지님은 All Things N 팀의 핵심 구성원으로 활약하고 있습니다.