Zsh 대 Bash 스크립팅. 차이점이 뭐야?

Zsh 대 Bash 스크립팅. 차이점이 뭐야?
당신과 같은 독자들이 MUO를 지원하는 데 도움을 줍니다. 귀하가 당사 사이트의 링크를 사용하여 구매하면 당사는 제휴 수수료를 받을 수 있습니다. 자세히 읽어보세요.

Unix 계열 운영 체제의 쉘 스크립팅에서는 Bash(Bourne Again Shell)와 Zsh(Z Shell)라는 두 가지 쉘이 지배적입니다. 프로그래머이거나 시스템 관리자라면 이 둘 중 하나를 선택하는 것이 효율성과 생산성에 큰 영향을 미칩니다.





MUO 오늘의 영상 콘텐츠를 계속하려면 스크롤하세요.

이 두 셸 간의 차이점과 유사점을 이해하면 명령줄 작업 흐름을 최적화하는 데 도움이 됩니다. 각 쉘의 미묘한 차이를 알면 현명한 결정을 내리는 데 도움이 됩니다.





Bash와 Zsh란 무엇입니까?

Bash는 Linux와 macOS 시스템 모두에서 널리 사용됩니다. 운영 체제와 상호 작용하고 명령을 실행하는 데 사용할 수 있는 강력한 도구입니다. 당신은 또한 수 쉘 스크립팅에 Bash 사용 , 둘 이상의 명령이 포함된 스크립트를 작성하여 작업을 자동화합니다.





Zsh(Z 쉘)는 더 많은 기능을 갖춘 Bash의 확장 버전입니다. macOS의 기본 셸입니다. 또한 Linux 시스템에서도 점점 인기를 얻고 있습니다.

Bash에서 Zsh로 전환하는 방법

Linux 시스템을 사용하고 있고 Zsh로 전환하고 싶다면 다음으로 시작하세요. 패키지 관리자를 사용하여 설치 . 예를 들어 Debian 또는 Ubuntu에서는 다음 명령을 사용합니다.



 sudo apt install zsh

시스템에 설치한 후 다음 명령을 실행하여 전환하십시오.

 chsh -s $(which zsh)

macOS를 사용하는 경우 Zsh가 이미 설치되어 있습니다. 전환하려면 다음 명령을 실행하십시오.





 chsh -s /bin/zsh

Bash로 다시 전환하려면 위 명령에서 Zsh를 Bash로 바꾸세요.

사용 중인 쉘을 확인하려면 다음 명령을 실행하십시오.





 echo $SHELL

이는 의도한 셸을 사용하고 있는지 확인하는 데 도움이 됩니다.

밤새 휴대 전화를 충전하는 것이 좋지 않습니까?

Zsh와 Bash의 차이점

Zsh와 Bash에는 몇 가지 차이점이 있습니다. 이러한 차이점을 고려하면 어떤 쉘이 자신에게 가장 적합한지 결정하는 데 도움이 됩니다.

1. 신속한 맞춤화

Zsh는 다음을 사용하여 프롬프트를 사용자 정의하는 더 쉬운 방법을 제공합니다. % 기반 이스케이프 시퀀스. 이를 통해 색상과 정보가 포함된 동적 프롬프트가 가능합니다. 쉘 프롬프트를 사용자 정의하려면 다음을 정의하십시오. PS1 (기본 프롬프트).

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

위의 사용자 정의 프롬프트는 사용자 이름, 호스트 이름 및 현재 디렉터리를 다양한 색상으로 표시합니다.

  터미널에서 Zsh 프롬프트 사용자 정의

많이있다 Zsh 프롬프트를 사용자 정의하는 다른 방법 를 사용하면 관리자 표시기를 설정하고 날짜와 시간을 포함하고 새 프롬프트를 저장할 수 있습니다.

Bash는 프롬프트 사용자 정의와 관련하여 약간 다른 접근 방식을 사용합니다. 프롬프트에서 색상과 형식 변경을 지정하기 위해 이스케이프 코드를 사용합니다. 위의 Zsh와 동일한 사용자 정의를 달성하려면 다음 사용자 정의 프롬프트를 사용할 수 있습니다.

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

