zsh와 비교 한 bash의 고유 기능


67

나는 꽤 오랫동안 (shsh 이전과 csh 이전) zsh 사용자였습니다. 나는 그것에 매우 만족하지만 zsh에는 존재하지 않는 강력한 bash 기능이 있는지 궁금합니다. 반대로 bash에는 존재하지 않는 zsh 기능이 있습니까? 내 현재 느낌은 배쉬가 더 낫다는 것입니다.

  • 이미 익숙하고 새로운 구문을 배우고 싶지 않다면.
  • 기본적으로 대부분의 모든 * nix 시스템에 존재하지만 zsh는 추가 설치 일 수 있습니다.

여기서 종교적 전투를 시작하지 않기 때문에 쉘 중 하나에 만 존재하는 기능을 찾고 있습니다.


10
하나 또는 다른 주관적인 기능은 어떤가요? 나는 솔직히 화염 전쟁을 찾고 있지 않으며 어느 한쪽에 대한 친숙 함이 그 껍질을 선호하는 좋은 이유라고 생각했습니다.
Tim

답변:


40

zsh는 벌 칸용입니다. ;-)

진지하게 : bash 4.0에는 이전에 zsh에서만 발견 된 몇 가지 기능이 있습니다.

% ls /usr/src/**/Makefile

다음과 같습니다.

% find /usr/src -name "Makefile"

그러나 분명히 더 강력합니다.

내 경험상 bash의 프로그래밍 가능 완료는 적어도 일부 경우 (예 : 적성을 위해 데비안 패키지 완성)보다 zsh보다 약간 우수합니다.

bash는 Alt + .삽입해야합니다!$

zsh has expansion of all variables, so you can use e.g.

% rm !$<Tab>

for this. zsh can also expand a command in backtics, so

% cat `echo blubb | sed 's/u/a/'`<Tab>

yields

% cat blabb

I find it very useful to expand rm *, as you can see what would be removed and can maybe remove one or two files from the commmand to prevent them from being deleted.

Also nice: using the output from commands for other commands that do not read from stdin but expect a filename:

% diff <(sort foo) <(sort bar)

From what I read bash-completion also supports completing remote filenames over ssh if you use ssh-agent, which used to be a good reason to switch to zsh.

Aliases in zsh can be defined to work on the whole line instead of just at the beginning:

% alias -g ...="../.."
% cd ...

8
배쉬에서, C-M-e"쉘 - 라인을 확장하여"확장 것이라고 할 cat `echo blubb | sed 's/u/a/'` cat blabbecho $SHELLecho /bin/bash내 경우. 또한 C-x *"glob-expand-word"로 확장 rm *됩니다.
Victor

16

bash는 FreeBSD, OpenBSD 또는 NetBSD에 기본적으로 설치되어 있지 않으며, Solaris 10 (OpenSolaris에 기본값이 있음), AIX를 마지막으로 사용했을 때도 기본적으로 설치되지 않습니다. 또는 HP-UX 서버는 기본적으로 설치되지 않았습니다.

또한 OpenSolaris에서 / bin / sh는 bash가 아닙니다. ksh입니다. 소프트웨어 포터로서 가장 큰 문제는 / bin / sh가 bash이고 bash 확장 구문을 허용하는 사람들입니다. 이것은 대부분의 Linux 배포판에서 해당되는 것처럼 보이지만 다른 곳에서는 그렇지 않으며 실제로 성가시다.


6
네, 맞아요. 아아,이 모든 공급 업체는 추가 패키지로 bash를 설치하는 것이 매우 쉽습니다. 스크립트에서 / bin / sh purism의 필요성을 지적한 +1
kubanczyk

@ kubanczyk : 루트 액세스 권한이없는 컴퓨터에서 작업하는 경우 설치가 쉽지 않을 수 있으므로 X-Istence의 요점은 생각합니다. (나는 많은 Solaris 박스에서 작업하고 sysadmins는 모두 ksh 중독자입니다. 지난번에는 살 수 없었던 (이 경우 git) 살 수 없었던 자체 소프트웨어를 컴파일하려고 시도했을 때 설치된 컴파일러에 결함이 있었으므로 그 길은 나에게 차단되었다.)
iconoclast

12

나는 bash 사용자이지만 zsh의 기능 중 하나 인 RPS1이 매우 멋지다는 것을 알았습니다.

생각해 내다:

  • PS1 : 왼쪽 정렬 프롬프트
  • RPS1 : 오른쪽 정렬 프롬프트

견본:

같은 것을 사용할 때

PS1=’%B(%h) %m%#%b 
RPS1=’(%20<…<%~)'

왼쪽에 프롬프트가 표시되고 현재 디렉토리가 오른쪽으로 푸시됩니다. 현재 라인이 너무 길어지면 사라집니다! zsh가 RPS1에 낮은 우선 순위를 부여 할만큼 똑똑하기 때문입니다.

http://imgur.com/OAZhC 에서이 예제의 스크린 샷을 볼 수 있습니다 .


9

Zsh에는 맞춤법이 수정되었습니다. 당신이 편지 (또는 그 이상)라면, 그것은 당신이 의미하는 것을 알아낼 것입니다.

또한 더 강력한 탭 완성 기능이 있습니다.

Zsh에는 대화식 구성 유틸리티가있어 원하는 방식으로 설정할 수 있습니다.

일부 속도 테스트는 zsh가 더 빠르다고 말하지만 차이점은 없습니다.


