bash에는 없는 zsh에는 어떤 기능이 없고, 그 반대의 경우도 있습니까?

bash에는 없는 zsh에는 어떤 기능이 없고, 그 반대의 경우도 있습니까?

Linux 사용자로서 저는 항상 bash만 사용해 왔습니다. 왜냐하면 이것이 제가 사용한 모든 배포판의 기본값이기 때문입니다. BSD와 같은 다른 Unix 시스템을 사용하는 사람들은 다른 쉘을 더 자주 사용하는 것 같습니다. 더 많은 것을 배우기 위해 zsh를 사용해 보기로 결정했습니다.

Bash 사용자로서:

  • 어떤 기능을 놓칠 수 있나요?
  • 무엇에 주의해야 합니까?

답변1

더 넓은 답변을 보려면 다음을 읽어보세요.https://apple.stackexchange.com/questions/361870/what-are-the-practical-differences- Between-bash-and-zsh/361957#361957

다른 Stack Exchange 사이트에서는 이미 이 주제에 관한 많은 활동이 있습니다. 내가 알 수 있는 한(몇 년 전²), bash에서 zsh로 전환한 경험은 내가 아무것도 놓치지 않았다는 것입니다. 저는 많은 것을 배웠습니다. 제가 가장 많이 사용한다고 생각하는 간단한 zsh 관련 기능은 다음과 같습니다.

  • 가끔 bash를 사용할 때 가장 그리워하는 zsh 기능은 autocd입니다. zsh에서 해당 옵션을 켜면 디렉토리를 실행한다는 것은 해당 autocd디렉토리를 변경하는 것을 의미합니다. ⁴

  • 또 다른 매우 유용한 기능은 멋진 와일드카드입니다. 상형 문자는 기억하기가 조금 어렵지만 매우find 편리합니다(예를 들어 해당 명령을 작성하는 것보다 찾는 것이 더 빠른 경우가 많습니다 ). 더 간단한 예:
        foo*~*.bak= foo*다음을 제외한 모든 일치 *.bak
        foo*(.)= 일반 파일만 일치 foo*
        foo*(/)= 디렉터리만 일치 foo*
        foo*(-@)= 매달려 있는 심볼릭 링크만 일치 foo*
        foo*(om[1,10])= 마지막 10개 파일만 일치 foo*
        foo*(Lm+1)= 크기가 1MB보다 큰 파일만 = 디렉터리 및 해당 디렉터리의 모든 디렉터리 중성자 디렉터리에서 재귀적으로⁴
        dir/**/foo*foo*dir

  • 멋진 이름 변경을 위해서는 zmv내장된 기능이 편리할 수 있습니다. 예를 들어 각각을 file다음 위치에 복사합니다 file.bak.zmv -C '(*)(#q.)' '$1.bak'

  • bash와 zsh 모두 명시적으로 활성화( . /etc/bash_completion또는 autoload -U compinit; compinit)해야 하는 멋진 완성 시스템을 가지고 있습니다. Zsh는 더 구성 가능하고 일반적으로 더 세련되었습니다.

zsh를 사용하지 않고 실행하면 .zshrc구성 옵션을 선택할 수 있는 대화형 메뉴가 시작됩니다. (일부 배포판에서는 이 기능을 비활성화할 수 있습니다. 이 경우 를 실행하십시오 autoload zsh-newuser-install; zsh-newuser-install.) 권장 기록 옵션을 활성화하고 ("새 스타일") 완성 기능을 켜고, beep. 나중에 더 많은 옵션을 발견하면 구성하세요.

² 당시에는 프로그래밍 가능한 완성 기능이 zsh의 킬러 기능이었지만 bash는 이를 빠르게 획득했습니다.
bash가 버전 4에서만 얻은 기능(따라서 이 답변이 게시된 시점에는 아직 널리 사용할 수 없으며 macOS의 시스템 제공 bash에서는 사용할 수 없음)은 더 작은 유형입니다.

답변2

zsh여러 줄 명령을 편집할 수 있습니다(참조:zsh 라인 편집기), bash는 그렇지 않습니다. 동일한 트릭( Ctrl-p)을 시도하면 bash는 마지막 명령을 선택합니다.

답변3

또한 기본 탭 완성 기능이 bash보다 낫습니다. 예를 들어...

~/.e.dTAB은 zsh로 확장되고 ~/.emacs.d/bash에서는 경고음이 울립니다.

답변4

그중에는 zsh의 개선 사항이 있습니다.

Bash의 명령은 which명령의 위치만 표시합니다.

Zsh에서는 whichan의 정의 alias, a의 소스 function, 명령의 위치가 표시됩니다.

쉘 별칭이 있다고 가정합니다.

alias gg='git log'

Bash에서 다음을 요청하면 which gg결과가 유효하지 않습니다 .

Zsh에서: which gg우리에게 줄 것입니다...

gg: aliased to git log

쉘 함수가 있다고 가정해 봅시다:

hello() {
    echo "Hello World"
}

Bash에서 요청하면 which hello결과가 유효하지 않습니다.

Zsh에서: which hello우리에게 줄 것입니다...

hello() {
    echo "Hello World"
}

관련 정보