사용 \[3[0m\] 색상 변경이 프롬프트 다음에 나오는 텍스트에 영향을 미치지 않도록 하는 것이 중요합니다.

2. 연관 배열 지원

Zsh는 기본적으로 연관 배열을 지원합니다. 이러한 어레이는 데이터를 연결하는 편리한 방법을 제공하므로 정보를 쉽게 구성하고 검색할 수 있습니다. 사용 선언하다 -ㅏ 연관 배열을 명시적으로 선언하는 명령:

 # Declare an associative array in Zsh  
declare -A my_assoc_array

그런 다음 연관 배열에 값을 할당할 수 있습니다.

 my_assoc_array=(key1 value1 key2 value2) 

마지막으로 해당 키를 사용하여 값에 액세스합니다.

 echo $my_assoc_array[key1] # Outputs: value1

Bash에는 연관 배열에 대한 기본 지원이 포함되었습니다. 버전 4.0부터. Zsh에서와 동일한 방식으로 값을 선언하고 할당합니다. 그러나 배열 값에 액세스하려면 키를 중괄호로 묶어야 합니다.

 echo "${my_assoc_array[key1]}" 

주요 차이점은 연관 배열에 대한 Zsh의 지원이 Bash보다 기능이 더 풍부하고 고급이라는 것입니다. Zsh를 사용하면 연관 배열이 문자열뿐만 아니라 다양한 데이터 유형의 키를 가질 수 있습니다. Bash는 문자열 키만 지원합니다.

이전 버전의 Bash에서는 해결 방법을 찾거나 연관 배열을 사용하기 위한 외부 도구가 필요했습니다.

3. 확장된 글로빙 패턴

확장된 글로빙 패턴은 다양한 기준에 따라 파일과 디렉터리를 선택하고 조작하는 강력하고 유연한 방법을 제공합니다. 복잡한 파일 구조로 작업하거나 파일 선택을 정밀하게 제어해야 할 때 유용합니다.

Zsh 스크립트에서는 다음을 사용하여 이러한 패턴을 활성화할 수 있습니다. 셋옵트 명령. 예를 들어, 모두 일치시키려면 .txt 현재 디렉터리의 파일:

 setopt extended_glob 
txt_files=(*.txt)

.log 확장자를 가진 파일을 제외한 모든 파일을 일치시키려면:

 setopt extended_glob 
non_log_files=^(*.log)

Bash에서는 다음을 사용하여 활성화해야 합니다. 상점 명령을 사용하여 익스트글로브 옵션. 예를 들어, 모두 일치시키려면 .txt 현재 디렉터리의 파일:

 shopt -s extglob 
txt_files=(*.txt)

다음을 제외한 모든 파일을 일치시키려면 .통나무 확대:

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

Globbing 패턴과 관련하여 Zsh와 Bash의 주요 차이점은 이를 활성화하는 데 사용되는 명령입니다. 그러나 두 셸 간에 일부 연산자가 다르다는 점에 유의하세요.

4. 고급 매개변수 확장

Zsh는 매개변수의 간접 확장을 지원합니다. 이를 통해 이름이 다른 변수에 저장된 변수의 값을 확장할 수 있습니다. 이를 위해서는 변수 이름 앞에 느낌표를 붙여야 합니다. ! .

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

반면 Bash는 기본적으로 간접 확장을 허용하지 않습니다. 이에 대한 해결 방법은 다음을 사용하는 것입니다. 평가 내장 명령 또는 ${!였습니다} 간접 변수 참조 구문.

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

Bash와 Zsh의 유사점

Bash와 Zsh 사이에는 차이점이 있지만 몇 가지 유사점도 공유합니다.

1. 명령줄 구문

Bash와 Zsh는 비슷한 명령줄 구문을 공유합니다. 이는 여러분이 작성하는 대부분의 명령과 스크립트가 수정 없이 두 셸 모두에서 작동한다는 것을 의미하기 때문에 좋습니다. Zsh는 Bash를 기반으로 구축되었으므로 동일한 기본 명령과 기능을 모두 포함합니다.

그러나 식별하고 조정해야 하는 구문에는 매우 사소한 차이가 있습니다.

2. 명령 대체 일관성

명령 대체는 한 명령의 출력을 다른 명령에 삽입하는 프로세스입니다. 두 쉘 사이에서 일관성이 있습니다.

 result=$(ls) 

Bash와 Zsh 모두에서 다음을 사용할 수 있습니다. $(명령) 명령의 출력을 변수로 대체하는 구문입니다. 이를 통해 두 셸 간에 스크립트를 쉽게 이식할 수 있습니다.

3. 스크립트 디버깅 옵션

Bash와 Zsh 모두 사용 -엑스 스크립트 디버깅을 위한 플래그입니다. 이 플래그를 사용하여 스크립트를 실행하면 실행되기 전에 각 명령이 표시됩니다. 이는 스크립트의 문제를 식별하는 데 도움이 됩니다.

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

echo "Debugging Bash script"

이 Bash 스크립트에서는 -엑스 플래그는 디버깅을 활성화합니다. Zsh에서도 비슷한 접근 방식을 사용할 수 있습니다. 그냥 교체하세요 세게 때리다 ~와 함께 zsh .

Zsh와 Bash 중에서 선택할 때 고려해야 할 사항

  • 호환성 및 이식성 : Bash는 많은 Unix 기반 시스템의 기본 셸입니다. 따라서 크로스 플랫폼 스크립팅에 더 안전한 선택이 됩니다. 수정 없이 광범위한 시스템에서 스크립트를 실행해야 한다면 Bash가 더 나은 선택입니다.
  • 스크립트 복잡성 및 고급 기능 : Zsh는 연관 배열, 확장된 글로빙 패턴, 고급 매개변수 확장과 같은 고급 기능을 제공합니다. 이는 복잡한 스크립팅 작업을 단순화합니다. 스크립트에 고급 문자열 조작이나 데이터 구조가 필요한 경우 Zsh가 더 나은 선택입니다.
  • 커뮤니티 및 플러그인 생태계 : Bash와 Zsh 모두 활발한 커뮤니티를 보유하고 있지만 Zsh는 더 강력한 커뮤니티와 플러그인 및 테마로 구성된 광범위한 생태계를 보유하고 있습니다. 사용자 정의를 중요하게 생각한다면 Zsh의 활발한 커뮤니티와 플러그인 지원이 상당한 이점이 될 수 있습니다.
  • 학습의 용이성 : 쉘 스크립팅을 처음 접하는 경우 Bash가 더 접근하기 쉬운 시작점입니다. 초보자를 위한 광범위한 문서와 리소스가 제공됩니다. 이를 통해 쉘 스크립팅의 기본을 더 쉽게 배울 수 있습니다.

쉘 스크립트를 사용하여 작업 자동화

쉘 스크립트를 사용하여 작업을 자동화하는 방법을 아는 것은 매우 중요합니다. 반복적인 작업을 자동화하고 많은 시간을 절약할 수 있습니다.

또한 이러한 스크립트를 사용하여 사용자 계정을 관리하고, 시스템 리소스를 모니터링하고, 데이터를 백업하고, 정기적인 유지 관리를 수행할 수 있습니다. 주의 깊게 작성하면 인적 오류 가능성도 줄일 수 있습니다.