1
기능의 일부만 지원하고 빠르게 실행되어야하는 스크립트 (예 : 시작 프로그램)에서 사용하도록 설계된 제거 된 대시 버전은 대시입니다.
Chucky

zshDvorak 키보드 사용에 대해 '하나의 문자 꺼짐'오타를 허용하는 설정도 있습니다.
vgoff April

6

zsh가 지원하지 않는 bash 기능을 모르겠습니다. zsh의 디자인 목표는 bash가 추가하는 모든 기능을 지원하는 것으로 보입니다.

나는 여전히 zsh 대신 bash를 사용합니다. zsh가 bash가 지원하지 않는 강력한 기능은 거의 없습니다. 수년간 zsh에 문제가 있거나 특정 sysetms에 존재하지 않는 zsh 문제로 인해 전환 할 가치가 없습니다.

마지막으로 모든 유닉스 시스템에서 동일한 쉘을 사용할 수 있습니다. 절대 사용하지 않을 기능에 대해서는 이것을 깨울 가치가 없습니다.

bash에없는 zsh에있는 기능은 대부분 귀엽지 만 일상적으로 중요한 기능은 아닙니다.


3

bash에는 zsh에만 있었던 많은 기능이 있습니다. 최근 우분투 사용자가 발견 한 것처럼 bash를 사용하여 '스마트 탭 완성'을 할 수 있습니다.


1

프로세스 대체와 확장 글 로빙은 내가 가장 놓치게 될 두 가지 기능입니다. 프롬프트 설정도 꽤 멋지다-명령 줄에 복잡한 문장을 입력 할 때 중첩 수준을 볼 수 있습니다. 자동 로딩은 모든 쉘에 많은 기능을 포함시킬 수 있습니다.


언급 한 모든 것이 zsh에 포함되어 있기 때문에 zsh에서 누락 된 것을 의미한다고 가정합니다. (그러나 그들이 bash에서 모두 결석했다고 확신합니까? 저를 놀라게 할 것입니다.) 어쨌든 사람들은 bash / zsh 울타리의 양쪽에 응답하기 때문에 대답을 더 명확하게 만들 것입니다. 또한 이러한 각 기능이 쉘 수명을보다 쉽게 ​​만드는 방법에 대한 예를 제공하면 도움이됩니다.
iconoclast

0

vi 모드 지원으로 인해 zsh의 팬이지만 널리 사용되지 않는다는 것을 알게되었습니다. zsh가 다른 쉘에서 인기있는 기능을 가져 와서 결합하는 것을 좋아한다고 읽었습니다 (bash 및 csh 관련 항목은 모두 zsh에서 사용할 수 있음).

누군가는 zsh를 사용하여 괴짜 요소를 조정하고 있다고 말했지만 그 소문을 확인하거나 거부 할 수는 없습니다.


5
그리고 bash는 vi 모드를 지원합니다.
pjz 2016

@ 밀너 : zsh에서 bash에없는 vi 모드 지원의 종류를 설명 할 수 있습니까? 명령 행에서 -o vi를 설정하는 기능을 의미한다면, 이는 둘 다에 분명합니다. zsh에 확장 된 지원이있는 경우 해당 기능이 무엇이고 추가 된 내용이 무엇인지 명확하게 설명 할 수 있습니까?
iconoclast

-1

인기는 #bash 430 명입니다. #zsh 123 명의 사용자 zsh 웹 사이트는 다른 쉘과 zsh를 잘 비교한다고 생각합니다. zsh는 더 나은 vi 모드를 지원합니다.


2
zsh의 vi 모드가 어떻게 더 좋습니까? 나는 bash 사용자이고 vi 모드가 켜져 있으므로 전환에 이점이 있는지 알고 싶습니다.
ptman

1
@ptman : zsh 프롬프트에서 모드를 알려줍니다 (삽입 / 정상). readline은 그렇게 할 수 없습니다. 프롬프터도 더 유연합니다. 구문 강조 등을 할 수 있습니다!
unperson325680

@progo : 아아! 아주 좋아요 이제 zsh에서 vi 모드를 사용할 수 있습니다 . 이것이 지금까지 이맥스 모드를 고수하는 이유 중 하나였습니다.
iconoclast

@Brandon은 약간의 향상으로 인해 쉘을 전환해야했습니다.
unperson325680

-1

Bash는 명령 행의 / bin / sh 스크립트에서 사용할 수있는 if 및 while에 대해 동일한 구문을 사용합니다.
zsh 내에서 구문이 다릅니다. zsh를 효과적으로 사용하려면 명령 행에서 if 문 또는 while 문을 사용하는 경우 둘 다 기억해야합니다.


1
if [[ $test = "test" ]]; then echo "success"; else echo "failure"; fi명령 줄과 스크립트를 모두 사용 하여이 작업을 시도 했으며 두 경우 모두 예상대로 작동했습니다. 그래서 당신은 당신의 사실을 똑바로 가지고 있지 않은 것 같습니다.
iconoclast

이것은 / bin / sh로 설치 한 내용에 따라 다릅니다. / bin / sh가 bash이면 옳습니다. 그렇지 않으면 bash는이 이점이 없습니다. zsh가 / bin / sh 인 경우 zsh는이 이점이 있습니다. / bin / sh를 제공 할 수있는 모든 다른 쉘을 감안할 때 개인적으로 쉘 스크립팅에 원하는 쉘을 사용하는 것이 좋습니다. 그래서 부재는 방법에 대한 단서가없는 기괴한 행동보다는 명백한 수정 문제가 있음을 나타냅니다 결의.
Ed Grimm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.